大家好!请教一个关于用CC2640读写flash问题。
我用osal_snv_write(osalSnvId_t id, osalSnvLen_t len, void *pBuf)可以写入数据,也可以用uint8 osal_snv_read(osalSnvId_t id, osalSnvLen_t len, void *pBuf)正确读出。例如:
char buffer[20];
osal_snv_write(START_ID, 16, "Hello the world!");
osal_snv_read(START_ID, 16, buffer);
我的问题是,如果再次写入flash新的内容,读出来的仍然是原来的内容,flash不能被更细。例如:
osal_snv_write(START_ID, 16, "Greetings to ya!");
osal_snv_read(START_ID, 16, buffer);
读出来的内容还是"Hello the world!"。我怀疑是否在重新写入之前需要erase,但是没有找到osal_snv_erase()函数,手册中也没有看到怎样能够erase。我相信flash是能够重写的。请教各位大神有什么办法?多谢!
da qin zheng sheng:
对的,需要按页擦除的。
Viki Shi:
CC26XX没有SNV erase函数,你用osal_snv_write重写的时候就会覆盖原先的内容。请问你的重写操作有返回报错信息吗?
Eva Lo:
請問解決了嗎?
我使用Flash也遇到類似的問題…
但我的osal_snv_write/ read 無法使用,會卡程序…我是使用下面的函數去做的
uint32_t flash_addr = 0x00014000;
uint8 page = 20;
HalFlashErase(page) // erase flash
HalFlashWrite(flash_addr, (uint8*)&wbuf, 1); //
HWREG(flash_addr);
但是HalFlashErase() 無作用..寫完一次之後就不能再次寫入了
都是第一次寫入的值