欢迎进入深圳市思泽远科技有限公司!!!

新闻资讯

全球视野,行业先锋,了解芯片那些事

思泽远管家式售后服务 (让您省心放心)

全国客服热线

0755-2911 2251

立即咨询

5分钟内电话回访

2小时内报价

24小时在线服务

音乐芯片关于串口协议问题的日常处理

发布时间:2021-11-01 文章出自:思泽远科技

语音芯片关于串口协议问题的日常处理

一、基础说明:

1.1:IC供电电压参考范围2.2-5.5V(实际以IC资料为准)。

1.2:本协议是参考红外协议使用IO模拟的同步头+8BIT时序协议(范围0X00-0XFF)

1.3:串口协议的使用的是十六进制。0X或者H:代表十六进制,包含(0-9,A,B,C,D,E,F),协议说  明是按照十六进制的方式做的。0X09后面是0X0A,不是0X10。

1.4:本说明主要解决思泽远公司日常的协议通信问题,如和专用的资料有差异,以专用的资料为准。

如按照本说明未能解决问题,请致电对应的业务和软件工程师。如对本说明有疑问请致电话 0796-29556853-812(胡工)

二、思泽远常见的协议时序如下图:

2.1:8MS协议时序


串图片2.png

2.2:6MS协议时序

 串图片2.png

三、常见协议表范例(仅供参考,以实际项目的协议为准)

10进制

16进制

内容

10进制

16进制

内容

0

0X00

音乐1

21

0XF0

停止码

1

0X01

音乐2

22

0XF1

音量1(最小音量)

2

0X02

音乐3

23

0XF2

音量2

3

0X03

音乐4

24

0XF3

音量3

4

0X04

音乐5

25

0XF4

音量4

5

0X05

音乐6

26

0XF5

音量5

6

0X06

音乐7

27

0XF6

音量6

7

0X07

音乐8

28

0XF7

音量7

8

0X08

音乐9

29

0XF8

音量8

9

0X09

音乐10

30

0XF9

音量9

10

0X0A

音乐11

31

0XFA

音量10

11

0X0B

音乐12

32

0XFB

音量11

12

0X0C

音乐13

33

0XFC

音量12

13

0X0D

音乐14

34

0XFD

音量13

14

0X0E

音乐15

35

0XFE

音量14

15

0X0F

音乐16

36

0XFF

音量15(最大音量)

16

0X10

音乐17

37

0XE9

音量加

17

0X11

音乐18

38

0XEA

音量减

18

0X12

音乐19

39

0XEB

静音  

19

0X13

音乐20

40

0XEC

重播  

20

0X14

音乐21

41

0XED

上一曲


N~~

N~~

42

0XEE

下一曲  

43

0XEF

循环指令:必须先发音乐协议后隔10MS再发循环指令


四、协议应用:

4.1:播放歌曲:比如播放下雨声,直接发送0X02。

4.2:调节音量:比如调节音量到最大,直接发送0XFF。

4.3:单曲循环:在语音播放过程中,发送0XEF,在无音乐播放过程中发0XEF无效。

4.4:协议连发:音量指令(0xf1-x0ff))+30MS+语音指令(0X00-0X0N)(N:做大音乐数)+30MS+循环指令

4.5:音量渐大:音量指令(0xf1)+30MS+语音指令(0X00-0X0N)(N:做大音乐数)+30MS+循环指令+1S+ 音量指令(0xf2)+1S+*********+音量指令(0xff)。

4.6:音量渐小:音量指令(0xff)+30MS+语音指令(0X00-0X0N)(N:做大音乐数)+30MS+循环指令+ 需要音量减小的时间+音量指令(0xfe)+1s+音量指令(0xfd)+****+音量指令(0xf1+)+30MS+停 (0xf0)。

4.7:在有BUSY信号的情况下如何连播:比如下雨声,发送0X02后,检测BUSY脚是否为高电平, 如果是高电平,表示语音在播放,如果是低电平表示语音播放完毕,在检测BUSY为低电平的 时候发送下一条播放指令。

4.8:在没有BUSY信号的情况下如何连播:比如下雨声,语音长度5秒。MCU发送0X02后计时5 秒,5秒后发送下一条播放指令。难点:每条语音长度不一,需要建立全部语音长度的表库。

4.9:上电音量问题上电一般默认为最大音量:如果上电音量不合适,需要在上电的时候发送对 应的音量指令,比如0XF6。但是MCU和语音IC的上电启动时间不一致,语音IC的上电启动时 间大概200MS,建议MCU在上电后延时200MS发送音量指令,防止因为语音IC未启动导致的丢 码。

4.10:停止播放语音:直接发送停止指令0XF0。

 

五、常见疑问解答

5.1:需要几个IO和语音IC通信

答:语音IC一般有DATA和BUSY两条IO脚做通信,对于语音IC,DATA是输入脚,接收MCU发送 的协议,是必须使用到的。BUSY是输出脚,反馈语音的播放状态,如果MCU需要连播,检测语 音播放状态,或者检测协议是否发送成功时需要使用BUSY。

 

5.2:原理图标准的BusyLo,BusyHi,BUSY,BUSYH之间的区别。

答:BusyLo 即有声音为低电平,无声音为高电平,不用可悬空。
BusyHi 即有声音为高电平,无声音为低电平,不用可悬空。

BUSY/BUSYH,一般和BusyHi 功能一致,有声音为高电平,无声音为低电平,不用可悬空。

 

