DSP28335 CAN Bootloader升级方案核心模块与中断处理机制解析

F28335的Flash空间不够用?Bootloader与APP的CMD文件分区实战详解 本文详细解析了TMS320F28335在Flash空间不足时的解决方案,重点介绍了Bootloader与APP的CMD文件分区策略。通过CAN总线实现远程固件更新,优化存储空间分配,提升系统性能。文章还分享了实战技巧、校验机制及性能优化案例,帮助开发者高效应对Flash空间管理挑战。 阅读详情

1. 深入理解DSP28335 CAN Bootloader的核心架构

大家好,我是老李,在工业控制领域摸爬滚打十多年了,今天想和大家聊聊DSP28335的CAN Bootloader方案。这个方案在实际项目中特别实用,特别是对于那些需要远程升级固件的工业设备。简单来说,Bootloader就是设备上电后运行的第一段程序,它决定是进入升级模式还是直接跳转到应用程序。

我见过很多工程师在实现Bootloader时遇到的坑,最常见的就是中断处理不当导致系统卡死,或者Flash操作失败让设备变砖。其实这些问题都可以通过合理的设计来避免。DSP28335的CAN Bootloader核心在于三个模块的协同:CAN通信模块负责数据传输,Flash操作模块负责固件存储,主控制模块负责整体调度。

在实际项目中,我一般会把Bootloader放在Flash的SECTORA和SECTORB,这两个扇区不会被升级过程擦除,相当于一个安全的"保险区"。应用程序则放在SECTORC到SECTORH,升级时这些区域会被完全擦除重写。这样的分区设计确保了即使升级过程中断电,Bootloader也不会被破坏,设备仍然可以重新进入升级流程。

2. CAN通信模块的中断机制深度解析

CAN通信是整个Bootloader的血液系统,负责从上位机接收固件数据。DSP28335的eCAN模块相当强大,支持32个邮箱,我们可以灵活配置发送和接收邮箱。

2.1 中断配置的关键细节

在我的实际项目中,配置CAN中断时有几个关键点需要特别注意。首先是波特率设置,基于150MHz的系统时钟,我通常这样配置:

// CAN波特率配置为500kbps
ECanaRegs.CANBTC.bit.BRPREG = 9;     // 波特率预分频
ECanaRegs.CANBTC.bit.TSEG2REG = 2;   // 时间段2
ECanaRegs.CANBTC.bit.TSEG1REG = 10;  // 时间段1

这样配置出来的波特率非常稳定,我在工业现场测试过,距离200米通信依然可靠。然后是接收邮箱的配置,我习惯用邮箱31作为专用接收邮箱:

// 配置接收邮箱31
ECanaMboxes.MBOX31.MSGID.all = 0x1340;    // 设置接收ID
ECanaMboxes.MBOX31.MSGID.bit.AME = 1;     // 启用接收屏蔽
ECanaMboxes.MBOX31.MSGID.bit.AAM = 0;     // 非自动应答模式
ECanaMboxes.MBOX31.MSGCTRL.bit.DLC = 8;   // 数据长度8字节

接收中断的配置尤为重要,我建议把CAN接收中断连接到PIE组的第6个中断:

// 配置CAN接收中断
PieCtrlRegs.PIEIER9.bit.INTx6 = 1;  // 使能PIE组9的第6中断
IER |= M_INT9;                      // 使能CPU第9级中断
EALLOW;
PieVectTable.ECAN1INTA = &ECana1_ISR; // 设置中断服务函数
EDIS;

2.2 中断服务函数的实战经验

中断服务函数是CAN通信的核心,这里我分享一个经过实战检验的写法:

__interrupt void ECana1_ISR(void)
{
    // 检查是否是邮箱31接收中断
    if (ECanaRegs.CANRMP.bit.RMP31 == 1)
    {
        // 读取接收到的数据
        CanRxMsg.data[0] = ECanaMboxes.MBOX31.MDL.all;
        CanRxMsg.data[1] = ECanaMboxes.MBOX31.MDH.all;
        
        // 设置数据更新标志
        rx_update = UPDATE;
        
        // 清除中断标志
        ECanaRegs.CANRMP.bit.RMP31 = 1;
    }
    
    // 清除PIE中断应答
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}

这里有个坑我踩过:一定要先读取数据再清除中断标志,否则可能会出现数据丢失。另外,中断服务函数要尽可能简洁,只做必要的操作,长时间的操作应该放到主循环中处理。

