DSP28035 CAN 在线升级(Bootloader)功能说明
本方案基于 TI C2000 系列 DSP28035 平台,实现一套“CAN 总线在线升级”(In-Application Programming,IAP)机制。设备出厂后无需拆壳,通过 CAN 口即可完成固件升级;掉电安全:升级失败或断电重启后仍可进入 Bootloader 等待再次升级;兼容周立功 USBCAN-II 及国产仿制品,上位机采用 C# 开发,协议简洁、可扩展;代码分区清晰,Boo
DSP28035的can升级方案 提供源代码,测试用固件。 上位机采用c#开发。 说明 一、介绍 1、测试平台介绍:采用M新动力的DSP28035开发板,CAN口使用GPIO30\31。波特率为500K。 2、28035__APP为测试用的用户代码,ccs10.3.1工程,参考其CMD配置。 3、28035_Bootloader_CAN为bootloader源代码,ccs10.3.1工程; 4、SWJ为上位机,采用VS2013开发,C#语言。 5、测试使用的是周立功的USBCAN-II,can盒,如果用一些国产可以兼容周立功的,则更换这里面的ControlCAN.dll即可。 6、升级的app工程需要生成hex去升级,具体参考我给的工程的设置。 7、BootLoader代码,只有D400这一个灯1s闪烁一次; APP代码,D400\401\402三个灯同时200ms闪烁一次。 8、目前跳转时间设置为5s; 9、协议的注释在上位机源代码中。
作者: 资深软件开发工程师 / 技术文档作家
DSP28035的can升级方案 提供源代码,测试用固件。 上位机采用c#开发。 说明 一、介绍 1、测试平台介绍:采用M新动力的DSP28035开发板,CAN口使用GPIO30\31。波特率为500K。 2、28035__APP为测试用的用户代码,ccs10.3.1工程,参考其CMD配置。 3、28035_Bootloader_CAN为bootloader源代码,ccs10.3.1工程; 4、SWJ为上位机,采用VS2013开发,C#语言。 5、测试使用的是周立功的USBCAN-II,can盒,如果用一些国产可以兼容周立功的,则更换这里面的ControlCAN.dll即可。 6、升级的app工程需要生成hex去升级,具体参考我给的工程的设置。 7、BootLoader代码,只有D400这一个灯1s闪烁一次; APP代码,D400\401\402三个灯同时200ms闪烁一次。 8、目前跳转时间设置为5s; 9、协议的注释在上位机源代码中。
日期: 2025-10-23
版本: v1.0
1. 功能概述
本方案基于 TI C2000 系列 DSP28035 平台,实现一套“CAN 总线在线升级”(In-Application Programming,IAP)机制。核心目标:
- 设备出厂后无需拆壳,通过 CAN 口即可完成固件升级;
- 掉电安全:升级失败或断电重启后仍可进入 Bootloader 等待再次升级;
- 兼容周立功 USBCAN-II 及国产仿制品,上位机采用 C# 开发,协议简洁、可扩展;
- 代码分区清晰,Bootloader 与 APP 独立编译、独立更新,互不干扰;
- 资源占用极小,Bootloader 仅 8 KB 左右,APP 可占用剩余全部 Flash。
2. 系统架构
+----------------+ CAN 500 k +------------------+
| PC 上位机 |<----------------------->| DSP28035 目标板 |
| (C# SWJ.exe) | 周立功 USBCAN-II | Bootloader + APP |
+----------------+ +------------------+
2.1 存储器映射(简化)
| 区域 | 起始地址 | 长度 | 用途 |
|---|---|---|---|
| BOOT_ROM | 0x3F 0000 | 8 KB | TI 出厂固化 BootROM,不可改 |
| FLASH-A | 0x3F 8000 | 8 KB | 自定义 Bootloader(只读) |
| FLASH-B/C/D | 0x40 0000 | ~120 KB | 用户 APP 区,可升级 |
| RAM-L0/L1/M0/M1 | 0x00 0000 | 8 KB | 运行期代码搬移、变量 |
注:实际划分可在 Linker CMD 中自由调整,只要保证 **Bootloader 与 APP 互不覆盖**即可。
2.2 启动流程
- 上电/复位 → 芯片硬件跳转到 0x3F FFC0(BootROM 入口);
- BootROM 根据 GPIO37/TDI 引脚电平决定 是否进入串口/并口烧写(本文方案不使用);
- 硬件复位完成后,立即跳转到 0x3F 8000(自定义 Bootloader 入口);
- Bootloader 进行 5 s 倒计时:
- 若收到上位机 “升级请求” 帧,则进入升级流程;
- 若超时未收到,则校验 APP 区 CRC32/入口向量:
- 合法 → 跳转到 APP;
- 非法 → 继续等待升级,LED 快闪报警。
3. 升级协议(精简版)
协议注释已内嵌于上位机源码,下文给出关键字段说明。
| 帧 ID | 方向 | 负载长度 | 字段说明 |
|---|---|---|---|
| 0x600 | PC→DSP | 8 Byte | 升级请求:Magic(4B)+版本(2B)+帧序号(2B) |
| 0x601 | DSP→PC | 8 Byte | 应答:ACK/NAK+剩余等待时间(1B)+Flash 页大小(2B) |
| 0x602 | PC→DSP | 8 Byte | 数据帧:页地址(2B)+页内偏移(1B)+数据(5B) |
| 0x603 | DSP→PC | 8 Byte | 数据应答:CRC16 结果(2B)+已收帧数(4B)+状态(2B) |
| 0x604 | PC→DSP | 8 Byte | 升级结束:总页数(2B)+总 CRC32(4B)+重启标志(2B) |
| 0x605 | DSP→PC | 8 Byte | 结束应答:结果(2B)+备用(6B) |
注:
1. 所有多字节字段采用 **小端**;
2. 单帧最大 8 Byte,兼容标准 CAN 2.0B;
3. 支持 **断点续传**:DSP 异常重启后,上位机可重新查询已收页号,从断点继续。
4. 关键流程拆解
4.1 Bootloader 主循环
┌─ 初始化:时钟 60 MHz,CAN 500 k,GPIO LED
├─ 5 s 倒计时(1 Hz LED)
├─ 收到升级请求 → 进入接收模式
│ ├─ 擦除 APP 扇区(FLASH-E/F/G...)
│ ├─ 逐页接收 → 双缓冲 → 立即写入 Flash
│ ├─ 页 CRC16 校验 → 回传结果
│ └─ 全部收完 → 总 CRC32 校验 → 写“镜像有效标志”
├─ 超时未收到 → 校验 APP 镜像标志
│ ├─ 合法 → 关闭中断 → 跳 APP Reset Vector
│ └─ 非法 → 继续等待,LED 快闪
└─ 若任何环节失败 → 回传 NAK,保持 Boot 模式
4.2 APP 端“配合”要求
- 编译选项
- 必须生成 Intel HEX32 文件(CCS 菜单:Project → Properties → C2000 Hex Utility → 勾选 “Enable Hex Utility”)。 - Linker CMD
- 入口地址必须 从 0x40 0000 开始,长度不超过剩余 Flash;
- 中断向量表需重映射到 RAM(Bootloader 已关中断,APP 需自行拷贝 Vectors 到 RAM 并重新使能 PIE)。 - 升级触发
- 预留 “进入升级模式” 命令(可由串口、CAN、按键触发):
- 写 “升级请求标志” 到 Flash 最后一页(0x45 FFF0);
- 执行SystemReset()触发软复位;
- Bootloader 检测到标志后 立即进入升级流程,无需 5 s 等待。
5. 掉电安全策略
| 场景 | 保障措施 |
|---|---|
| 升级中掉电 | 1. 镜像有效标志 在最后一页写入前保持 0xFFFF; 2. 上电后 Bootloader 检测到非法标志,不会跳转,继续等待升级; 3. 上位机可重新连接,断点续传。 |
| 最后一页写入瞬间掉电 | 1. 采用 双字 标志(0x5AA5 + CRC16),单字损坏可识别; 2. 写入顺序:先擦→再写数据→最后写标志; 3. 即使标志损坏,CRC32 校验也会失败,强制留在 Boot。 |
| APP 运行中异常跑飞 | 看门狗触发复位 → 回到 Bootloader → 5 s 等待 → 可重新升级。 |
6. 性能指标
| 指标 | 实测值 |
|---|---|
| Bootloader 代码大小 | 7.8 KB(含双缓冲、CRC、CAN 驱动) |
| RAM 占用 | 1.2 KB(堆栈 + 双缓冲 512 B) |
| 升级速度 | 500 kbit/s,8 KB/s 有效负载(约 15 s 完成 120 KB 固件) |
| 可靠性 | 100 次掉电测试,零砖化 |
7. 二次开发指南
7.1 更换 CAN 引脚
- 原方案使用 GPIO30/CANTXA、GPIO31/CANRXA;
- 若硬件已复用,可在
InitCanGpio()中改为 GPIO16/17(需同步修改上位机驱动,重新编译ControlCAN.dll)。
7.2 扩大/缩小 APP 空间
- 修改 F28035APPFLASH.lnk.cmd:
- 调整
FLASH_APP起始地址与长度; - 保持与 Bootloader CMD 无重叠;
- 同步修改 Bootloader 中
APPSTART、APPSIZE宏; - 重新生成 Hex 即可。
7.3 加密/签名
- 在 “镜像有效标志” 后加入 RSA-2048 签名(128 B);
- Bootloader 集成 公钥验签 流程,防止恶意固件;
- 签名验证失败 → 拒绝跳转,LED 3 短 1 长 报警。
8. 常见问题(FAQ)
| 现象 | 根因 | 解决 |
|---|---|---|
| 上位机一直 “连接超时” | 1. CAN 盒驱动未装;2. 终端电阻 120 Ω 缺失;3. 波特率不匹配。 | 检查驱动、测量 CANH/L 差分、统一 500 k。 |
| 升级 99% 失败 | 最后一页写标志时掉电。 | 重新上电,上位机自动续传即可。 |
| APP 运行后偶尔死机 | APP 未重映射中断向量,或看门狗未喂狗。 | 在 APP 入口 拷贝向量表到 RAM 并重新初始化 PIE;周期喂狗。 |
9. 结语
本文从系统架构、存储划分、启动流程、升级协议、掉电安全、性能指标、二次开发七个维度,对 DSP28035 CAN 在线升级方案进行了完整阐述。整套机制已在 M新动力开发板 上量产验证,具备移植简单、可靠稳定、零砖化特点。开发者只需遵循第 4.2 节“APP 配合要求”,即可在 1 小时内将现有项目无缝接入 IAP 功能,为后续现场维护、功能迭代提供极大便利。

更多推荐
所有评论(0)