分享一个自己写的2803x系列CAN通讯Bootloader
本帖最后由 liansh2002 于 2017-11-14 09:06 编辑最近改行用DSP了,发现TI跟Microchip一个德行,弄个bootloader不弄完整的,特别是TI,还得通过引脚电平来引导才能进Boot,生产这么搞还行,实际到客户那根本不可能这么用啊,干脆自己开发一个吧。
bootloader通过调用芯片BOOT区中的函数完成FLASH擦/写的,所以避开了将FLASH操作函数搬至RAM的操作,但也有个问题,在CCS7下会报警告(使用了来源不明的文件)。开发环境为CCS3.3。PC端使用Python3.6.2 + Qt5.9完成。但由于这是公司实际使用的产品,所以上位机就不发了。另外程序中涉及加密的部分也被删除了,原始的加密方案为原始.hex文件用XTEA加密后,再经AES加密,变换为.bin文件。PC端下载时将.bin文件经AES解密后直接下发至DSP,DSP通过XTEA解密后将数据写入FLASH。
其实内容挺多的,但是没啥头绪不知道怎么写说明,而且占大头的PC端由于种种原因不能发出来,所以就算是介绍一下bootloader的框架吧,大家有什么问题都可以直接提出来一起探讨。
一、上电引导说明
C2000系列芯片上电后,首先会从0x3FFFC0处开始执行,然后根据条件,跳转至0x000000(RAM)或者0x3F7FF6(FLASH)处执行。Bootloader通过修改0x3F7FF6处的跳转语句,使得本应跳转至main()函数的PC指针,跳转至bootloader()函数,从而完成Bootloader的所有功能。
二、bootloader原理说明
通过修改CMD文件,实现在芯片FLASH最开始的地方存储两个变量(APP_COUNT(@0x3E8000),APP_CRC(@0x3E8001))。bootloader在进入后,通过这两个值判断是留在bootloader中等待更新,还是跳转至main()。
bootloader总共分为4个工作阶段,需要通过指令来切换,防止误操作:
0x00阶段:完成查询工作,不涉及FLASH内容的读写;
0x10阶段:完成密钥的设置工作,不涉及FLASH内容的读写;
0x20阶段:通过调用DSP内部Boot Code区域固化的FLASH操作函数,完成对FLASH的擦除工作。此阶段一旦被执行,则在0x30阶段执行完成前,不能自动退出Bootloader;
0x30阶段:通过调用DSP内部Boot Code区域固化的FLASH操作函数,完成对FLASH的写入工作。此阶段执行完成前,不能自动退出Bootloader。
三、CAN通讯
默认使用125K,扩展帧,CAN ID格式及命令如下
四、PC端编写的注意点
1.在转换原始数据时,一定注意需要静0x3E8000地址的数据改为程序区的CRC16校验值(bootloader.c文件中有CRC16算法代码,用的是MODBUS_RTU算法)。
2.帧编号(FLASH地址)是按照CAN通讯帧个数来编号的,也就是说每8字节帧编号加1,同样的bootloader在请求某一地址数据时,也是按照每8字节一个地址来请求的。
3.加密并不是必须的,最初考虑是Python编译的程序极易被看出源代码,所以如果仅经过AES加密,那么从源代码中提取AES密钥解密后就能得到完整的HEX文件,所以在DSP中又做了XTEA解密。
五、文件说明
1.config.h:版本号定义文件
2.bootloader.c:bootloader程序主文件(main)
3.bootloader_api.c:bootloader所有功能执行函数
4.bootloader_can.c:CAN通讯相关函数
5.bootloader_usart.c:串口通讯相关函数(串口升级未经测试)
6.bootloaderEntry.asm:相关跳转函数的汇编文件
7.DSP2803x_CodeStartBranch.asm:引导(@0x3F7FF6)函数
8.bootloader.h:bootloader版本号,FLASH地址端等的相关定义
9.其余.h文件:Boot Code中内置函数声明文件
六、CMD文件说明
CMD文件中,仅bootloader相关定义不要修改,剩余FLASH以及RAM的分配都可以按照使用环境修改。
七、源代码
补充一下必须的两个LIB文件,rts2800_ml.lib,2803x_FlashAPI_BootROMSymbols.lib。这两个文件可以在TI的controlSUITE软件对应器件支持库里找到
楼主牛逼了。 还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞 dsp一般做啥应用啊?好奇楼主 LZ NB!! lovecxm 发表于 2017-11-13 21:45
还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞
公司一堆拥有浓厚历史积淀的程序,用CCS 7导入没一个能编译通过,只能放弃了。。。 meirenai 发表于 2017-11-13 22:38
dsp一般做啥应用啊?好奇楼主
只用过2803x系列的,做做数控电源,逆变器这些 mark,楼主牛!用什么拓扑做的逆变器? liansh2002 发表于 2017-11-14 09:12
只用过2803x系列的,做做数控电源,逆变器这些
数控电源指的是数字电源么? mark,将来更改成CCP升级 咨询一下,楼主的流程图是什么软件做的 liansh2002 发表于 2017-11-14 09:07
公司一堆拥有浓厚历史积淀的程序,用CCS 7导入没一个能编译通过,只能放弃了。。。 ...
熟悉的身影哈哈 tangguotaizi 发表于 2017-11-14 21:38
mark,楼主牛!用什么拓扑做的逆变器?
以前做的是常规的推挽升压+H桥,现在公司还没正式上马 EngKing 发表于 2017-11-14 23:01
咨询一下,楼主的流程图是什么软件做的
excel画的 PCBBOY1991 发表于 2017-11-14 22:20
数控电源指的是数字电源么?
是的,就是数字电源,大家的叫法不一样吧 liansh2002 发表于 2017-11-15 09:28
是的,就是数字电源,大家的叫法不一样吧
数控电源和数字电源完全不是一个东西吧。。。。。。。。。。。。。。。。。。。 liansh2002 发表于 2017-11-15 09:26
以前做的是常规的推挽升压+H桥,现在公司还没正式上马
功率最大做到了多大? PCBBOY1991 发表于 2017-11-15 10:00
数控电源和数字电源完全不是一个东西吧。。。。。。。。。。。。。。。。。。。 ...
啊,不是同一个东西吗? tangguotaizi 发表于 2017-11-15 15:24
功率最大做到了多大?
几百瓦的小功率 有用的东西,学习 很不错的东西 要是楼主可以说下制作过程就完美了,最近正在搞035驱动电机 书的那页 发表于 2017-11-23 11:24
很不错的东西 要是楼主可以说下制作过程就完美了,最近正在搞035驱动电机
主要是写不好文档,不知道该重点写什么。所以还是看大家实际有什么问题再一起讨论吧 厉害厉害,学习学习! DSP相比单片机的强项在哪?开发难度大么? 果断 赞啊! fengyunyu 发表于 2017-12-4 23:26
DSP相比单片机的强项在哪?开发难度大么?
速度快,精度高。AD都是几Msps的,PWM分辨率能到纳秒级,然后DSP内核加持,累死单片机的乘除法跑起来毫无压力。
学习只能说2803x系列了,其它没用过。如果你有单片机经验,上手很快的,这个bootloader大概就是我接触DSP两个月后弄的。但是没有经验的话学起来很吃力,TI的设计思路有些异于常人,别人是怎么简单怎么来,TI是怎么复杂怎么来,好处是最大化适应不同应用场景,坏处是各种坑你都得跳一次。 bootloader程序和 应用程序是写在两个工程里面吗? 比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天… powerobust 发表于 2018-8-7 11:50
bootloader程序和 应用程序是写在两个工程里面吗?
没分开,是同一个工程 lileistone 发表于 2018-8-7 20:55
比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天… ...
还好吧,我这常用的波特率最低也有125K,更新一次一分钟左右 liansh2002 发表于 2018-8-8 10:26
还好吧,我这常用的波特率最低也有125K,更新一次一分钟左右
平时调试速度是慢了。但项目完成,产品交付之后还是非常有用的。 最近学习dsp,学习一下 谢谢分享,学习了 谢谢分享,学习了 后期公司也有需要在28335上实现Bootloader,现在还是一头雾水
页:
[1]