完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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平台上就能完全写出来了。 |
|
|
|
只有小组成员才能发言,加入小组>>
22622个成员聚集在这个小组
加入小组761 浏览 1 评论
12412 浏览 0 评论
5870 浏览 3 评论
17661 浏览 6 评论
2690 浏览 1 评论
989浏览 1评论
959浏览 1评论
3514浏览 1评论
801浏览 1评论
1339浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:50 , Processed in 0.756397 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号