技术交流 & 最新设计指南获取方法
步骤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函数之后调用。
使用示例: