1. 项目背景与需求分析
在工业控制和汽车电子领域,DSP28335作为TI公司经典的C2000系列数字信号处理器,因其出色的实时性能和丰富的外设接口被广泛应用于电机控制、电源管理等场景。随着产品功能迭代,如何在不拆卸设备的情况下实现固件远程升级成为工程师面临的普遍需求。
传统升级方式通常需要:
- 使用JTAG仿真器连接设备
- 拆解产品外壳接触调试接口
- 依赖专业烧录工具和操作人员
这些方法存在三大痛点:
- 现场维护成本高(差旅、停机损失)
- 批量升级效率低下
- 存在物理接触导致的静电损伤风险
基于CAN总线的Bootloader方案恰好能解决这些问题:
- 利用现有CAN通信网络(无需额外硬件)
- 支持差分传输(抗干扰强)
- 具备广播/单播模式(灵活部署)
- 传输速率可达1Mbps(满足多数场景)
2. Bootloader设计核心架构
2.1 存储器分区规划
在DSP28335的Flash空间(256KB)中采用二分法布局:
code复制0x3F 8000 - 0x3F FFFF : Bootloader区 (32KB)
- 包含跳转逻辑
- CRC校验算法
- CAN驱动
- 加密解密模块
0x3D 8000 - 0x3F 7FFF : 应用程序区 (224KB)
- 用户程序主体
- 预留双备份空间
关键设计要点:
- Bootloader自身需小于32KB(优化编译选项)
- 应用程序起始地址对齐4K边界(Flash擦除块大小)
- 中断向量表重映射机制
2.2 启动流程状态机
c复制void main()
{
InitWatchdog(); // 看门狗初始化
CAN_Config(500kbps); // CAN波特率设置
if(Check_Update_Flag())
{
Enter_Update_Mode(); // 进入升级流程
}
else
{
JumpToApp(0x3D8000); // 跳转至应用程序
}
}
状态转换包含以下关键节点:
- 上电后检测GPIO触发引脚(如保留PA15作为强制升级引脚)
