首页
Flask
Flask部署
Git
linux
Python
UPS
VPN
Web
Windows
其他
RM3120_PM05D模块在线升级设计方案
删除
×
是否确定删除!
## <center>UPS在线升级设计方案</center> *<p align='right'>RM3120_PM05D</p>* --- ### 一、总体设计思想 1. 上位机(如:PC)通过通讯线连接 UPS (RM3120) 外部接口(USB、RS232、485,遵循Modbus通讯协议),更新UPS内部所有模块(PM05D)的程序。 2. 程序设计主要分为监控程序设计和模块程序设计,监控程序主要设计为程序升级逻辑部分,通过CAN通讯控制模块完成程序升级。模块程序主要完成接收监控命令,执行程序升级任务。 3. 监控程序需要设计的功能: - 设计升级程序CAN通讯命令和逻辑; - 设计通过串口(Modbus通讯协议)读取模块最新程序; - 设计模块更新或者加载伪 bootload 程序逻辑; - 设计更新模块主程序逻辑; - 设计模块重启逻辑。 4. 模块程序需要设计的功能: - 设计加载 Bootload 功能函数; - 设计擦除、写入、校验、修改 Flash 功能函数; - 设计 bootload CAN 通讯协议和逻辑。 --- ### 二、PM05D 模块设计方案 ##### 1. 软件(bootload)运行环境 软件与主程序一起烧录在FLASH中,程序运行后加载到内存中运行。 ##### 2. 软件加载方法 1. 在 *MAIN()* 函数中,与主程序内存函数一起加载到内存。 2. 运行 *bootload* 后加载到内存运行。 ##### 3. 软件执行入口 进入升级程序的条件 1. 模块关机 2. 母线电压降低到安全电压 3. 关闭输入继电器 4. 关闭电池 *SCR* 5. 升级标志位正确 6. 升级密钥正确 满足条件后从 100ms 任务进入升级程序。 ##### 4. 软件主体框架设计 step 1. **关闭所有中断和看门狗** ;<br /> 防止在升级程序过程中被意外中断打断,造成软件升级失败。<br /> step 2. **初始化 *DSP* 系统时钟** ;<br /> 设置标志位,正常进入 *bootload* 不需要执行,非正常进入,则需要重新初始化系统时钟。<br /> step 3. **初始化内存及内存检查** ;<br /> step 4. **拷贝 *bootload* 到内存中** <br /> step 5. **初始化 *Flash*** ; <br /> step 6. **初始化 *GPIO*** ; <br /> 主要是CAN通讯 IO口 初始化<br /> step 7. **初始化 *CAN*** 通讯 ; <br /> step 8. **中断初始化,打开定时器中断** <br /> step 9. **初始化定时器** ; <br />1ms 临界任务和定时任务<br /> step 10. **循环任务切换** ; <br />后台数据处理及烧录任务<br /> step 11. **完成升级任务**,重启DSP ; <br /> ##### 5. CAN通讯设计 *CAN* 通讯主要功能函数与 *Bootload* 共用一段 *Flash* ,主程序运行或者 *Bootload* 运行后加载到内存中执行,防止 *Bootload* 擦除 *Flash* 后造成CAN通讯异常。 ##### 6. 标志位设计 主程序设置标志位 *FLASHM* 。主程序正常运行时,标志位值为 0xA5A5 ;当主程序被擦除后,值变为 0xFFFF ,标志程序正在升级。若是升级过程被意外打断,*DSP* 重新上电,检测标志位为 0xFFFF ,直接进入 *Bootload* 程序,重新再进行软件烧录。 ##### 7. 读取和校验程序设计 内存大小限制,设置按块读取数据,每次读取64字节数据。 ##### 8. 擦除程序设计 首先擦除主程序所在 *FLASH* 段,烧录成功后擦除 *Bootload* 所在*FLASH* 段。 ##### 9. 烧写 Flash 设计 烧录FLASH API 单次最大烧写8个字节数据,防止烧录时间较长,每次烧写8次,也就是当数据块设置为64个字节。 ##### 10. 程序版本和重启DSP设计 程序升级完成,启动看门狗,看门狗复位。 --- ### 三、RM3120 监控设计方案 ##### 1. CAN通讯设计 ##### 2. Modbus通讯设计 ##### 3. 新程序存储设计 ##### 4. 升级逻辑设计 ##### 5. 冗错设计