微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540 flash 写与读

CC2540 flash 写与读

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

请问如何写和读flash,

HalFlashErase(0x40);
HalFlashWrite(0x8000, buff, 30);
HalFlashRead(0x00, 0x0000, buff, 30);

为什么读出来的与写入的不一样?

Hi mo mo,

首先, 你写的地址0x8000跟你擦除的地址是对应的, 正确. (0x40 * 0x0800) / 4 = 0x8000

但你的HalFlashRead(0x00, 0x0000, buff, 30)第一个参数, page页数跟你写的HalFlashWrite(0x8000, buff, 30) 不一样, 应该是0x40, 跟HalFlashErase(0x40)里一样.

另外, 很重要的一点, 在用 HalFlashErase() 擦除的时候, 这个函数会立即返回, 而实际上flash的擦除工作仍在进行. 所以请用下面代码加个延迟:

while( FCTL & 0x80 ); // wait for erase to complete

所以请试一下如下代码:

{

HalFlashErase(0x40);

while( FCTL & 0x80 ); // wait for erase to complete


HalFlashWrite(0x8000, buff, 30);
HalFlashRead(0x40, 0x0000, buff, 30);

}

为了更好地促进我们论坛的发展,

如果提供的方法有效, 希望请把问题设为已解决, 并推荐最佳答案 :)

非常感谢!

能具体介绍下这几个函数及FCTL各参数么,这个是读写内部flash吧?cc2540的蓝牙序列号是存在哪里的?

你要的这些信息pdf资料里面都有

HalFlashErase(0x10);
delays(10);
while( FCTL & 0x80 ); // wait for erase to complete
HalFlashWrite(0x8000,arr,6);
delays(10);
HalFlashRead(0x10,0x0000,arrr,6);

你好,我想请问下为什么我这样读写flash没不行呢,读的跟写的不一样?

Yan

请问一下read的page和write的addr应该怎样换算,好像搞不清这个关系。还有和nv那个id表的value怎么换算。谢谢!

假如读的是第10页,那么写的时候的地址就是10*2048/4 

我这样直接测试  开发板的LCD和串口都没有任何显示,提示IDATA overflow,请问如何解决

void testflash(void)
{
uint8 newValueBuf[20]={1,2,3,4,5,6,7,8,9};
uint8 newBuf[20]={0};
uint8 wrt[8] = {'1','2','3','4','5','6','7','8'};
uint8 page = 0x40;
uint16 addr = (uint16)page << 9;
HalFlashErase(page);

SerialPrintString("erase.....\r\n");
while( FCTL & 0x80 ); // wait for erase to complete

HalFlashWrite(addr, newValueBuf, 20);
HalFlashRead(page, 0x0000, newBuf, 20);
sbpSerialAppWrite (newBuf, 20);
SerialPrintString("\r\n");
}

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

网站地图

Top