해보기는 했어?

오늘 안됐다고 포기하지 말고 용기내서 내일 다시 해 보자.

임베디드

Mini MP3 Module

롬돌이 2025. 4. 10. 14:17
반응형
반응형

개요

MP3, WAV 파일을 Play 할 수 있는 YX5200(or 동등한 IC) IC Module을 제어해 본다.

아두이노, 마이크로프로세서 등에서 간단하가 Sound를 플레이할 수 있다. 두 제품에 적용해 봤는데 적정 성능을 보여주고 있다.

부저만 사용하던 제품에 MP3나 WAV와 같은 미디어 파일을 적용할 수 있게 되어 MCU보드의 부담과 개발에 따른 부담을 덜어줄 수 있다.

 

Ⅰ. Keyes Player Mini Module

사용할 Sound Play Module은 Devicemart에서 구매한 Keyes Player Mini Module이다. 모듈 단가는 약 5,000원+ 정도 하고, IC는 약 2,000원+ 정도 한다.

 

대표사진 삭제

사진 설명을 입력하세요.

매뉴얼 상의 예제로는 아두이노를 이용한 동작을 보여주고 있다.

 

대표사진 삭제

사진 설명을 입력하세요.

그러나 ADSTAR 보드에 연결시켜야 하므로 IC를 직접 제어하는 방법을 확인해 본다.

 

Ⅱ. 통신 방식

9600 bps(default)

1 stop bit, none parity, 8bit 데이터일 것이다. 데이터 시트에는 제대로 표기가 안되어 있다.

 

 

 

Ⅲ. 데이터 포맷

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
$S
VER
Len
CMD
FB
Para1
Para2
CHK
$O
 
  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

$S : start bit 0x7E, 각 프레임은 STX

VER : 버전정보, 현재는 0xFF이다.

Len : 데이터 길이, 체크섬은 안들어간다.

CMD : 명령어, 동작, 멈춤 등

FeedBack : 명령어 FeedBack, 0이아니다. 뭐지?

para1 : 파라미터1, 노래 번호와 같은 설정 데이터의 상위 바이트

para2 : 파라미터2, 노래 번호와 같은 설정 데이터의 하위 바이트

checksum : 2바이트이고, STX를 포함한다.

$O : ETX, 0xEF

 

checksum = (0xFFFF – (VER+Len+CMD+FB+Para1+Para2))+1

 

Ⅳ. Base Board 설계

대표사진 삭제

사진 설명을 입력하세요.

< Mini Module의 핀맵과 전원 LED >

 

 

대표사진 삭제

사진 설명을 입력하세요.

< 출력 오디오 잭 >

출력은 2갸지로 DAC와 Speaker가 있다. Speaker는 따로 2핀 짜리 커넥터를 만들어 두었다.

 

대표사진 삭제

사진 설명을 입력하세요.

< Key >

키 입력을 받아서 처리할 수 있도록 프로그래밍 되어 있다. 실제 개인적으로는 사용하지 않으므로 미삽 처리하였다.

 

대표사진 삭제

사진 설명을 입력하세요.

< TTL 232 통신 >

 

통신 방법 중 232를 사용하는데 위 커넥터는 TTL 레벨의 232 통신을 사용할 때 적용한다.

이 IC가 3.3V 짜리라서 컨트롤 프로세서가 5V짜리라면 R8과 R6을 이용해서 UART0_RX 핀에 3.3V 레벨의 신호가 입력되도록 만들어 줘야한다. 5V 신호를 입력하니까 인식하지 못한다.

 

대표사진 삭제

사진 설명을 입력하세요.

< RS2332 Part >

RS232 Level로 통신을 할 경우에 사용한다. 가능하면 이 기능을 사용하는 것이 편할 것 같다. 그래야 제어 보드의 레벨이 어느 정도이든 큰 신경 안쓰고 적용이 가능할 듯 싶다.

 

 

 

 

 

 

 

Ⅴ. Base Board PCB 설계

 

대표사진 삭제
 

사진 설명을 입력하세요.

 

Ⅵ. 제어 커맨드

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가
  • 12행 선택12행 다음에 행 추가
  • 13행 선택13행 다음에 행 추가
  • 14행 선택14행 다음에 행 추가
  • 15행 선택15행 다음에 행 추가
  • 16행 선택16행 다음에 행 추가
  • 17행 선택17행 다음에 행 추가
  • 18행 선택18행 다음에 행 추가
  • 19행 선택19행 다음에 행 추가
  • 20행 선택20행 다음에 행 추가
  • 21행 선택21행 다음에 행 추가
  • 22행 선택22행 다음에 행 추가
  • 23행 선택23행 다음에 행 추가
  • 24행 선택24행 다음에 행 추가
  • 25행 선택25행 다음에 행 추가
  • 26행 선택26행 다음에 행 추가
  • 27행 선택27행 다음에 행 추가
  • 28행 선택28행 다음에 행 추가
  • 29행 선택29행 다음에 행 추가
  • 30행 선택30행 다음에 행 추가
  • 31행 선택31행 다음에 행 추가
  • 32행 선택32행 다음에 행 추가
  • 33행 선택33행 다음에 행 추가
  • 34행 선택34행 다음에 행 추가
  • 35행 선택35행 다음에 행 추가
  • 36행 선택36행 다음에 행 추가
  • 37행 선택37행 다음에 행 추가
  • 38행 선택38행 다음에 행 추가
  • 39행 선택39행 다음에 행 추가
  • 40행 선택40행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
