liansh2002 发表于 2017-11-13 18:07:51

分享一个自己写的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软件对应器件支持库里找到


PCBBOY1991 发表于 2017-11-13 19:32:18

楼主牛逼了。

lovecxm 发表于 2017-11-13 21:45:08

还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞

meirenai 发表于 2017-11-13 22:38:38

dsp一般做啥应用啊?好奇楼主

823032003 发表于 2017-11-13 22:45:40

LZ NB!!

liansh2002 发表于 2017-11-14 09:07:52

lovecxm 发表于 2017-11-13 21:45
还在用3.3啊,7都出来了。这个厉害,ti的boot资料挺少,赞

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

liansh2002 发表于 2017-11-14 09:12:14

meirenai 发表于 2017-11-13 22:38
dsp一般做啥应用啊?好奇楼主

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

tangguotaizi 发表于 2017-11-14 21:38:16

mark,楼主牛!用什么拓扑做的逆变器?

PCBBOY1991 发表于 2017-11-14 22:20:02

liansh2002 发表于 2017-11-14 09:12
只用过2803x系列的,做做数控电源,逆变器这些

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

EngKing 发表于 2017-11-14 22:51:31

mark,将来更改成CCP升级

EngKing 发表于 2017-11-14 23:01:11

咨询一下,楼主的流程图是什么软件做的

llssr 发表于 2017-11-15 08:18:22

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

熟悉的身影哈哈

liansh2002 发表于 2017-11-15 09:26:57

tangguotaizi 发表于 2017-11-14 21:38
mark,楼主牛!用什么拓扑做的逆变器?

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

liansh2002 发表于 2017-11-15 09:27:27

EngKing 发表于 2017-11-14 23:01
咨询一下,楼主的流程图是什么软件做的

excel画的

liansh2002 发表于 2017-11-15 09:28:19

PCBBOY1991 发表于 2017-11-14 22:20
数控电源指的是数字电源么?

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

PCBBOY1991 发表于 2017-11-15 10:00:21

liansh2002 发表于 2017-11-15 09:28
是的,就是数字电源,大家的叫法不一样吧

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

tangguotaizi 发表于 2017-11-15 15:24:38

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

功率最大做到了多大?

liansh2002 发表于 2017-11-16 13:09:42

PCBBOY1991 发表于 2017-11-15 10:00
数控电源和数字电源完全不是一个东西吧。。。。。。。。。。。。。。。。。。。 ...

啊,不是同一个东西吗?

liansh2002 发表于 2017-11-16 13:09:59

tangguotaizi 发表于 2017-11-15 15:24
功率最大做到了多大?

几百瓦的小功率

taoworking 发表于 2017-11-16 13:14:48

有用的东西,学习

书的那页 发表于 2017-11-23 11:24:40

很不错的东西 要是楼主可以说下制作过程就完美了,最近正在搞035驱动电机

liansh2002 发表于 2017-11-28 09:14:16

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

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

liyanfeng 发表于 2017-11-30 10:38:16

厉害厉害,学习学习!

fengyunyu 发表于 2017-12-4 23:26:18

DSP相比单片机的强项在哪?开发难度大么?

drive 发表于 2017-12-5 09:13:00

果断 赞啊!

liansh2002 发表于 2017-12-5 09:31:19

fengyunyu 发表于 2017-12-4 23:26
DSP相比单片机的强项在哪?开发难度大么?

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

powerobust 发表于 2018-8-7 11:50:07

bootloader程序和 应用程序是写在两个工程里面吗?

lileistone 发表于 2018-8-7 20:55:38

比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天…

liansh2002 发表于 2018-8-8 10:23:44

powerobust 发表于 2018-8-7 11:50
bootloader程序和 应用程序是写在两个工程里面吗?

没分开,是同一个工程

liansh2002 发表于 2018-8-8 10:26:24

lileistone 发表于 2018-8-7 20:55
比较好奇can一帧才8个字节,下载一个firmware几十到几百K,岂不是小水管要下好半天… ...

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

天使之翼 发表于 2018-8-23 14:42:45

liansh2002 发表于 2018-8-8 10:26
还好吧,我这常用的波特率最低也有125K,更新一次一分钟左右

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

山水木 发表于 2018-10-9 22:04:36

最近学习dsp,学习一下

TKZXJ 发表于 2018-12-20 20:55:25

谢谢分享,学习了

tianyaxtutianya 发表于 2019-3-25 18:25:17

谢谢分享,学习了   后期公司也有需要在28335上实现Bootloader,现在还是一头雾水
页: [1]
查看完整版本: 分享一个自己写的2803x系列CAN通讯Bootloader