搜索
bottom↓
回复: 33

分享一个自己写的2803x系列CAN通讯Bootloader

  [复制链接]

出0入0汤圆

发表于 2017-11-13 18:07:51 | 显示全部楼层 |阅读模式
本帖最后由 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软件对应器件支持库里找到


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2017-11-13 19:32:18 来自手机 | 显示全部楼层
楼主牛逼了。

出0入0汤圆

发表于 2017-11-13 21:45:08 来自手机 | 显示全部楼层
还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞

出0入0汤圆

发表于 2017-11-13 22:38:38 | 显示全部楼层
dsp一般做啥应用啊?好奇楼主

出0入0汤圆

发表于 2017-11-13 22:45:40 | 显示全部楼层
LZ NB!!

出0入0汤圆

 楼主| 发表于 2017-11-14 09:07:52 | 显示全部楼层
lovecxm 发表于 2017-11-13 21:45
还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞

公司一堆拥有浓厚历史积淀的程序,用CCS 7导入没一个能编译通过,只能放弃了。。。

出0入0汤圆

 楼主| 发表于 2017-11-14 09:12:14 | 显示全部楼层
meirenai 发表于 2017-11-13 22:38
dsp一般做啥应用啊?好奇楼主

只用过2803x系列的,做做数控电源,逆变器这些

出0入0汤圆

发表于 2017-11-14 21:38:16 来自手机 | 显示全部楼层
mark,楼主牛!用什么拓扑做的逆变器?

出0入0汤圆

发表于 2017-11-14 22:20:02 来自手机 | 显示全部楼层
liansh2002 发表于 2017-11-14 09:12
只用过2803x系列的,做做数控电源,逆变器这些

数控电源指的是数字电源么?

出0入0汤圆

发表于 2017-11-14 22:51:31 | 显示全部楼层
mark,将来更改成CCP升级

出0入0汤圆

发表于 2017-11-14 23:01:11 | 显示全部楼层
咨询一下,楼主的流程图是什么软件做的

出0入127汤圆

发表于 2017-11-15 08:18:22 | 显示全部楼层
liansh2002 发表于 2017-11-14 09:07
公司一堆拥有浓厚历史积淀的程序,用CCS 7导入没一个能编译通过,只能放弃了。。。 ...

熟悉的身影  哈哈

出0入0汤圆

 楼主| 发表于 2017-11-15 09:26:57 | 显示全部楼层
tangguotaizi 发表于 2017-11-14 21:38
mark,楼主牛!用什么拓扑做的逆变器?

以前做的是常规的推挽升压+H桥,现在公司还没正式上马

出0入0汤圆

 楼主| 发表于 2017-11-15 09:27:27 | 显示全部楼层
EngKing 发表于 2017-11-14 23:01
咨询一下,楼主的流程图是什么软件做的

excel画的

出0入0汤圆

 楼主| 发表于 2017-11-15 09:28:19 | 显示全部楼层
PCBBOY1991 发表于 2017-11-14 22:20
数控电源指的是数字电源么?

是的,就是数字电源,大家的叫法不一样吧

出0入0汤圆

发表于 2017-11-15 10:00:21 | 显示全部楼层
liansh2002 发表于 2017-11-15 09:28
是的,就是数字电源,大家的叫法不一样吧

数控电源和数字电源完全不是一个东西吧。。。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2017-11-15 15:24:38 | 显示全部楼层
liansh2002 发表于 2017-11-15 09:26
以前做的是常规的推挽升压+H桥,现在公司还没正式上马

功率最大做到了多大?

出0入0汤圆

 楼主| 发表于 2017-11-16 13:09:42 | 显示全部楼层
PCBBOY1991 发表于 2017-11-15 10:00
数控电源和数字电源完全不是一个东西吧。。。。。。。。。。。。。。。。。。。 ...

啊,不是同一个东西吗?

出0入0汤圆

 楼主| 发表于 2017-11-16 13:09:59 | 显示全部楼层
tangguotaizi 发表于 2017-11-15 15:24
功率最大做到了多大?

几百瓦的小功率

出0入0汤圆

发表于 2017-11-16 13:14:48 | 显示全部楼层
有用的东西,学习

出0入0汤圆

发表于 2017-11-23 11:24:40 | 显示全部楼层
很不错的东西 要是楼主可以说下制作过程就完美了,最近正在搞035驱动电机

出0入0汤圆

 楼主| 发表于 2017-11-28 09:14:16 | 显示全部楼层
书的那页 发表于 2017-11-23 11:24
很不错的东西 要是楼主可以说下制作过程就完美了,最近正在搞035驱动电机

主要是写不好文档,不知道该重点写什么。所以还是看大家实际有什么问题再一起讨论吧

出0入0汤圆

发表于 2017-11-30 10:38:16 | 显示全部楼层
厉害厉害,学习学习!

出100入101汤圆

发表于 2017-12-4 23:26:18 | 显示全部楼层
DSP相比单片机的强项在哪?开发难度大么?

出0入0汤圆

发表于 2017-12-5 09:13:00 | 显示全部楼层
果断 赞啊!

出0入0汤圆

 楼主| 发表于 2017-12-5 09:31:19 | 显示全部楼层
fengyunyu 发表于 2017-12-4 23:26
DSP相比单片机的强项在哪?开发难度大么?

速度快,精度高。AD都是几Msps的,PWM分辨率能到纳秒级,然后DSP内核加持,累死单片机的乘除法跑起来毫无压力。
学习只能说2803x系列了,其它没用过。如果你有单片机经验,上手很快的,这个bootloader大概就是我接触DSP两个月后弄的。但是没有经验的话学起来很吃力,TI的设计思路有些异于常人,别人是怎么简单怎么来,TI是怎么复杂怎么来,好处是最大化适应不同应用场景,坏处是各种坑你都得跳一次。

出0入0汤圆

发表于 2018-8-7 11:50:07 | 显示全部楼层
bootloader程序和 应用程序是写在两个工程里面吗?

出0入0汤圆

发表于 2018-8-7 20:55:38 来自手机 | 显示全部楼层
比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天…

出0入0汤圆

 楼主| 发表于 2018-8-8 10:23:44 | 显示全部楼层
powerobust 发表于 2018-8-7 11:50
bootloader程序和 应用程序是写在两个工程里面吗?

没分开,是同一个工程

出0入0汤圆

 楼主| 发表于 2018-8-8 10:26:24 | 显示全部楼层
lileistone 发表于 2018-8-7 20:55
比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天… ...

还好吧,我这常用的波特率最低也有125K,更新一次一分钟左右

出255入0汤圆

发表于 2018-8-23 14:42:45 | 显示全部楼层
liansh2002 发表于 2018-8-8 10:26
还好吧,我这常用的波特率最低也有125K,更新一次一分钟左右

平时调试速度是慢了。但项目完成,产品交付之后还是非常有用的。

出0入0汤圆

发表于 2018-10-9 22:04:36 | 显示全部楼层
最近学习dsp,学习一下

出0入0汤圆

发表于 2018-12-20 20:55:25 | 显示全部楼层
谢谢分享,学习了

出0入0汤圆

发表于 2019-3-25 18:25:17 | 显示全部楼层
谢谢分享,学习了   后期公司也有需要在28335上实现Bootloader,现在还是一头雾水
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 21:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表