DSP 程序远程升级 / Bootloader设计指南(五)—— FLASH擦写操作

技术交流 & 最新设计指南获取方法

步骤1) 扫描下方二维码,进入微信公众号

步骤2) 获取最新指南,在公众号后台回复以下关键字:【bootloader】

步骤3) 有疑问,在公众号后台回复以下关键字:【交流群】


目录

1
初识Bootloader

1.1 一次Bootloader

1.2 二次Bootloader

1.3 DSP上电引导过程

2
关于c_int00

2.1 c_int00完成的工作

2.2 系统初始化

2.3 全局变量初始化

2.4 全局对象构造

2.5 main函数与exit函数的调用

3
CMD文件与DSP存储空间

3.1 MEMORY和SECTIONS指令

3.2 程序与数据“段”

4
Bootloader数据流

4.1 数据流结构

4.2 16-bit数据流

4.3 8-bit数据流

5
FLASH擦写操作 —— FLASH
API的使用

5.1 FLASH操作的重要特点

5.2 FLASH API使用步骤

5.3 FLASH API常用函数使用举例

6
Bootloader设计过程中的9大关键点

6.1 Bootloader程序在升级过程中不被擦除的实现方法

6.2 上电后先进入Bootloader再跳转至main()函数的实现方法

6.3 Bootloader程序作为CCS应用程序工程一部分的实现方法

6.4 Bootloader与上位机形成交互式通信

6.5 Bootloader程序能够对接收数据校验的实现方法

6.6 在数据出错等情况下能够自动重启的实现方法

7
CCS输出文件格式 ——
ASCII-Hex、Intel-Hex与Binary-Hex文件

7.1 CCS配置生成Hex文件的方法

7.2 ASCII-Hex

7.3 Intel-Hex

7.4 Binary-Hex


正文开始


5 FLASH擦写操作 —— FLASH API的使用

“DSP程序在线升级时,需要擦写FLASH,这时就要用到FLASH API”

DSP FLASH的擦写需要用到FLAHS API,通常FLASH的基本操作包括擦除Erase、写入Program和验证Verify。

5.1 FLASH操作的重要特点

1) DSP FLASH存储区一次擦除的最小单位是1个扇区;以TMS320F28035为例,其8个扇区的划分如下:

在这里插入图片描述

2) Program写入函数只能将FLASH数据位由1改变为0,不可以由0改变为1;

3) Program写入函数一次只能操作1个16-bit字长度;

4) FLASH API必须放在内部SARAM中执行,请勿在FLASH或者OTP中执行;

5) FLASH API在执行擦除和写入动作时要避免被打断(如:中断服务程序(ISRs)、掉电停止等)。

5.2 FLASH API使用步骤

以TMS320F28035 FLASH API为例。

Step 1 >> 修改Flash2803x_API_Config.h以匹配你自己芯片的时钟频率,例如对于55MHz系统始终频率的配置:

在这里插入图片描述

Step 2 >> 包含Flash2803x_API_Library.h:#include
“Flash2803x_API_Library.h”

Step 3 >> 将对应的FLASH API库加入工程,对于TMS320F28035,对应的库为2803x_FlashAPI_BootROMSymbols.lib。

Step 4 >> 初始化PLL控制器。

Step 5 >> 检测PLL状态不处于Limp模式:FLASH API中有时间敏感的函数,需保证系统时钟处于正常状态。

Step 6 >> 将FLASH
API函数复制到SARAM中运行,通常应该包括以下步骤:

1) CMD文件中应该包括

在这里插入图片描述

2) Flash2803x_API_Library.h中定义了三个外部变量,用于复制代码

在这里插入图片描述

3) 在用户应用程序中应该包含Flash2803x_API_Library.h头文件,并在初始化结束后紧接着执行Example_Memcopy()函数

在这里插入图片描述

其中Example_Memcopy()函数的内容如下:

在这里插入图片描述

Step 7 >> 初始化Flash_CPUScaleFactor变量,注意该变量受“EALLOW”和“EDIS”保护

在这里插入图片描述

Step 8 >> 关闭全局中断,保证不能开启任何中断

Step 9 >> 至此基本配置完成,为了验证系统频率和PLL是否配置正确,可以调用Flash_ToggleTest()函数。Flash_ToggleTest()函数用来在指定的GPIO口上产生10kHz的方波,当系统配置正确时该方波频率为标准10kHz。配置测试完成后请删除调用Flash_ToggleTest()函数的语句。

示例:Flash_ToggleTest()函数的使用:Toggle Test on GPIO32
在这里插入图片描述

Step 10 >> 根据实际需求调用FLASH函数列表中的函数:

在这里插入图片描述

5.3 FLASH API常用函数使用举例

常用的函数有Flash_Erase、Flash_Program、Flash_Verify,其中函数参数中需要经常用到扇区定义,其宏定义已经在头文件Flash2803x_API_Library.h中给出

在这里插入图片描述

1) Flash_Erase函数

Flash_Erase函数用来擦除指定扇区,未指定扇区将被保留,一般在Flash_Program函数之前调用。

使用示例:

在这里插入图片描述

2) Flash_Program函数

Flash_Program函数可以将一个16-bit数据的buffer写入Flash的指定地址。

使用示例:
在这里插入图片描述

3) Flash_Verify函数

Flash_Verify函数用来验证Flash某一区域的数据是否与给定buffer中的数据相同。一般在Flash_Program函数之后调用。

使用示例:

在这里插入图片描述

  • 17
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值