CMD
command (instruction)
The corresponding function Parameters (16)
0x01
next track
 
0x02
previous piece
 
0x03
Specify the track(NUM)
1-2999
0x04
Volume +
 
0x05
volume-
 
0x06
Specifies the volume
0-30
0x07
Specifies EQ 0/1/2/3/4/5
Normal/ Pop / Rock / Jazz / Classic / Bass
0x08
Single cycle specified track play
0-2999
0x09
Specify the play set 1/2/3/4/5
U / SD / AUX / SLEEP / FLASH
0x0A
Goes to sleep - Low power consumption
 
0x0B
Retention
 
0x0C
Module reset
 
0x0D
Broadcast
 
0x0E
time out
 
0x0F
Specified folder player
1-10 (needs its own set)
0x10
PA set (no)
[DH = 1: open PA] [DL: setting the gain 0-31]
0x11
Repeat All Tracks
[1: looping] [0: Stop looping]
0x12
MP3 tracks specified folder
0--9999
0x13
Commercials
0--9999
0x14
It supports 15 folders See below for details
 
0x15
Stop spots, play background
 
0x16
Stop play
 
0x3C
STAY
 
0x3D
STAY
 
0x3E
STAY
 
0x3F
Send initialization parameters
0 - 0x0F (the lower four bits each represent a device)
0x40
Returns an error, a retransmission request
 
0x41
answer
 
0x42
Query the current status
 
0x43
Query current volume
 
0x44
Query the current EQ
 
0x45
Query current play mode
This version retains this feature
0x46
Query the current software version
This version retains this feature
0x47
The total number of file queries UDISK
 
0x48
The total number of file queries TF card
 
0x49
The total number of file queries FLASH
 
0x4A
Retention
 
0x4B
Query of the current track UDISK
 
0x4C
Queries TF card of the current track
 
0x4D
FLASH query of the current track
 
  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

 

 

예)

static U8 SND_BOOT[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x01, 0xFE, 0xE8, 0xEF};

static U8 SND_GTSLEEP[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x02, 0xFE, 0xE7, 0xEF};

static U8 SND_GTWAIT[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x03, 0xFE, 0xE6, 0xEF};

static U8 SND_START[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x04, 0xFE, 0xE5, 0xEF};

static U8 SND_END[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x05, 0xFE, 0xE4, 0xEF};

static U8 SND_WAIT[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x06, 0xFE, 0xE3, 0xEF};

static U8 SND_STOP[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x07, 0xFE, 0xE2, 0xEF};

static U8 SND_ERROR[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x08, 0xFE, 0xE1, 0xEF};

static U8 SND_BUTTON[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x09, 0xFE, 0xE0, 0xEF};

static U8 SND_RETRY[10] = {0x7E, 0xFF, 0x06, 0x12, 0x00, 0x00, 0x0A, 0xFE, 0xDF, 0xEF};

 

/* hl2xgw 9.Apr.2025 */

static U8 CurLoopStart[10] = {0x7E, 0xFF, 0x06, 0x19, 0x00, 0x00, 0x00, 0xFE, 0xE2, 0xEF};

static U8 CurLoopEnd[10] = {0x7E, 0xFF, 0x06, 0x19, 0x00, 0x00, 0x00, 0xFE, 0xE2, 0xEF};

static U8 StopCurrent[10] = {0x7E, 0xFF, 0x06, 0x16, 0x00, 0x00, 0x00, 0xFE, 0xE5, 0xEF};

 

static U8 VolumeLevel0[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x00, 0xFE, 0xF5, 0xEF};

static U8 VolumeLevel1[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x16, 0xFE, 0xDF, 0xEF};

static U8 VolumeLevel2[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x18, 0xFE, 0xDD, 0xEF};

static U8 VolumeLevel3[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x1A, 0xFE, 0xDB, 0xEF};

static U8 VolumeLevel4[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x1C, 0xFE, 0xD9, 0xEF};

static U8 VolumeLevel5[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x1E, 0xFE, 0xD7, 0xEF};

 

Volume Level은 30까지임.

 

Ⅶ. 결론

재미있는 아이템이다. 이걸 이용하면 8비트 마이컴에서도 시리얼만 동작 시켜서 사운드를 플레이 시킬 수 있다.

유용하게 써 봐야겠다.

가격도 저렴하다.

나는 베이스 보드를 만들어서 사용했지만, 프로젝트 PCB에 직접 넣는다던가 이 회로를 PCB에 넣는다던가 하면

더 적은 공간으로 사용이 가능할 것 같다.

딱 필요한 기능만 테스트 했고, 그 외의 기능은 필요할 때 또 테스트 해 보자.

 

반응형