TMS570LS3137笔记-内部Flash FEE使用
1、基本简介
TMS570LS3137内部Flash分为三个 Bank,主Flash 数据存储区3MB,是Bank1和Bank2.还有一个Bank7是作为内部Flash模拟EEPROM使用。内部存储器如下图所示:

FEE功能只是用于Bank7,需要使用这块存储器就需要相应的函数实现数据的读取、写入和擦除。Ti为我们准备了F021FLASH-library实现了程序代码和系统存储器之间的桥梁。因此我们只需要调用F021FLASH-library的接口代码即可实现对存储器的读写操作。这可比翻手册写代码简单多了。
2、使用流程
2.1需要使用FEE功能,首先需要在HALCoGen软件配置相应功能,使能FEE驱动库等操作。然后配置内部存储器的Block操作等。

FEE配置:


FEE驱动配置就完成了,HALCoGen生成代码。然后进入Code Composer Studio 编译。
2.2添加F021FLASH-library代码;
在前面的HALCoGen生成代码完成后,进入CCS编译,会报错。提示:F021.h文件找不到。那是因为我们前面说过的F021FLASH-library驱动代码没有添加到工程中。在Ti网站下载:https://www.ti.com/tool/HERCULES-F021FLASHAPI#downloads F021FLASH-library包,下载下来后是一个压缩包spnc033.zip。将其解压后是一个exe文件,安装exe文件。会默认将F021FLASH-library代码解压到C:\ti\Hercules\F021 Flash API。
将F021 Flash API文件夹复制到工程所在路径下:

接下来配置CCS,首先将新添加到头文件路径加入到CCS工程之中:

由于F021FLASH-library是以Lib 方式提供的,因此还需要将对应的lib添加到CCS工程中去。打开F021FLASH-library文件目录会发现文件夹中除了提供了代码文件和lib文件还有完善的API说明。有兴趣可以详细看看API代码的意思,和操作流程。Ti文档解释的还是比较清楚的。我们发现这里提供了很多lib,那是因为这个工程是服务于TI很多芯片的。因此需要添加正确的lib文件才可以使用该功能。

就F021库而言,BE和LE分别指大端序和小端序,Hercules系列产品中,TMS570系列为大端序,RM系列为小端序;我们使用的是TMS570LS3137因此选择F021_API_CortexR4_BE.lib。
在CCS这个位置添加,如下图所示:

自此,我们所有的配置过程就完成了。
3、代码编写和测试
在需要使用FEE的文件中调用头文件“#include "ti_fee.h"”;
3.1 FEE初始化函数
在进行FEE读写数据之前必须调用 “TI_Fee_Init();”初始化库。
3.2写数据
下面定义写入数据函数,参数是Block号和Buf,单次写入数据我们前面已经定义好 64字节。
void bank7_flash_write(uint16 BlockNumber,uint8 *buf)
{
TI_FeeModuleStatusType Status; //定义状态标志字
do
{
TI_Fee_MainFunction();
delay_ms(1);
Status=TI_Fee_GetStatus(0 );
}
while(Status!=IDLE); //获取 FEE状态并等待为 IDLE
TI_Fee_WriteAsync(BlockNumber, buf); //写入数据
do
{
TI_Fee_MainFunction();
delay_ms(1);
Status=TI_Fee_GetStatus(0);
}
while(Status!=IDLE);
}
3.3读取数据
BlockNumber读取数据 block号,BlockOffset读取数据偏移,buf读取数据Buf,Length读取数据长度。
void bank7_flash_read(uint16 BlockNumber,uint16 BlockOffset,uint8 *buf,uint16 Length)
{
unsigned int index = 0;
unsigned int set_w_num = 0;
TI_FeeModuleStatusType Status;
Std_ReturnType oResult;
TI_Fee_AddressType cur_address = 0;
index = TI_FeeInternal_GetBlockIndex(BlockNumber);
set_w_num = TI_FeeInternal_GetBlockSize(index)-TI_FEE_BLOCK_OVERHEAD;
cur_address = TI_FeeInternal_GetCurrentBlockAddress(BlockNumber,0,index);
if(BlockOffset<=set_w_num) //检查 Length 长度数据的 合法性
{
if(Length>(set_w_num-BlockOffset))Length=set_w_num-BlockOffset;
}
oResult=TI_Fee_Read(BlockNumber,BlockOffset,buf,Length);
do
{
TI_Fee_MainFunction();
delay_ms(1);
Status=TI_Fee_GetStatus(0);
}
while(Status!=IDLE);
}
3.4 擦除数据
擦除函数可选择使用如下两种函数:
TI_Fee_Format(0xA5A5A5A5U); //格式化就是将整个bank7进行格式化。
TI_Fee_EraseImmediateBlock(1); //Block1 擦除
TI_Fee_EraseImmediateBlock(2); //Block2 擦除
3.5测试函数
我编写了2个block数据写入和读取的测试函数。实现数据写入和读取并在串口中显示数据。
void bank7_flash_test(void)
{
uint8 buf[64],read[64];
uint16 i=0;
for(i=0;i<64;i++)
{
buf[i]=65-i;
read[i]=0;
}
TI_Fee_Init(); //FEE 系统初始化
bank7_flash_write(1,buf); //Block1 写入数据
bank7_flash_read(1,0,read,64); //Block1读取 写入的数据
printf("Block1 读出数据:\r\n");
for(i=0;i<64;i++){printf("%d ",read[i]);} //打印读取的数据
//Block2 数据读写测试开始
for(i=0;i<64;i++)
{
buf[i]=i+2;
read[i]=0;
}
bank7_flash_write(2,buf); //Block2 写入数据
bank7_flash_read(2,0,read,64); //Block2读取 写入的数据
printf("\r\nBlock2 读出数据:\r\n");
for(i=0;i<64;i++){printf("%d ",read[i]);} //打印读取的数据
// TI_Fee_Format(0xA5A5A5A5U); //格式化就是将整个bank7进行格式化。
TI_Fee_EraseImmediateBlock(1); //Block1 擦除
TI_Fee_EraseImmediateBlock(2); //Block2 擦除
}
3.6测试结果
测试结果如下所示:

