3.2 TMS320F2812 Flash API V2.10简介
TMS320F2812 Flash API V2.10是TI提供的Flash API函数的最新版本。通过TMS320F2812 Flash API V2.10中提供的API函数可以实现对Flash存储器内程序和数据的修改。
擦除:
只有Flash阵列可以擦除,OTP只可以一次烧写,之后就不可以擦除。擦除函数将所有的Flash阵列设置为1(0xFFFF)。擦除Flash时以段为最小擦除单位。
图3-3 擦除结果示意
烧写:
Flash和OTP都可以利用烧写函数进行烧写。烧写函数将应用程序代码和数据烧写进Flash和OTP存储器。烧写函数将存储器的bit值由1改为0来写入数据,而不能把0改为1,所以在使用烧写函数之前必须先进行擦除。烧写函数每次擦除一个字的数据。
图3-4 烧写结果示意
校验:
检验函数通过运行CPU二次读取数据并和原来的参考值进行比较,来检验数据是否被正确写入到期望的存储器位置。校验函数可以对Flash和OTP进行校验。
3.3 Flash烧写的具体实现
利用Flash API V2.10实现对Flash内数据的烧写必须按照下面的步骤进行:
步骤1: 修改Flash281x_API_Config.h
Flash281x_API_Config.h文件中包含使用Flash API时的不同用户设定,主要是不同的目标DSP型号和CPU时钟频率。在源文件中修改CPU宏定义实现不同CPU设定,以便编译器选择在TMS320F2810,TMS320F2811,TMS320F2812处理器中选择一种来编译。
图3-5 选择与目标板一致的DSP芯片
通过修改代码前的//号来选择对应的CPU时钟频率(SYSCLKOUT)。Flash API按照选定的时钟频率来运行。
图3-6 选择DSP芯片的运行速度
CPU时钟频率用来在编译时计算刻度因数,Flash API利用刻度因数在烧写Flash时插入适当的时间间隔,以便CPU能将数据正确烧写到Flash内。时刻因数在Flash281x_API_Config.h最后定义如下。
图3-7 时刻因数的计算方法
烧写时的CPU频率一般是最高值150MHz。Flash API正常运行时的频率不低于10MHz。
步骤2:包含Flash281x_API_Library.h文件和与目标芯片对应的库文件
Flash281x_API_Library.h是Flash API主要的头文件,包含擦除,烧写和确认函数,用到的结构体,变量等的定义。任何使用Flash API的软件都需要包含这两个文件。
步骤3:初始化PLL控制寄存器
API函数必须在合适的操作频率下运行,所以应用程序必须在任何API函数调用之前初始化PLL寄存器PLLCR,通过软件延时或其他方式保证PLL有足够的时间锁定新的频率。本系统中使用了131072个时钟周期,由软件初始化时调用InitSysCtrl()函数设定。
步骤4:复制Flash API函数到片内SARAM中
将Flash API函数由Flash复制到SARAM中,涉及程序代码在存储中的分布。DSP内部存储空间的资源分配由CMD文件定义。因此实现Flash API函数由Flash复制到SARAM需要在CMD文件中添加如下代码:
图3-8 CMD文件中Flash API的定义
代码说明:Flash API库位于Flash端(PRAMH0),运行地址是SARAM中的L0SRAM。段中必须包含下面两块:
API 库源代码: 例如:Flash2812_API_V210.lib(.text)
API常值参数: 例如:Flash2812_API_V210.lib(.econst)
段中定义了三个给连接器用来分配API库的装载起始地址,结束地址和运行地址符号:
装载起始地址: Flash28_API_LoadStart
装载结束地址: Flash28_API_LoadEnd
运行起始地址: Flash28_API_RunStart
这些符号在文件Flash281x_API_Library.h中声明。
图3-9 API符号的声明
在应用程序中使用这些定义的符号就可以将Flash API函数从Flash中复制到SARAM,如图3-10所示。 嵌入式设备的远程更新平台(5):http://www.youerw.com/zidonghua/lunwen_9473.html