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.

关于cc2530 HalFlashWrite 的地址范围问题

Other Parts Discussed in Thread: CC2530, Z-STACK

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.

谢谢!

  • 你好,

    关于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

  • 谢谢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 向上取整等于0x101
    HalFlashRead(??, 0x0000, buff, 1);

    }

     请尽快回复,十分感谢!!!

  • 请尽快回复,谢谢!

  • 你好,

    在使用osal_nv_write根据NV ID里面会根据ID去计算该item位于flash的实际位置,然后再调用HalFlashRead函数。