5.3:DATA脚有些是悬空,有些要外置上下拉。

答:请按照原理图配置,一般默认悬空,需要外置上下拉的原理图会明确标注

 

5.4:关于语音IC和MCU之间电压的问题

答:通信的MCU电压务必和音乐芯片电压保持一致,防止漏码与丢失。

音乐芯片的IO为CMOS特性,输入IO检查为高电平必须保证电压大于0.7VDD ,Input High Voltage (VIH)  CMOS (0.7VDD),输入IO检查为低电平必须保证电压小于0.3VDD,Input Low Voltage (VIL)  CMOS (0.3VDD)。
建议不要在临界值附近,IC制程上会有偏差。    
关于IC之间通信的问题必须注意,否则会导致通信失败,丢码,异常

5.5:关于语音IC供电电压明显大于MCU供电电压怎么办。

答:使用一个NPN三极管和一个PNP三极管构成通信电路。

 

5.6:关于语音IC供电电压明显小于MCU供电电压怎么办。

答:使用两个电阻分压的方式构成通信电路。

 

5.7:无法通信。

答:1/第一步先确定语音IC的程序编号和原理图,DATA脚位是否正确。

2/第二步核对MCU和语音IC的供电是否一致。

3/第三步抓取MCU发送的协议和串口时序对比是否一致,脉宽是否偏差太大(一般偏差+-10% 可兼容)。

4/第四步请注意有些数据位发码顺序,比如8MS协议是先发高位,在发低位。而6MS协议是先 发低位再发高位。

5/第五步请注意协议发送完毕后要建议间隔30MS以上在发送其他协议。

6/第六步协议发送完毕后信号要恢复到默认值,比如8MS和6MS协议都是要在发完协议后恢复 到低电平。

7/请检查喇叭是否正常,有测试按键,请参考原理图使用测试按键,测试IC是否正常。

8/有带功放的请检查功放是否开启,DAC脚是否有信号。

 

5.8:同步头的作用

答:同步头用于唤醒语音芯片,并且一个同步头只能带8BIT的数据,要发送多组数据请按照4.4操作。

 

六:C语言范例(8MS协议时序)

#ifndef __sendcode__

#define __sendcode__

#define datapin (1<<0)   //数据引脚

#define dataport GPIOA   // 数据引脚端口

#define clr_wdt()        //清除看门狗指令

#define data1()  dataport = datapin

#define data0()  dataport &=~datapin

 

void delay_ms(unsigned char ms);

void delay_us(unsigned int us);

void send_code_init(void);

void send_head (void);

void send1(void);

void send0(void);

void sendByte(unsigned char buf);

#endif

 

#include "send_code.h"

 

void delay_ms(unsigned char ms)

{

 while(ms--)delay_us(1000);

}

 

void delay_us(unsigned int us)

{

  clr_wdt();

}

 

void send_code_init(void)

{

 data0();

}

 

void send_head (void)

{

  data1();

  delay_ms(8);

  data0();

  delay_ms(1);

}

 

void send1(void)

{

  data1();

  delay_us(1500);

  data0();

  delay_us(500);

}

 

void send0(void)

{

  data1();

  delay_us(500);

  data0();

  delay_us(1500);

}

 

void sendByte(unsigned char buf)

{

 unsigned char i;

 send_head();

for (i = 0;i<8;i++)

{

   if (buf&0x80)

{

  send1();

}

else

{

  send0();

}

 buf <<= 1;

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

七:C语言范例(6MS协议时序)

#ifndef __sendcode__

#define __sendcode__

#define datapin (1<<0)   //数据引脚

#define dataport GPIOA   // 数据引脚端口

#define clr_wdt()        //清除看门狗指令

#define data1()  dataport = datapin

#define data0()  dataport &=~datapin

 

void delay_ms(unsigned char ms);

void delay_us(unsigned int us);

void send_code_init(void);

void send_head (void);

void send1(void);

void send0(void);

void sendByte(unsigned char buf);

#endif

 

 

#include "send_code.h"

 

 

void delay_ms(unsigned char ms)

{

 while(ms--)delay_us(1000);

}

 

void delay_us(unsigned int us)

{

  clr_wdt();

}

 

void send_code_init(void)

{

 data0();

}

 

void send_head (void)

{

  data1();

  delay_ms(6);

}

 

void send1(void)

{

  data0();

  delay_us(500);

  data1();

  delay_us(1500);

  

}

 

void send0(void)

{

  data0();

  delay_us(1500);

  data1();

  delay_us(500);

}

 

void sendByte(unsigned char buf)

{

 unsigned char i;

 send_head();

for (i = 0;i<8;i++)

{

   if (buf&0x01)

{

  send1();

}

else

{

 send0();

}

 buf >>= 1;

联系方式 · contact

联系电话: 0755-2911 2251400-993-7233

专线负责人手机:13760327233( 吴经理 )

公司地址:深圳市宝安区西乡街道宝民二路河东大厦A座7楼7001-7009室

手机扫码进入网站

手机扫码进入网站

微信扫码沟通

微信扫码沟通

Copyright © 2021 深圳市思泽远科技有限公司 版权所有 备案号:粤ICP备15066427号   Powered By HuahanLink

服务热线

400-993-7233

工作时间:
周一至周五
24小时在线

微信扫码咨询

QQ咨询

在线留言

返回顶部

收起
复制成功

微信号:13760327233

添加微信好友,详细了解产品

13760327233

复制并跳转微信