TMS570LS3137笔记-内部Flash FEE使用的更多相关文章
- STM32学习笔记:读写内部Flash(介绍+附代码)
一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...
- [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...
- STM32F103使用内部Flash保存参数
在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数.这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.将这类数据存在指定的 ...
- STM32F4读写内部FLASH【使用库函数】
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...
- STM32 对内部FLASH读写接口函数
因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中 ...
- STM32 对内部FLASH读写接口函数(转)
源:STM32 对内部FLASH读写接口函数 因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. ...
- STM32f030f4p6 内部flash 打包读写
最近做到的项目在运行需要把一组uint8_t(unsigned char)的数据进行掉电储存,想到单片机STM32f030f4p6内部flash可以直接由程序操作,写了以下代码用于uint8_t数据打 ...
- STM32 内部flash的读写程序
/* Base address of the Flash sectors */ #define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base ...
- 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析
@20119-01-29 [小记] STM32擦除内部FLASH时间过长导致IWDG复位分析
随机推荐
- MS17-010漏洞利用
MS17-010漏洞利用 1.安装虚拟机win7 x64,实现利用ms17-010实现对其win7 x64主机开始渗透,查看该主机信息,打开远程桌面,抓取用户名和密码并破译,创建一个 : 学号.txt ...
- 『学了就忘』Linux软件包管理 — 49、拓展:Linux中通过脚本安装程序
目录 1.脚本程序简介 2.Webmin安装 (1)简介 (2)安装 (3)使用 1.脚本程序简介 脚本程序包并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于Windows下的程序安装,有 ...
- tomcat进行远程debug
Windows下 进入目录下的bin目录,编辑打开startup.bat 在前面添加: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.com ...
- Mybatis类型转换BUG
案例:mybatis框架的使用中是否遇到过前台传入数据后mybatis后台并不执行sql的情况呢? 比如:前台传入一个状态var flag //空字符,0,1 然后你用int接收,到mybatis框架 ...
- C/C++ Qt TreeWidget 嵌套节点操作技巧
在上一篇博文<C/C++ Qt TreeWidget 单层树形组件应用>中给大家演示了如何使用TreeWidget组件创建单层树形结构,并给这个树形组件增加了右键菜单功能,接下来将继续延申 ...
- 计算机系统->Hello World的一生 | 程序如何运行
2021年11月27日准备发在基地微信公众号上的推文. 综合了多篇大佬的博客,以及自己已经知道的知识,对一些疑惑进行了现阶段我认为还算满意的解答. 不过又产生了很多疑问: 内存和磁盘的关系 CPU是如 ...
- JavaWeb Cookie,Session
Cookie 1.Cookie翻译过来是饼干的意思.Cookie是服务器通知客户端保存键值对的一种技术.客户端有了Cookie 后,每次请求都发送给服务器.每个Cookie的大小不能超过4kb. 2. ...
- Codeforces 506E - Mr. Kitayuta's Gift(神仙矩阵乘法)
Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%% u1s1 感觉这道题风格很省选( 下记 \(m=|s|\),首先探讨 \(n+m\) 为偶数的情形. ...
- 洛谷 P3266 - [JLOI2015]骗我呢(容斥原理+组合数学)
题面传送门 神仙题. 首先乍一看此题非常棘手,不过注意到有一个条件 \(0\le x_{i,j}\le m\),而整个矩阵恰好有 \(m\) 列,这就启发我们考虑将每个元素的上下界求出来,如果我们第一 ...
- Linux openssl 升级、降级
Linux openssl 升级.降级 最近遇到一些朋友使用微信退款,报openssl版本为问题,需要对openssl进行降级. 现在环境的openssl版本如下: root@c215a2b695ef ...