3. Flash操作模块的安全机制

Flash操作是Bootloader中最危险的部分,一旦出错就可能让设备变砖。我在项目中总结了一套安全的Flash操作流程。

3.1 Flash初始化和解锁

首先是要正确初始化Flash API,这个步骤很多人会忽略:

void FlashAPI_Init(void)
{
    // 设置CPU频率缩放因子
    Flash_CPUScaleFactor = 150 / 100; // 150MHz系统时钟
    
    // 初始化回调函数指针
    Flash_CallbackPtr = NULL;
    
    // 检查Flash API版本
    if (Flash_API_Version < 2.10)
    {
        // 版本过低,需要更新API
        HandleError(FLASH_API_ERROR);
    }
}
</
TMS320F28335裸机CAN通信工程包:C语言驱动+中断收发例程+RAM可运行 专为TI TMS320F28335 DSP芯片设计的CAN总线通信完整工程,纯C语言实现,不依赖BIOS或RTOS,适合CCS开发环境直接编译下载。包含标准外设驱动(DSP2833x_ECan.c、CAN.c)、CAN初始化配置、标准帧/扩展帧发送与接收功能、错误状态检测、中断服务程序(DSP2833x_DefaultIsr.c、DSP2833x_PieVect.c)以及系统基础模块(时钟、GPIO、CPU定时器、系统控制等)。提供28335_RAM_lnk.cmd链接脚本,支持RAM调试模式,上电即跑无需 阅读详情

相关推荐

DSP在线升级详细指导

源代码和指导文档,详细学习DSP在线下载过程。程序包含bootloader和上位机软件。

28335在线升级bootloader

28335二阶bootloader,可以实现远程应用升级, 非常好用

基于can总线的bootloader

基于CAN总线的Bootloader,功能如下: 1、自动检测连接到CAN总线上的节点,并自动为每个节点分配一个唯一的地址; 2、自动检测节点是否在线,若离线则从列表中删除; 3、可以升级更新指定节点的程序,同时可以发送命令控制程序的执行; PC端程序所需硬件为纬图的Ginkgo USB-CAN适配器。

C2000 DSP28377在线升级烧录 iap

C2000 DSP28377在线升级烧录 iap

DSP Bootloader详解

DSP Bootloader详解,写的还可以哦!!

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

CST毫米波雷达ADAS仿真:从直角反射器到距离多普勒(RD图)的实战解析

本文通过CST Studio Suite实战解析毫米波汽车雷达ADAS仿真,详细演示了从构建直角反射器目标、参数化定义速度、进行参数扫描到生成距离多普勒图(RD图)的全过程。文章深入探讨了雷达关键参数(如距离分辨率、速度分辨率)的设计权衡与工程逻辑,并提供了单位统一、速度范围设定等实用避坑指南,帮助工程师高效完成雷达系统性能的前期验证与优化。

weixin_29292535的博客 502

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3467

别再瞎改注册表了!实测Win10/Win11远程桌面60帧的正确姿势(附ToDesk对比)

本文深入解析Windows远程桌面60帧优化的科学方法,揭示常见误区并提供实测有效的解决方案。从版本差异到硬件加速,再到第三方工具对比(如ToDesk),帮助用户避开无效的注册表修改,实现流畅的远程桌面体验。

weixin_33738555的博客 344

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1303

PCIE总线及其PCIE SWITCH的使用

PCIe总线与PCI最大的区别在工作原理上,PCIe是采用点到点的串行方式进行传输的,被称为“串行PCI”,由于采用了串行方式传输使得其工作频率可以达到2.5Ghz,大大增加了传输速率,同时采用全双工的通信方式,使得其传输速度提高了一倍,每一个PCIe总线设备与外部通信时有四根数据总线,分别有两个RX和TX,两根用于发送,两根由于接收。PCIe switch中文翻译为PCIe开关或PCIe交换机,主要作用将PCIe设备互联,PCIe switch芯片与其设备的通信协议都是PCIe;

zxm8513优快云博客 4736

Zemax与Matlab交互:双胶合优化详细流程

Zemax与Matlab交互:双胶合优化详细流程

weixin_72050316的博客 630

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 883

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 深入剖析Zynq LwIP中的xemacif_input函数:数据包接收与多MAC适配机制
下一篇: TuyaOS与VSCode:打造高能效IoT开发环境的秘密武器
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值