DSP28069的can升级方案 提供boot源代码,用户app示例源代码工程,升级上位机。 ...

DSP28069的can升级方案 提供boot源代码,用户app示例源代码工程,升级上位机。 ... DSP28069的can升级方案 提供boot源代码用户app示例源代码工程升级上位机。 上位机为cdsp工程用ccs10.3.1。 can盒使用周力功或者其他便宜兼容设备。最近在折腾DSP28069的CAN总线升级方案时踩了不少坑今天把核心实现逻辑和代码掰碎了聊。这个方案不需要昂贵设备周力功的百元级CAN盒就能跑起来咱们直接上干货。Bootloader的暴力美学DSP上电后最先跑的是bootloader这段代码必须焊死在FLASH开头。核心就干三件事等升级指令、收数据、擦写APP区。先看CAN初始化的骚操作void InitCAN(void) { // 48MHz时钟下配置500kbps CanaRegs.CANMC.bit.CCR 1; // 进入配置模式 CanaRegs.CANBTC.bit.BRP 5; // (48MHz/(51))/10 800kHz CanaRegs.CANBTC.bit.TSEG1 6; CanaRegs.CANBTC.bit.TSEG2 1; CanaRegs.CANMC.bit.CCR 0; // 退出配置模式 }这里有个魔鬼细节BRP寄存器值1才是实际分频系数。很多手册没写清楚配置错了直接导致波特率漂移。APP工程的断舍离用户程序要做两处关键修改。首先是CMD文件里把程序起始地址后移避开bootloader占用的空间FLASH_APP : origin 0x3F8000, length 0x007000然后是中断向量表重定向在main()最开始加这段硬核代码asm( EALLOW); MemCopy(RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart); InitSysCtrl(); asm( EDIS);不复制RAM函数就等着看寄存器乱飞吧别问我怎么知道的...C#上位机的祖传代码DSP28069的can升级方案 提供boot源代码用户app示例源代码工程升级上位机。 上位机为cdsp工程用ccs10.3.1。 can盒使用周力功或者其他便宜兼容设备。用周力功CAN盒的DLL库发数据比想象中简单ZLGCAN_Transmit(devHandle, 0, new byte[] { 0xAA, 0x55 }, 2);但注意帧间隔控制实测在for循环里不加Thread.Sleep(1)会导致DSP缓冲区溢出数据包直接祭天。协议设计的黑暗艺术我们采用动态分包的骚操作上位机先发0xAA55握手包DSP回0x55AA确认数据包头包含固件大小CRC32每包512字节带序列号末尾CRC校验失败则自动重传这个流程在车间电磁干扰环境下稳如老狗实测连续刷机200次没翻车。跳转APP的信仰之跃bootloader收完数据后用函数指针实现乾坤大挪移typedef void (*AppEntry)(void); AppEntry RunApp (AppEntry)0x3F8000; RunApp();执行前务必关闭所有外设特别是CAN模块的残留中断能把新程序直接干崩。整套方案在CCS10.3.1上验证通过GitHub仓库里附带了带中文注释的工程文件。注意周力功设备的波特率配置要和DSP完全一致否则会出现能发不能收的灵异现象。最后提醒升级期间保持电机断电别问我是怎么总结出这条血的教训的...