当前位置: 代码迷 >> 综合 >> KT404A芯片使用手册_5.注意事项
  详细解决方案

KT404A芯片使用手册_5.注意事项

热度:48   发布时间:2023-12-16 12:33:24.0

5.注意事项

芯片的使用,关键的地方做如下说明:

  1. 芯片的GPIO的特性
  2. 应用的中注意事项
  3. 串口编程部分的注意

5.1 GPIO的特性

 

IO输入特性

符号

参数

最小

典型

最大

单位

测试条件

VIL

Low-Level Input Voltage

-0.3

 -

0.3*VDD

V

VDD=3.3V

VIH

High-Level Input Voltage

0.7VDD

-

VDD+0.3

V

VDD=3.3V

IO输出特性

符号

参数

最小

典型

最大

单位

测试条件

VOL

Low-Level Output Voltage

 -

 -

0.33

V

VDD=3.3V

VOH

High-Level Output Voltage

2.7

-

 -

V

VDD=3.3V

 

 

 

 

 

 

 

 

5.2 应用中的注意点

1、芯片对外的接口均是3.3V的TTL电平,所以在硬件电路的设计中,请注意电平的转换问题。

另外在强干扰的环境中,请注意电磁兼容的一些保护措施,GPIO采用光耦隔离,增加TVS等等

 

2、串口通信,在一般的使用环境下,注意好电平转换即可。如果强干扰环境,或者长距离的RS485应用,那么请注意信号的隔离,严格按照工业的标准设计通信电路。可以联系我们,我们提供设计参考

 

3、我们支持音频文件的采样率最低为8KHZ。也就是说低于8KHZ的音频文件是不支持的,不能正常解码播放。用户可以使用音频处理软件,提高音频文件的采样率来解决这个问题。

 

4、芯片在睡眠状态的电流在10MA左右,播放中,依据音量的大小以及外接的喇叭负载,峰值电流可以达到1A。功耗会比较大。如果使用在低功耗场合,请用户控制芯片或者芯片的供电。这样可以减小芯片的功耗

 

5、用户如果直接使用我们芯片自带的功放,请选择合适的喇叭即可。推荐使用4欧姆/3W。这个是使用效果最好的配置。选用其它的喇叭,请注意负载大小,以及功率这两个参数

 

6、该芯片芯片支持MP3、WAV二种主流的音频格式。推荐用户尽量使用MP3格式,因为这样就更节省FLASH的容量。

 

7、我们的芯片支持8/11.025/12/16/22.05/24/32/44.1/48KHZ 采样率的音频文件,这些也是网络上绝大多数的音频文件的参数。如果用户的音频文件的采样率不在此范围内,是不支持播放的,但是可以通过专用的软件转换一下即可。我们的优势就是无压缩播放和高音质,所以不太建议用户对音频进行压缩。

5.3注意事项点

串口部分的操作,参见下面的流程,我们提供了完整的参照例程,供用户参考:

  1. 芯片上电的流程
  2. 串口编程参考的说明
  3. 串口操作需要延时的注意事项
  4. 串口协议的校验的说明
  5. 串口协议的校验的算法详解
  6. 外接MCU的晶振选择说明
  7. 芯片的播放说明[物理顺序等等]

5.3.1 芯片上电的工作流程图

  1. 我司提供的所有芯片的串口部分的操作,均是一样的协议,所以不用担心不同芯片的不兼容
  2. 如果对串口的操作,有任何不明白的,请一定联系我们,索取串口编程参考例程。
  3. 我们产品的更新,也一定会按照当前的协议版本,做到向下兼容。

5.3.2 串口编程参考的说明

目前我们提供的串口编程参考代码,有两部分

  1. 第一部分是我们测试版的测试代码,相关的串口操作比较全面
  2. 、另一个是基本版,只是指定曲目的范例。请用户耐心消化

 

5.3.3 串口编程需要适当延时的注意点

1、芯片上电之后,需要大概1S-1.5S时间进行初花的相关操作,初始化完毕之后,会有初始化的相关数据发送出来。用户也可以直接不理会这些数据

 

2、当指定设备播放之后,需要延时200ms的时间,再发送指定曲目等等相关指令。

 

3、因为芯片自带文件系统,正常情况下,在曲目不大于1000首的话,响应速度是低于50ms的

曲目超过3000首之后,文件系统的切换速度会变慢一点,响应速度在100ms --- 1S之间不等

 

