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使用的更多相关文章

  1. STM32学习笔记:读写内部Flash(介绍+附代码)

    一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...

  2. [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写

     一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...

  3. STM32F103使用内部Flash保存参数

    在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数.这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.将这类数据存在指定的 ...

  4. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  5. STM32 对内部FLASH读写接口函数

    因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中 ...

  6. STM32 对内部FLASH读写接口函数(转)

    源:STM32 对内部FLASH读写接口函数 因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. ...

  7. STM32f030f4p6 内部flash 打包读写

    最近做到的项目在运行需要把一组uint8_t(unsigned char)的数据进行掉电储存,想到单片机STM32f030f4p6内部flash可以直接由程序操作,写了以下代码用于uint8_t数据打 ...

  8. STM32 内部flash的读写程序

    ​ /* Base address of the Flash sectors */ #define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base ...

  9. 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析

    @20119-01-29 [小记] STM32擦除内部FLASH时间过长导致IWDG复位分析

随机推荐

  1. [hdu6326]Monster Hunter

    考虑树是以1为中心的菊花图的情况,也即如何安排打怪兽的顺序 用二元组$(a,b)$来描述怪兽,则对于两个怪兽$(a_{1},b_{1})$和$(a_{2},b_{2})$,交换两者不会影响血量的变化量 ...

  2. 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  3. Codeforces 1089I - Interval-Free Permutations(析合树计数)

    Codeforces 题面传送门 & 洛谷题面传送门 首先题目中涉及排列的 interval,因此可以想到析合树.由于本蒟蒻太菜了以至于没有听过这种神仙黑科技,因此简单介绍一下这种数据结构:我 ...

  4. Codeforces 1513F - Swapping Problem(分类讨论+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 简单题,难度 *2500 的 D2F,就当调节一下一模炸裂了的自闭的心情,稍微写写吧. 首先我看到这题的第一反应是分类讨论+数据结构,即枚 ...

  5. SP20173 DIVCNT2 - Counting Divisors (square)

    Refer 主要思路参考了 Command_block 的题解. Description 给定 \(n\)(\(n\le 10^{10}\)),求 \[\sum_{i=1}^n\sigma_0(i^2 ...

  6. 【豆科基因组】绿豆Mungbean, Vigna radiata基因组2014NC

    目录 来源 一.简介 二.结果 基因组组装 重复序列和转座子 基因组特征和基因注释 绿豆的驯化 豆科基因组复制历史 基于转录组分析的豇豆属形成 绿豆育种基因组资源 三.讨论 四.方法 材料 组装 SN ...

  7. [R报错] Kruskal-wallis test 所有组的层次都必需是有限的

    做了个两组间的Kruskal-wallis检验,出现如下错误: 对应的英文版本错误为: All group levels must be finite is.finite(data$type)一下果然 ...

  8. iptables_超解

    查询: -t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则,-L选项的意思是,列出规则,所以,上述命令的含义为列出filter表的所有规则 显示出了3条链INPUT链.FORWARD链 ...

  9. Flink 实践教程-进阶(2):复杂格式数据抽取

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  10. ArrayList总结及部分源码分析

    ArrayList源码阅读笔记 1. ArrayList继承的抽象类和实现的接口 ArrayList类实现的接口 List接口:里面定义了List集合的基本接口,ArrayList进行了实现 Rand ...