电力电子技术
登录
直播中
望艳妮
7年用户
190经验值
私信
关注
[问答]
如何利用CSR1010来给DA14580注入应用程序
开启该帖子的消息推送
CSR1010
DA14580
本文主要介绍如何利用CSR1010来给DA14580注入应用程序。
回帖
(1)
张鸿青
2020-12-18 13:59:33
DA14580没有内部FLASH,其代码只能放在OTP或者外部FLASH(EEPROM)中,如果外部有MCU,则可以考虑将代码放在外部MCU中,这样可以省下FLASH,节约成本,同时也会简化产线操作。
有朋友可能会问,用一块蓝牙SOC(CSR1010)去BOOT另一块蓝牙SOC(DA14580)不显得蛋疼么,其实也是无奈之举,只因手头没有其他MCU,CSR1010只作为普通MCU做测试用,换做其他MCU也是ok的。
首先,需要将你的DA14580程序编译成hex文件,用keil直接编译生成hex即可,然后利用工具将hex转换成bin文件,再利用另一个工具把bin转换成txt文件。关于这边的工具,网上有很多,直接百度即可。最后得到的txt文件如下:
这边为了方便大家测试,我将一个例子的hex,以及通过工具转换后得到的bin,txt放在附件里,供大家测试用,这里我们只用到blinky.txt。
将blinky.txt中的数据拷贝出来,在你的主CPU中(这里是CSR1010)创建一个数组用于存放boot代码:
到此为止,我们的准备工作已完成。
现在讲解一下DA14580的boot流程:
1.DA14580在上电后会通过UART发送0x02,这个比较奇怪,有时候是一直发送0x02,有时候只发送一次;
2.上位机(这里是CSR1010,接下去不再重复说明)收到0x02后发送“0x01”+”code长度+3”,
这里的“code长度+3”需要特别说明一下,这个也是比较容易出错的地方:
首先,code长度的获取,它的方法有很多种,可以通过看SmartSnippets载入hex文件后查看,可以看bin文件等等,这里只介绍最简单的一种方法,就是利用上面建立的da_code[]数组,直接:da_code_size=sizeof(da_code),这样就得到代码长度了,获取到code的长度后,只要将code长度+3然后发送出去就可以了,
如da_code_size=0x6918,则需要反馈的长度为0x891B(0x8918+3),即第二步的反馈数据为0x01,0x1B,0x69。
3.DA14580在收到上位机发送的反馈数据后,往上位机反馈0x06,表示已经准备好接受code数据;
4.上位机在收到0x06后,发送da_code[]数据;
发送完毕后再紧接着发送0x01,0x02,0x04,这个尾巴是必须要加的,这也是为什么第二步的时候发送长度要加3,这也是十分关键的一步.
5.待第四步完成后,DA14580会发送CRC校验给上位机;
6.上位机收到CRC后,再和本地的CRC值校验,如果OK则向DA14580发送0x06确认,整个过程结束,完毕后DA14580会运行刚刚LOAD进去的程序。
本次例子的硬件连接是这样的:除了两颗芯片的最小系统外,CSR1010的PIO0和PIO1作为串口,DA14580的P04 P05作为串口,默认DA14580在此IO上的串口波特率为57600,故我们配置CSR1010的串口波特率也为57600.
代码我也不多解释了,相信会思考的人一看上面的说明就会明白了,甚至不用看附件的代码,用自己的想法在自己的MCU平台上就能完全写出来了。
DA14580没有内部FLASH,其代码只能放在OTP或者外部FLASH(EEPROM)中,如果外部有MCU,则可以考虑将代码放在外部MCU中,这样可以省下FLASH,节约成本,同时也会简化产线操作。
有朋友可能会问,用一块蓝牙SOC(CSR1010)去BOOT另一块蓝牙SOC(DA14580)不显得蛋疼么,其实也是无奈之举,只因手头没有其他MCU,CSR1010只作为普通MCU做测试用,换做其他MCU也是ok的。
首先,需要将你的DA14580程序编译成hex文件,用keil直接编译生成hex即可,然后利用工具将hex转换成bin文件,再利用另一个工具把bin转换成txt文件。关于这边的工具,网上有很多,直接百度即可。最后得到的txt文件如下:
这边为了方便大家测试,我将一个例子的hex,以及通过工具转换后得到的bin,txt放在附件里,供大家测试用,这里我们只用到blinky.txt。
将blinky.txt中的数据拷贝出来,在你的主CPU中(这里是CSR1010)创建一个数组用于存放boot代码:
到此为止,我们的准备工作已完成。
现在讲解一下DA14580的boot流程:
1.DA14580在上电后会通过UART发送0x02,这个比较奇怪,有时候是一直发送0x02,有时候只发送一次;
2.上位机(这里是CSR1010,接下去不再重复说明)收到0x02后发送“0x01”+”code长度+3”,
这里的“code长度+3”需要特别说明一下,这个也是比较容易出错的地方:
首先,code长度的获取,它的方法有很多种,可以通过看SmartSnippets载入hex文件后查看,可以看bin文件等等,这里只介绍最简单的一种方法,就是利用上面建立的da_code[]数组,直接:da_code_size=sizeof(da_code),这样就得到代码长度了,获取到code的长度后,只要将code长度+3然后发送出去就可以了,
如da_code_size=0x6918,则需要反馈的长度为0x891B(0x8918+3),即第二步的反馈数据为0x01,0x1B,0x69。
3.DA14580在收到上位机发送的反馈数据后,往上位机反馈0x06,表示已经准备好接受code数据;
4.上位机在收到0x06后,发送da_code[]数据;
发送完毕后再紧接着发送0x01,0x02,0x04,这个尾巴是必须要加的,这也是为什么第二步的时候发送长度要加3,这也是十分关键的一步.
5.待第四步完成后,DA14580会发送CRC校验给上位机;
6.上位机收到CRC后,再和本地的CRC值校验,如果OK则向DA14580发送0x06确认,整个过程结束,完毕后DA14580会运行刚刚LOAD进去的程序。
本次例子的硬件连接是这样的:除了两颗芯片的最小系统外,CSR1010的PIO0和PIO1作为串口,DA14580的P04 P05作为串口,默认DA14580在此IO上的串口波特率为57600,故我们配置CSR1010的串口波特率也为57600.
代码我也不多解释了,相信会思考的人一看上面的说明就会明白了,甚至不用看附件的代码,用自己的想法在自己的MCU平台上就能完全写出来了。
举报
更多回帖
rotate(-90deg);
回复
相关问答
CSR1010
DA14580
DA14580
具有哪些功能特性优势?
2021-10-09
1024
基于
DA14580
的蓝牙模块 的原理图
2016-04-08
9335
请问
DA14580
蓝牙透传的代码实现原理是什么?
2019-05-28
3417
有哪些方法可以去启动
DA14580
芯片
2021-08-12
1628
智能穿戴
DA14580
开发板套件资料分享
2020-08-28
2838
蓝牙模块中的
DA14580
模块怎么改名字?
2019-07-26
2528
DA14580
蓝牙串口透传连接死机怎么解决?
2023-11-10
686
请问
DA14580
这个芯片的开发?
2020-08-17
1299
ADXL362与
DA14580
进行SPI连接,有时候能正常工作,有时候不能正常工作,是为什么呢?
2019-01-07
1725
蓝牙模块:选择经验谈
2017-06-26
6156
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分