4、芯片内部对串口的处理是10MS处理一次,所以连续的指令发送时,必须要间隔20MS的延时。否则前面的指令将会被覆盖而得不到执行

 

5、如果指定文件夹文件名播放[0x0F、0x14]延时必须大于40ms,因为芯片锁定文件是需要时间的。只要涉及到文件夹文件名查找的相关指令,40MS的延时是必不可少的。如果芯片当前正在查找文件,串口的数据过来太频繁,会导致芯片的工作不正常

5.3.4 校验的重要说明

1、针对很多用户不太习惯校验的通信方式,我们特别推出了带校验和不带校验的兼容方式。举例说明。如果我们发送组合播放指令如下:

组合播放[不带校验]

7E FF 09 21 00 05 01 02 03 04 EF

播放5、1、2、3、4

组合播放[带校验]

7E FF 09 21 00 05 01 02 03 04 FE C8 EF

播放5、1、2、3、4

比较两条指令的区别,就是省略掉的校验的2个字节。这两帧数据均可以被芯片所接收。

2、因为很多用户在使用的过程中,很多都是使用不带晶振的MCU。这样的话,我们必须建议您加上校验这种方式,来保证通信的稳定性。

3、假如用户使用STM32或者STC等等MCU,并且是外挂晶振的,就可以适当的省掉校验。因为不带晶振的MCU,时钟是相对不那么准的,所以串口会存在误差,一旦误差过大,会导致通信出错。请用户朋友自行斟酌。

5.3.5 校验的计算说明

    发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反+1得到校验码接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验字节。刚好为0.这样就代表接收到的数据完全正确。

举例说明:

举个例子,如果我们播放下一曲,就需要发送:7E FF 06 01 00 00 00 FE FA EF

数据长度为6 ,这6个字节是[FF 06 01 00 00 00] 。不计算起始、结束、和校验。校验字节为FE FA。

发送端得到校验码的过程:

相加的过程: FF+06+01+00+00+00 = 0x0106

取反加1的过程:0x0106取反 = FEF9  /  再+1 = 0xFEFA,和我们的校验值对比一下

接收端进行校验的过程:

相减的过程: 0 - 0x0106 = 0xFEFA 。再和我们的结果比较一下。

最后可以参考一下我们给出的参考例程,或者直接移植我们给出的函数。就很容易理解了

5.3.6 MCU的晶振选择

1、原则上我们建议用户,使用11.0592MHZ或者相倍数的晶振。这样可以让串口产生9600的波特率会更准确。我们的芯片串口误差是允许在3%以内的

2、如果用户在12M的晶振时。首先要做如下判断,

(1)、看是什么MCU,51或者PIC、STM32等等,基本都自带波特率发生器,所以产生9600的波特率基本没压力。

(2)、看MCU是否为硬件串口,如果是IO模拟的串口的话,强烈建议用户使用11.0592的晶振

(3)、标准的51,如:STC89C52或者AT89C52等等都是采用定时器产生波特率的,经过简单的计算就可以算出,12M晶体做9600波特率的误差是是0.16%,正常运行是没有任何问题,但还是需要用户进行全面测试

5.3.7 指定播放的说明

  1. 指定曲目播放[按照物理顺序]
  2. 指定曲目播放[按照文件夹和文件名的名称]

 

1、按照物理顺序指定曲目播放:

需要按照下图的方法往SPIFLASH中拷贝歌曲。先拷贝进设备的,编号为第一首,以此类推

2、指定文件夹和文件名播放

详情请参考芯片数据手册的“3.4.6指定文件夹文件名的播放”章节

5.3.8 串口调试说明

1、首先现在网上下载一个软件串口猎人,为什么选择这个,因为它有自动搜索串口的功能,十分好用。打开之后的主界面如上图所示,可以看到红色部分,依次设置即可

2、打开软件,首先要搜索串口,找到指定的端口之后,指定“波特率”,我们的芯片默认的波特率为9600,最后就是“启动串行端口”,这样软件就配置好了。这里有两个概念需要明确一下

第一是“HEX码”,我们默认是这个,这个是用来显示数据的。所以必须设置这里

第二是“字符串”,这个是用来显示打印字符的,我们这里用不到。

3、软件配置OK之后,将需要的指令复制到发送区域即可。具体的指令请参照芯片的数据手册

