CC1310 存储少量数据
Hi,all
最近需要永久存储一些网络的基本配置数据在CC1310中,存放的数据量少(几十个字节左右),
1.最好的解决方法是不是存储在flash中?
2.如果存储在flash中,是不是需要在flash中单独开辟一个存储数据的区域,剩余的区域存放代码?
3.我在contiki编译生成的map文件中看到有一块内存是FLASH_CCFG占88个字节,在flash的最后区域。这块区域可以直接用来存放数据吗?
map文件内容
Memory Configuration
Name Origin Length Attributes
FLASH 0x00000000 0x0001ffa8 xr
FLASH_CCFG 0x0001ffa8 0x00000058 xr
SRAM 0x20000000 0x00005000 xrw
GPRAM 0x11000000 0x00002000 xrw
*default* 0x00000000 0xffffffff
1.是的。放在flash比较好
2和3 的问题在论坛上有人做过了,其中一个参考是:
http://www.deyisupport.com/question_answer/wireless_connectivity/f/45/t/121310.aspx
非常感谢你的回答。是的,这些贴子我已经看过了,也在rtos上实现了,但是无法对flash后面(124k--128k)的内容进行写操作,也就是后面的4kb不能够写数据
刚才看了手册CCFG一章,88字节的空间不应该修改。我想尽可能的扩大程序的存储,尽量让数据存在后面。
是不是需要修改SECTION的配置?是不是需要在flash中开辟新的区域来存放数据?
SECTIONS
{
.text : > FLASH
.const : > FLASH
.constdata : > FLASH
.rodata : > FLASH
.cinit : > FLASH
.pinit : > FLASH
.init_array : > FLASH
.emb_text : > FLASH
.ccfg : > FLASH (HIGH)
#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 15009000
.TI.ramfunc : {} load=FLASH, run=SRAM, table(BINIT)
#endif
#endif
.data : > SRAM
.bss : > SRAM
.sysmem : > SRAM
.stack : > SRAM (HIGH)
.nonretenvar : > SRAM
}
附件里面是代码
我刚才找到原因在哪了,代码中FlashSectorErase()函数的操作地址只允许在000000------0x001f000
嗨,
调用FlashProgram函数能够将数据写入,但是下次刷写不同的程序时又会恢复到默认的FF值,
请问我该调用怎么样的API,有需要哪样的设置才能够有将程序和数据分开存放,这样下次烧写程序时就不会改变已经配置好的数据?
因为flash 的擦除和写入都是以page(4K)为单位的,如果程序烧入和你存的数据在同一个page,那肯定会把你存的数据覆盖掉,你可以尝试从最远离code的地址存一个数据,两个数据。。。。慢慢存进去,看什么时候数据被擦除
我试过在page31 0x001ff00处存放8byte的数据,但还是被擦除了,不清楚是什么原因
FLASH orign=0x00000000 length=0x0001f000
在page1 0x00000000 开始存放8byte的数据试试看
我知道怎么解决了,我的想法是先在contiki/cc26xx-cc13xx的cc26xx.ld文件中定义FLASH(RX):ORIDGIN =0x00000000,LENGTH=0x0001F000
这样保证程序都映射到这块区域。然后我在SmartRF Flash Programmer 2中设置只擦除特殊的页0-30,剩下的第31页选择跳过。这样就留出了单独的一
个数据区域,不会受到刷写程序的影响。这样达到了数据存储的功能。