TMS570ls3137 之FEE使用
官方手册上写关于FEE,TMS570LS3137中的片上flash分为三部分,如下图1所示
我们所用的FEE功能只适用于BANK7,因为这一块是TI采用的特殊工艺65nmflash,我们可以以任意字节进行读写。
这个东西的配置比较简单直接在HCG中进行配置,唯一需要注意的是,我们需要从官方下载F021FLASH-libary这个库文件,这个是免费的下载地址如下:
http://www.ti.com/tool/f021flashapi
这里面有源代码,和一些库文件,我们只需要选择其中一个库文件即可。
接下来我们进行工程演示:
1.HCG配置
配置SCI是为了串口打印,然后配置FEE。
这里我们就是用默认的180Mhz操作频率,
Number of FEE Blocks我们选择2个,选择完成有下面会自动打钩两个,我们可以在block size中设置大小,
这个设置的大小就是我们以多少字节进行写入,我选择的是20,和8字节写入。
这一块实验中还没有涉及到,我会在下个实验中继续深入使用,所以我们就是用默认的配置。
HCG就配置完成了,生成代码。
2.建立CCS工程,将HCG配置的代码进行导入。
会发现导入完成后,编译会报错,提示我们F021.h文件没有定义。这时候我们就需要将F021flash-libary移植进去,
官网下载完成后我们将C,H文件导入到CCS中,如下图所示。
关于上面的lib文件,我是选择其中的一个lib,具体的使用那个得看用户手册,上面有详细解释。
以上配置完成后,我导入main代码,如下:
int main(void)
{
/* USER CODE BEGIN (3) */unsigned int BlockNumber;unsigned int BlockOffset, Length;unsigned char *Read_Ptr=read_data;unsigned int loop;unsigned int set_w_num = 0;for(loop=0;loop<100;loop++)SpecialRamBlock[loop] = loop;TI_Fee_Init();sciInit();printf("FEE Init complete\r\n");do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0 );}while(Status!=IDLE);BlockNumber=0x1;TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[0]);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);TI_Fee_WriteSync(BlockNumber, &SpecialRamBlock[0]);set_w_num = TI_FeeInternal_GetBlockIndex(BlockNumber);set_w_num = TI_FeeInternal_GetBlockSize(set_w_num)-TI_FEE_BLOCK_OVERHEAD;printf("set_w_num is %d\r\n",set_w_num);BlockNumber=0x2;TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[set_w_num]);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);TI_Fee_WriteSync(BlockNumber, &SpecialRamBlock[set_w_num]);set_w_num = TI_FeeInternal_GetBlockIndex(BlockNumber);set_w_num = TI_FeeInternal_GetBlockSize(set_w_num)-TI_FEE_BLOCK_OVERHEAD;printf("set_w_num2 is %d\r\n",set_w_num);BlockOffset = 0;Length = 0xFFFF;oResult=TI_Fee_Read(BlockNumber,BlockOffset,Read_Ptr,Length);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);for(loop=0;loop<100;loop++){printf("%d\r\n",*Read_Ptr);Read_Ptr++;}TI_Fee_Format(0xA5A5A5A5U);while(1);
/* USER CODE END */return 0;
}
实现的效果图如下:
通过以上结果发现了问题,我开始的意愿是打印0到27的数字,为什么只打印了20-27,我做了一下分析,
结果发现是我的打印出现问题。
这里应该是需要把两块的block都打印出来,我做了如下改动。
int main(void)
{
/* USER CODE BEGIN (3) */unsigned int BlockNumber;unsigned int BlockOffset, Length;unsigned char *Read_Ptr=read_data;unsigned char *Read_Ptr2=read_data2;unsigned int loop;unsigned int index = 0;unsigned int set_w_num = 0;TI_Fee_AddressType cur_address = 0;TI_Fee_AddressType next_address = 0;for(loop=0;loop<100;loop++)SpecialRamBlock[loop] = loop;TI_Fee_Init();sciInit();printf("FEE Init complete\r\n");do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0 );}while(Status!=IDLE);BlockNumber=0x1;TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[0]);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);//TI_Fee_WriteSync(BlockNumber, &SpecialRamBlock[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);printf("index is %d,set_w_num is %d\r\n",index,set_w_num);BlockOffset = 0;Length = 20;oResult=TI_Fee_Read(BlockNumber,BlockOffset,Read_Ptr,Length);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);printf("block 1:");for(loop=0;loop<20;loop++){printf("%d,",*Read_Ptr);Read_Ptr++;}printf("\r\n");BlockNumber=0x2;TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[set_w_num]);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);TI_Fee_WriteSync(BlockNumber, &SpecialRamBlock[set_w_num]);index = TI_FeeInternal_GetBlockIndex(BlockNumber);set_w_num = TI_FeeInternal_GetBlockSize(index)-TI_FEE_BLOCK_OVERHEAD;cur_address = TI_FeeInternal_GetCurrentBlockAddress(BlockNumber,0,index);printf("index %d,set_w_num2 is %d\r\n",index,set_w_num);BlockOffset = 0;Length = 8;oResult=TI_Fee_Read(BlockNumber,BlockOffset,Read_Ptr2,Length);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);printf("block 2:");for(loop=0;loop<8;loop++){printf("%d,",*Read_Ptr2);Read_Ptr2++;}printf("\r\n");BlockNumber=0x1;BlockOffset = 0;Length = 20;oResult=TI_Fee_Read(BlockNumber,BlockOffset,Read_Ptr,Length);do{TI_Fee_MainFunction();delay();Status=TI_Fee_GetStatus(0);}while(Status!=IDLE);printf("block 1:");for(loop=0;loop<20;loop++){printf("%d,",*Read_Ptr);Read_Ptr++;}printf("\r\n");TI_Fee_Format(0xA5A5A5A5U); //格式化就是将整个bank7进行格式化。while(1);
/* USER CODE END */return 0;
}
打印结果如下所示:
通过这个例子,应该可以理解如何使用block。就是将一整块的sector化为为若干个block,然后在这些block中进行读写,
已达到存储的目的。
工程源码详见:https://download.csdn.net/download/weixin_42259397/12497297
TMS570ls3137 之FEE使用相关推荐
- leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee | 714. 买卖股票的佳最时机含手续费(递归->傻缓存->dp)
题目 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 题解 经典的 暴力递归 - ...
- Magento Add Fee or Discount to Order Totals
2019独角兽企业重金招聘Python工程师标准>>> In this tutorial, we will see how to add new line item to magen ...
- 【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
题目如下: Your are given an array of integers prices, for which the i-th element is the price of a given ...
- 【DP + 卖股票】LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee
LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee Solution1: 参考网址:http://www.cnblog ...
- 以太币转帐速度_燃起来吧!一文带你读懂以太坊网络中的Gas、Gas Fee、Gas Price、Gas...
曾用过区块链相关应用,不管是交易所.DApp 或是虚拟货币钱包的人,一定都听过矿工费(Gas Fee) 这个词.它是当你要在区块链网路发起一笔交易时,所要支付给矿工的一笔手续费.其实很容易理解,就好比 ...
- 【文献阅读】Commission Fee is not Enough: A Hierarchical Reinforced Framework for Portfolio Management
1 解决了什么问题? 现有的投资组合管理方法有一个缺点,它们通常假设每次对资产的重新分配都可以立即完成,从而忽略了价格滑点(price slippage)作为交易成本的一部分. 价格滑点:操盘手期望为 ...
- amazon - sellercentral 之 sellercentral report - long term storage fee report
目录 1.Business and Data Method 2.Report Field Definitions 3.FBA Small and Light Program 4.Long Term S ...
- amazon - sellercentral 之 sellercentral report - monthly storage fee report
目录 1.Report Field Definitions 2.Business and Data Method 3.Monthly inventory storage fee charge logi ...
- AUTOSAR FEE 评估策略分析
在前面提到的基于相同的Mcu. 可能有不同的供应商提供Fee模块(或者可以给Fee Suppiler提要求),他们的对于换页机制,存储结构,读写速度等相关功能可能存在差异 因此在选择Fee Suppl ...
最新文章
- Squid 反向代理服务器配置
- 一个需要原创精神的年代
- context of your framing
- C语言结构体字节对齐
- Leaflet笔记-Leaflet与echarts结合使用(在地图上绘图表)
- Bootstrap表单的可选布局
- 拍牌人数陡增6万人,中标率降至7.8%,我们错过了拍沪牌的黄金期
- Internet 选项在哪
- 大数据分析与应用(中级) 数据挖掘概念及流程
- Python 自然语言处理笔记(五)——信息检索系统,基于Lucene实现
- 2023跨境出海指南:韩国网红营销白皮书
- 我想起个公司名字,招投标行业的,快速搜索标讯的,科技公司,蓝色logo的
- 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?
- 【谷歌浏览器打开网页报错】
- 你刚才在淘宝上买了一件东西
- Voronoi图与路径规划
- python 顺丰快递分拣小程序作业结果
- 微信报名系统于商家,于用户有何作用?
- certutil程序生成MD5
- android实现底部弹出框与软键盘冲突(全面屏虚拟键适配)
热门文章
- mmdetection训练自己的COCO数据集
- resetlogs,noresetlogs,完全恢复,不完全恢复
- 模拟炒股服务器响应错误,模拟炒股常见问题
- outlook服务器恢复用户邮件,如何恢复Outlook中永久删除的电子邮件
- python实现android应用稳定性测试
- [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解
- 手机删除的视频怎么恢复?即刻扫描,快速恢复
- Doo Prime 为泰国 SOS 儿童村送温暖,公益有起点爱心无疆界
- DCOS之监控技术选型(中)
- 强化学习 --- 概述