TI工程师您好,
我现在想用HalFlashWrite写入指定地址,最好是在NV里,不知道那些位置是可用的呢?芯片是CC2530 F256
还有 HalFlashWrite 的几个参数都不是很明白
addr- actual addr / 4 and quad-aligned. 这个参数和HalFlashErase的page的关系是什么样的?
下面的两个参数,如果我只是要写一个 1 进去,那buf是否设置为4字节长度的数值?比如一个long int?还是一个4字节的数组?
buf – Valid buffer space at least as big as 'cnt' X 4.
cnt – Number of 4-byte blocks to write.
谢谢!
VV:
你好,
关于NV里面哪些用户可以用,哪些协议栈已经用掉,请参考
C:\Texas Instruments\Z-Stack Home 1.2.0\Documents\API\OSAL API.pdf 第10节
HalFlashWrite函数中,除以4,是因为CC2530 Flash写操作必须是一次4个字节的,所以要除以4. 擦写的话,必须是一个page整体擦掉。
因为一次写4个字节,所以最小单位要实际的数除以4
Shanshan Ouyang:
回复 VV:
谢谢VV,
但OSAL API 里面给的值是给 NV item ID的,之前我有问过你这个ID是否可以决定写入的实际地址,你说不行。那为什么在这里又可以了呢?
按照你的说法,0x0401-0x0FFF是可用的, 我试着按照你说的写了对0x0401的读写操作,不知是否正确:
{
uint8 buff[4] = {0x00, 0x00, 0x00, 0x01}
HalFlashErase(??); // page该如何计算?
while( FCTL & 0x80 ); // wait for erase to complete
HalFlashWrite(0x0101, buff, 1); // 0x401/4 向上取整等于0x101HalFlashRead(??, 0x0000, buff, 1);
}
请尽快回复,十分感谢!!!
Shanshan Ouyang:
回复 VV:
请尽快回复,谢谢!
VV:
回复 Shanshan Ouyang:
你好,
在使用osal_nv_write根据NV ID里面会根据ID去计算该item位于flash的实际位置,然后再调用HalFlashRead函数。