微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541 Flash 存储数据

CC2541 Flash 存储数据

时间:10-02 整理:3721RD 点击:

Hi All:

    使用场景:CC2541作为从设备,向手机发送所采集的数据。在CC2541未与手机连接时,CC2541会将获取的sensor数据存储在本地Flash中,待到与手机连接后,将数据发送至手机。

    通过查找资料,了解到可以使用osal_snv_write向Flash写入数据进行存储。但一直没看到有帖子明确指出使用这种方法最多可以存储多少的数据,Flash中可供APP存储数据的空间大小应如何计算?

谢谢!

yunlong,

这个完全取决于应用。

目前的情况是,能操作的NV flash的总共大小是2个 page, 每个page 大小2K,所以总共4K.

撇开一些什么绑定信息等等等等已经被系统占用的,应该还有个1K 到 2K,多点吧,具体我也没算过,你有兴趣可以看一下关于这些的代码,在每个工程里面都有的。

Hi Yan:

    非常感谢您的答复。

     112 726 bytes of CODE  memory
     35 bytes of DATA  memory (+ 73 absolute )
     6 272 bytes of XDATA memory
     194 bytes of IDATA memory
     8 bits  of BIT   memory
     487 bytes of CONST memory

     1. 上面是编译后.map中的信息,我选用的是256KB的CC2541, 从这里看,似乎整个project只用了100多KB的空间,剩余的那些空间可用于做NV存储使用吗?

     2. 如果可能需要存储接近100KB的数据,是否只能通过添加额外的Flash芯片解决

谢谢!

Hi:

   我的目的是想利用CC2541中剩余Flash的空间,存储sensor采集出来的数据。数据量会是几十KB。

   通过看一些文档,貌似256KB的CC2541会有剩余几十KB的Flash空间,但不知能不能用,也不是很清楚如何正确的使用。

   还请各位牛人指点。

谢谢!

Performing Flash Erase From Flash Memory
Note that while executing program code from within flash memory, when a flash erase or write operation is
initiated the CPU stalls, and program execution resumes from the next instruction when the flash controller
has completed the operation.
The following code example of how to erase one flash page in the CC2530 is given for use with the IAR
compiler:
#include <ioCC2530.h>
unsigned char erase_page_num = 3; /* page number to erase, here: flash page #3 */
/* Erase one flash page */
EA = 0; /* disable interrupts */
while (FCTL & 0x80); /* poll FCTL.BUSY and wait until flash controller is ready */
FADDRH = erase_page_num << 1; /* select the flash page via FADDRH[7:1] bits */
FCTL |= 0x01; /* set FCTL.ERASE bit to start page erase */
while (FCTL & 0x80); /* optional: wait until flash write has completed (~20 ms) */
EA = 1; /* enable interrupts */
6.3.2 Different Flash Page Size on CC2533
The flash page size has been reduced from 2 KB (2048 bytes) on CC2530, CC2531, CC2540, and
CC2541 to 1 KB (1024 bytes) on CC2533. When performing page-erase operations on the flash memory,
the page to be erased is addressed with the register bits FADDRH[6:0] on CC2533 as opposed to
FADDRH[7:1] on CC2530, CC2531, CC2540, and CC2541. The page-lock bits are still placed in the
upper 16 bytes of the last accessible flash page.

yunlong,

256KB 剩下的几十K,这些没有被划分到NV 里面去,所以不能用来存放客户数据。

由于CC254x 具有OTA 更新固件功能,剩下的flash 也要用于更新新的固件。

应该可以的!按页操作就可以了。

 

Hi Yan:

    OK,谢谢答复。

    由于接触CC2541不久,还有两个问题再麻烦您确认一下。

    1. 如果不使用OTA功能,这部分的Flash是否可以直接使用,BLE STACK的代码是否有对这些空间做额外的限制,如,只能用作OTA使用,不能用做其他功能。

        如果可以使用,我们自己添加相关代码,是否可能会对系统的稳定性造成影响。

    2. 对于存储 几十KB 数据的需求,是否最好是通过外接Flash解决

谢谢!

感谢大秦正声, 先收下,学习学习

Hi Yan:

     对于有几十KB数据存储的需求,TI如何建议,是否是最好使用外部的Flash

谢谢!

数据读写次数很多的话建议用外部eeprom!

内部flash 写几万次循环是没问题的

亲爱的Yan,

  1 我也是计划把100k  sensor数据保存到256k的flash,不知放到哪个区域?

  2  256k分为8个bank,每个bank 32k字节,bank7 (_BANK7_END 0003E7FF ------_BANK7_START 00038000)不到32k,剩余5k左右。

  3 datasheet P26,提示256k的flash可以map到XDATA的upper 32k,这个32k可以存储常量数据,如何理解

  4 您说的4k在哪里 

亲爱的Yan,

  1 我也是计划把100k  sensor数据保存到256k的flash,不知放到哪个区域?

  2  256k分为8个bank,每个bank 32k字节,bank7 (_BANK7_END 0003E7FF ------_BANK7_START 00038000)不到32k,剩余5k左右。

  3 datasheet P26,提示256k的flash可以map到XDATA的upper 32k,这个32k可以存储常量数据,如何理解

  4 您说的4k在哪里 

可以修改\Projects\ble\common\cc2540目录下的xcl文件来 扩充SNV的存储空间,使用SNV管理数据。

您能发把您的保存数据部分代码 发到我wanghgsz@163.com  x谢谢

根据数据手册,cc254x实际上只有64kb的内部flash(包括32k的XBANK),而256K的是通过映射到XBANK的(bank0—bank7)来实现,具体的内容我并不是很清楚,刚接cc2540触不久,,,我就感觉很奇怪,如果我真的有100kb的数据,它到底是存储在哪里的,能给出解答吗?

您好,您的问题已经解决了吗?我现在也碰到了这个问题,不知道怎么解决,您可以把代码或者方法共享给我吗?我的邮箱1135687071@qq.com 。谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top