当前位置: 首页 > news >正文

TMS320F28335二次bootloader在线IAP升级

F28335总共ABCDEFGH个区域,每个32K*16bits,即64K字节。

bootloader代码占用A区,地址0x338000~0x33FF7F,cmd文件中SECTIONS部分,需要添加Flash28_API相关信息,具体下载Flash28335_API_V210的demo,参考里面的cmd文件。另外就是添加头文件,库文件,添加MemCopy等。

关键部分:

1. bootloader的cmd文件中,Flash28_API的LOAD=FLASHA,ramfuncs的LOAD=FLASHA,即都选择A区和bootloader代码一起,节省分区。

2. BEGIN的origin=0x33FFF6, length=0x000002

应用APP代码占用C区和D区,使用G区和H区作为升级临时备份区域。同样cmd文件中添加Flash28_API相关信息。另外就是添加头文件,库文件,添加MemCopy等。

关键部分:

1. APP的cmd文件中,Flash28_API的LOAD=FLASHD,ramfuncs的LOAD=FLASHD,即都选择D区。千万不要和bootloader中选择同样的A区,这样会覆盖,另外如果用到中断服务函数,会导致存储在FLASA中的Flash_API代码不一致。即bootload和APP不能共用Flash28_API和ramfuncs一个区域。

2. BEGIN的origin=0x320000,length=0x000002,即实际物理C区的起始地址,同时修改FLASHD的origin=0x320010,length=0x00F000(这个可以长一点,不超过C区范围即可)。

最后E区保留,作为数学库的区域。另外在H区的最后1K空间,用来保存是否升级标识。

总体逻辑如下:

1. 上电,从地址0x33FFF6进入厂家的boot,厂家的boot进入我们自己的bootloader。

2. 在自己的bootloader中读取H区最后1K空间是否存在升级标识。

3. 如果不存在,跳转到0x320000(D区),使用asm("   LB 0x320000");命令。

4. 如果存在,拷贝G区,H区数据覆盖C区、D区。然后再跳转到0x320000。

5. 进入APP后,读取H区最后1K空间是否存在升级标识,如果存在,就擦除G、H区。


http://www.mrgr.cn/news/91459.html

相关文章:

  • 云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
  • Docker安装Minio对象存储
  • 天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
  • 如何使用 vxe-table grid 全配置式给单元格字段格式化内容,格式化下拉选项内容
  • 小米电视维修记录 2025/2/18
  • Ubuntu学习备忘
  • 【TOT】Tree-of-Thought Prompting
  • python进阶篇-面向对象
  • 23种设计模式 - 模板方法
  • cesium视频投影
  • 前端VUE+后端uwsgi 环境搭建
  • Breakout Tool
  • 9.PG数据库层权限管理(pg系列课程)第2遍
  • ubuntu22.04离线安装K8S
  • DeepSeek部署到本地(解决ollama模型下载失败问题)
  • 0.1 量海航行:量化因子列表汇总(持续更新)
  • Windows 启动 SSH 服务
  • 搞懂deepseek(一) 搭建一个自己的智能助手
  • 2025-02-18 学习记录--C/C++-PTA 7-25 念数字
  • 基于Ubuntu系统的docker环境对MySQL8.0.36主从部署