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芯片Flash写

Other Parts Discussed in Thread: CC2530, Z-STACK

在对CC2530芯片进行Flash写步骤中,有这样的描述:

1、设置FADDRH:FADDRL为起始地址(这是18位字节地址的16个最高有效位)。

请问这个地址设置后是否能自增,还是在编程4个字节后重新设置下一个地址呢?

4、在20us内对FWDATA进行四次写操作。

请问四次写操作具体是如何写的?

  • z-stack协议附带。如果是做应用,建议直接使用这个函数,快速满足应用需求

    /**************************************************************************************************

    * @fn          HalFlashWrite

    *

    * @brief       This function writes 'cnt' bytes to the internal flash.

    *

    * input parameters

    *

    * @param       addr - Valid HAL flash write address: actual addr / 4 and quad-aligned.

    * @param       buf - Valid buffer space at least as big as 'cnt' X 4.

    * @param       cnt - Number of 4-byte blocks to write.

    *

    * output parameters

    *

    * None.

    *

    * @return      None.

    **************************************************************************************************

    */

    void HalFlashWrite(uint16 addr, uint8 *buf, uint16 cnt)

    {

    #if (defined HAL_DMA) && (HAL_DMA == TRUE)

     halDMADesc_t *ch = HAL_NV_DMA_GET_DESC();

     HAL_DMA_SET_SOURCE(ch, buf);

     HAL_DMA_SET_DEST(ch, &FWDATA);

     HAL_DMA_SET_VLEN(ch, HAL_DMA_VLEN_USE_LEN);

     HAL_DMA_SET_LEN(ch, (cnt * HAL_FLASH_WORD_SIZE));

     HAL_DMA_SET_WORD_SIZE(ch, HAL_DMA_WORDSIZE_BYTE);

     HAL_DMA_SET_TRIG_MODE(ch, HAL_DMA_TMODE_SINGLE);

     HAL_DMA_SET_TRIG_SRC(ch, HAL_DMA_TRIG_FLASH);

     HAL_DMA_SET_SRC_INC(ch, HAL_DMA_SRCINC_1);

     HAL_DMA_SET_DST_INC(ch, HAL_DMA_DSTINC_0);

     // The DMA is to be polled and shall not issue an IRQ upon completion.

     HAL_DMA_SET_IRQ(ch, HAL_DMA_IRQMASK_DISABLE);

     HAL_DMA_SET_M8( ch, HAL_DMA_M8_USE_8_BITS);

     HAL_DMA_SET_PRIORITY(ch, HAL_DMA_PRI_HIGH);

     HAL_DMA_CLEAR_IRQ(HAL_NV_DMA_CH);

     HAL_DMA_ARM_CH(HAL_NV_DMA_CH);

     FADDRL = (uint8)addr;

     FADDRH = (uint8)(addr >> 8);

     FCTL |= 0x02;         // Trigger the DMA writes.

     while (FCTL & 0x80);  // Wait until writing is done.

    #endif

    }

  • 请问CC2531F256的256KBFlash中有哪些Bank中的哪些范围是不能读写操作的?256KB最后1KB(按空间编排地址:3FC00~3FFFF)有什么特殊用途吗?能进行正常的读写操作吗?

  • 所有bank都能读写,是否有特殊用途是跟你的应用有关的。如果你是使用IAR,请了解xcl文件的一些定义

    -D_ZIGNV_ADDRESS_SPACE_START=(((_NR_OF_BANKS+1)*_FIRST_BANK_ADDR)-0x3800)

    -D_ZIGNV_ADDRESS_SPACE_END=(_ZIGNV_ADDRESS_SPACE_START+0x2FFF)

    -Z(CODE)ZIGNV_ADDRESS_SPACE=_ZIGNV_ADDRESS_SPACE_START-_ZIGNV_ADDRESS_SPACE_END

    那这段空间最好是不要FLASH操作的