一、消费类电子产品SOC芯片开发的一些经验
1、其实在开发软件这个工作上,一些芯片原厂推出的SDK软件包是非常值得学习和借鉴的
(1)、因为他们为了方便用户开发,和阅读,以及一些驱动的写法的重复利用,都是做了很多的工作,其中的思维和
方法都是值得借鉴和学习的
(2)、很多时候,我们开发一些不算庞大的系统,总觉得自己写的程序还是可以的,但是一旦功能复杂了,整个程序
的架构就不得不重新的思考,这个时候,你就需要去参考别人高端人士的写法和思维
(3)、我们开发过程中,芯片原厂开发包,基本都是“消息机制”、“宏选择功能”、“大量的结构体封装”
我可以上传一下芯片厂商提供的开发SDK,有300多个文件,我个人认为整个框架清晰明了,值得学习
下面就进入产品资料介绍环节,请耐心的看一下,只要是有蓝牙相关的需求,我都可能略知一二,也能回答一下。
二、首先说一下芯片的优势:
1、成本低,支持的功能特别多,使用其他及其简单。照抄就行了
2、由于是国产的芯片,所以依托于海量的出货量,和超强的市场竞争,所以拉低了成本
3、芯片内部的软件支持,也是接口非常丰富,值得深入研究
三、再说一下芯片的缺点:
1、芯片由于是SOC系统,所以很多的功能都是以接口的形式,太个性化的功能可能实现非常费劲
2、芯片由于带音频,所以不支持低功耗,手环、纽扣电池供电的场合就不合适了
四、蓝牙芯片的介绍
KT1025A芯片是一款支持蓝牙音频和数据以及U盘、TF卡播放的4合一的单芯片,芯片的亮点在支持TF卡或者U盘无损音乐的播放,以及简单明了的串口AT控制功能,支持BLE透传,以及SPP透传功能。大大降低了嵌入蓝牙在其它产品的开发难度。
KT1025这个是我们在原厂芯片的基础上,开发了软件的芯片,配合坛友直接使用,超低成本3元RMB
可以适用于下面的这些类型的应用:
1、蓝牙音频产品 如:蓝牙音箱、蓝牙耳机、车载蓝牙 等等
2、蓝牙数传产品 如:智能门锁、车载OBD检测、智能小车、打印机、医疗设备数据采集
3、蓝牙数传+音频产品 如:蓝牙音乐灯、蓝牙音乐广播
废话不多说,上芯片的手册,和参考图纸
KT1025A蓝牙音频数据BLE芯片参考原理图如下:
注:原理图中注释说明设计时需特别注意
MCU
设计注意事项:
1、主控所有电源的退耦电容必须靠近芯片放置,
退耦电容的回路地必须最短回到该电源地.
2、蓝牙匹配电路参数以调试结果为准
4、为保证产品的安全可靠性,电池必须用带保护板的电池
晶振选型:
封装:兼容3225,M49S,HC49S等封装
要求:稳定性、一致性要好,
频偏偏差:±10PPM以内
电容:晶振匹配电容位置请预留
按键电路说明:
1、如果要做按键分离, R11上拉电阻最好
放在主板一边
2、AD_KEY走线远离音频线和数据线
3、电阻阻值尽量按我的来设计
4、按键功能定义还可以多加
充电电路说明:
这里采用的是专用充电管理芯片LP4054B
芯片的5脚是用来设置充电电流的
调节外部电阻R20可以设置充电电流的大小
最大充电电流不要超过800MA,否则有可能
损坏充电芯片
功放电路说明:
1、功放特点:
A、8W、防失真、7V耐压、AB/D类可选
B、单声道、带过热保护功能音频功放
C、宽工作电压范围2.5V—7V
(HX8358)
D、超低EMI,高效率,音质优
2、8W输出功率设置:
A、8W功率输出的条件:
VDD=6V,RL=2Ω,Po=8W,THD+N≤10%
B、8W功率输出设置:
芯片1脚(SD脚):
1、0V--0.7V,防失真启动(功率输出小
,没有跛音)
2、0.7V--1.6V,防失真关断
(条件满足,功率输出可达到8W)
3、1.6V--VDD,防失真关断,芯片关断
(喇叭没有声音输出)
单片机源程序:
- /*************************************************************************
- - 功能描述: 串口发送一个字节
- - 隶属模块: 外部
- - 参数说明:
- - 返回说明:
- - 注:
- 1、每种芯片的串口输出的方式不一样,这里是我们自己的芯片的方式
- 2、您也只用修改这个接口封装一下即可
- *************************************************************************/
- void func_send_byte( u8 dat )
- {
- ctrl_uart_write(dat) ;/*替换这个接口*/
- }
- /*************************************************************************
- - 功能描述: 串口发送字符串
- - 隶属模块: 外部
- - 参数说明:
- - 返回说明:
- - 注:
- *************************************************************************/
- void func_UartPutStr (const char *Str )
- {
- while ( *Str)
- {
- func_send_byte ( *Str );
- *Str++;
- }
- }
- /*************************************************************************
- - 功能描述: 串口接收处理 --- 参考
- - 隶属模块: 外部
- - 参数说明:
- - 返回说明:
- - 注:
- 1、串口接收都是采用中断的方式,一定要设置一个超时的计数器,超时做错误处理
- 2、由于我们所有的命令都是以0x0D和0x0A作为结束,所以只用检测0x0A就认为接收完成
- *************************************************************************/
- void uart_isr_recv(u8 uto_buf)
- {
- g_uart_flag.uart_timeout = UART_TIMEOUT ;/*一般100ms*/
- g_uart_flag.uart_stop = 0;
- buf_uart1.buf[buf_uart1.index++] = uto_buf;/*字符存到缓存中*/
- if(uto_buf == 0x0A) /*收到数据0x0A则认为一帧数据结束了*/
- {
- g_uart_flag.uart_stop = 1; /*接收完成标志位置1*/
- g_uart_flag.uart_analysis = 1;/*分析数据使能打开*/
- g_uart_flag.uart_timeout = 0 ;
- uart_recv_ok_pro(buf_uart1.buf ,buf_uart1.index) ; /*这里就是接收完成之后的处理*/
-
- /*这里添加你自己的应用程序*/
- }
- }
- /*************************************************************************
- - 功能描述: main
- - 隶属模块: 外部
- - 参数说明:
- - 返回说明:
- - 注:
- *************************************************************************/
- void main()
- {
- uart_init() ;/*串口初始化*/
- delay_2ms(500) ;/*延时1秒*/
- func_UartPutStr("AT+CA30\r\n") ;/*设置音量为30级*/
- delay_2ms(500) ;/*延时1秒*/
- func_UartPutStr("AT+CA15\r\n") ;/*设置音量为15级*/
- delay_2ms(500) ;/*延时1秒*/
- func_UartPutStr("AT+BD12354678\r\n") ;/*设置蓝牙名为12345678*/
- delay_2ms(500) ;/*延时1秒*/
- func_UartPutStr("AT+CT02\r\n") ;/*设置波特率为19200 -- 参考手册*/
- delay_2ms(500) ;/*延时1秒*/
- while(1) ;
- }
复制代码
全部资料51hei下载地址:
资料打包.zip
(1.32 MB, 下载次数: 147)
|