请问如何写和读flash,
HalFlashErase(0x40);
HalFlashWrite(0x8000, buff, 30);
HalFlashRead(0x00, 0x0000, buff, 30);
为什么读出来的与写入的不一样?
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.
请问如何写和读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);
}
我这样直接测试 开发板的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");
}