This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1310 存储少量数据

Other Parts Discussed in Thread: 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
    }

    附件里面是代码

    flash.cpp
  • 我刚才找到原因在哪了,代码中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页选择跳过。这样就留出了单独的一

    个数据区域,不会受到刷写程序的影响。这样达到了数据存储的功能。