4、如果芯片的数据手册没有的测试指令的话,请自行计算,尤其需要注意的是“校验和”这两个字节,如何计算不对的话,芯片是不接受指令的,同时会返回相应的错误指令

5.3.9 校验代码的移植

我们这里的说明,争对的是用户的MCU给我们的芯片发送控制指令

1、发送端 --- 用户的MCU

/******************************************************************************

 - 功能描述: 串口向外发送命令[包括控制和查询]

 - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令

              feedback:是否需要应答[0:不需要应答,1:需要应答]

              data:传送的参数

******************************************************************************/

void Uart_SendCMD(INT8U CMD ,INT8U feedback , INT16U dat)

{

    Send_buf[0] = 0xff;    //保留字节

    Send_buf[1] = 0x06;    //长度

    Send_buf[2] = CMD;     //控制指令

    Send_buf[3] = feedback;//是否需要反馈

    Send_buf[4] = (INT8U)(dat >> 8);//datah

    Send_buf[5] = (INT8U)(dat);     //datal

    DoSum(&Send_buf[0],6);        //校验 

    SendCmd(8);       //发送此帧数据

}

 

DoSum(&Send_buf[0],6); 这里是指对Send_buf[0]---Send_buf[5]这6个字节进行校验的算法

生成校验的两个字节,并且存储于Send_buf[6]Send_buf[7]

 

 

/******************************************************************************

 - 功能描述:求和校验

 - 和校验的思路如下:      

    发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验字节。刚好为0.这样就代表接收到的数据完全正确。

******************************************************************************/

void DoSum( INT8U *Str, INT8U len)

{

    INT16U xorsum = 0;

    INT8U i;

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

    {

        xorsum  = xorsum + Str[i];

    }

xorsum     = 0 -xorsum;

*(Str+i)   = (INT8U)(xorsum >>8);//得到高字节

*(Str+i+1) = (INT8U)(xorsum & 0x00ff);//得到低字节

}

 

2、接收端,芯片发送数据给用户的MCU

 

        If(一帧数据接收完毕)

        {

         for(i=0; i<(*(pi+1)); i++)//这里pi指向的是接收缓冲区,*(pi+1)是获取数据长度。

         {

             xorsum  = xorsum + pi[i] ;//将接受到的数据进行累加

         }

         xorsum1 = ((u16)((*(pi+i))<<8)) | (*(pi+i+1));//这里是接收到的校验字节,16位

         xorsum  = xorsum + xorsum1;//将接收到的校验字节和自己算的校验数据相加

         if(!xorsum)

         {

             Uart_Task(pi);//串口处理--对接收到的指令进行处理

         }

           else

           {

                ErrorStatus = ERROR_CheckSError ;//接收校验出错

 //校验码出错之后的处理

           }

        }

3、用户无论使用的是什么MCU,这两个函数均可以平行的移植到自己的程序中。

5.3.10 芯片或者芯片的供电说明

这里为什么增加两个二极管,分两种情况说明

  • 外部只需要外接U盘播放,那么D2是可以省略掉的
  • 如果外接电脑,则需要D2,这样是为了防止7805前端无电压输入时,直接插上电脑,会把电脑端的USB电压拉低,导致不正常。

 

 

  1. 我们的芯片或者芯片,供电的范围是3.3V--5V。不可以超过5V,否则会造成芯片的永久性损坏。
  2. 我们的芯片,是音频类的产品,对电源的纹波是有要求的,建议用户最好使用线性电源[带变压器的电源],后级使用7805之类的线性稳压芯片供电。
  3. 7805后一级最好增加一个二极管,这里的4148其实并不是最合适的,因为4148的正向电流只有500MA。如果我们后级的功放功率过大,会导致4148 永久性损坏。这里选用IN4001或者IN4007才是最合适的。
  4. 很多用户在应用过程中,往往很多供电是12V或者9V,如果用户使用7805之类的线性稳压IC时,一定要注意芯片的发热,线性稳压IC的原理,基本上都是将多余的电压以热量的形式表现出去。举个例子,假如12V输入,经过7805之后,压差为7V。假如后级的耗电流为200MA,那么7805产生的热量就是1.4W,这个热量就很烫手了,会导致7805过热自保护,所以这样的硬件设计是很不合理的。所以此时可以选用合适的DCDC芯片,我们推荐使用LM2596之类的纹波小的芯片

 

  相关解决方案