电力电子技术
直播中

望艳妮

7年用户 190经验值
私信 关注
[问答]

如何利用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平台上就能完全写出来了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分