关于CC2530 FLASH操作的问题,是否需要HalFlashErase()先,才能HALFlashWrite()?
时间:10-02
整理:3721RD
点击:
TI的工程师,
在进行CC2530的flash读写操作的时候,是否需要先HalFlashErase()先,才能HALFlashWrite()?
看网上的资料,说需要将Flash先初始化才能写操作,有一个HALFlashInit()函数,但是我找了 hal_flash.c里面都没有,其他也没有这个函数。
不知道是不是版本的问题,我的协议栈版本是:2.5.1a。
目前采用 先 HalFlashErase();然后HALDMAINIT()是可以正常写的,也能正常读。
但是因为我每次HALFlashWrite都是写4个字节,而存储的数据可能有30+字节,每次写之前都HalFlashErase()一下不免需要重新全部写入。
请问是否有更好的办法?等待回复。谢谢。
flash的规则是,初始化时都是0xff, 写的时候你可以把1改为0,但是没法再从0改到1,需要重新擦除。而擦除需要按页擦除也就是2K一擦。
所以,使用协议栈的osal_nv.c 对flash有很好的管理。建议使用osal_nv的flash操作接口。代码都可见,自行研究。
擦除按一页进行的!
谢谢TY,还有一个疑问。
因为需要初始化,如果系统在写flash的时候,先初始化了一个page,刚好执行写入的时候,突然断电,就会产生该页flash数据丢失。
在考虑是否可以用两个page做备份:比如119页用来实际存储,120页用备份。