LAUNCHXL-CC1310: 调用FlashProgram返回04

Part Number: LAUNCHXL-CC1310
Other Parts Discussed in Thread: CC1310, Z-STACK

ccs无RTOS,调用FlashProgram实现OAD,返回04

  • 您好

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 你能提供更多信息吗?

    你运行的是什么SDK?
    你想闪现什么项目?
    FlashProgram在哪里调用?

  • 工程是NO RTOS工程,擦除和写flash 是copy RTOS例程...\simplelink_cc13x0_sdk_4_20_02_07__win\simplelink_cc13x0_sdk_4_20_02_07\examples\rtos\CC1310_LAUNCHXL\easylink\rfWsnNodeIntFlashOadClient里面的oad_storage.c里面的void OADStorage_imgBlockWrite(uint16_t blockNum, uint8_t *pBlockData)函数,其中void OADTarget_writeFlash(uint8_t page, uint32_t offset, uint8_t *pBuf,
    uint16_t len)做如下更改:

    void OADTarget_writeFlash(uint8_t page, uint32_t offset, uint8_t *pBuf,
    uint16_t len)
    {
    unsigned int key;
    uint8_t cacheState;
    uint8_t writeIncrement;
    uint8_t status;

    cacheState = OADTarget_disableCache();

    while (len)
    {
    if (len > MAX_WRITE_INCREMENT)
    {
    writeIncrement = MAX_WRITE_INCREMENT;
    }
    else
    {
    writeIncrement = len;
    }
    //key = Hwi_disable();
    IntMasterDisable(); //njc

    status = FlashProgram(pBuf, (uint32_t)FLASH_ADDRESS(page, offset), writeIncrement);
    // Hwi_restore(key);
    IntMasterEnable(); //njc

    if (status != 0)
    {
    while(1); //Error writing to flash
    }
    else
    {
    len -= writeIncrement;
    pBuf += writeIncrement;
    offset += writeIncrement;
    }
    }

    OADTarget_enableCache(cacheState);
    }

    //njc标注的是我修改的,原先的Hwi_disable()和Hwi_restore()应该适用与RTOS,不适用于NO RTOS,报错,所以去掉了

    调用和,status = FlashProgram返回04,所以一直在while 里了

  • 调用后,status = FlashProgram返回04,所以一直在while 里了

  • 主要问题是Z-Stack mesh 1.0协调器不安全,这主要通过APS报头帧控制的“安全启用”位来表示。TI不建议继续开发这些过时的Zigbee协议解决方案。有一些为F2设备创建suggestions for creating backwards compatibility f,但是TI没有很好地建立或维护这些建议。请注意,当TCLK更新交换被禁用时,F2设备仍然可以支持Z-Stack HA 1.2.2a。

  • 据我所知,你正在使用下面的函数,它在FlashProgram中返回04

    void OADTarget_writeFlash(uint8_t page, uint32_t offset, uint8_t *pBuf,
                              uint16_t len)
    {
      unsigned int key;
      uint8_t cacheState;
      uint8_t writeIncrement;
      uint8_t status;
    
      cacheState = OADTarget_disableCache();
    
      while (len)
      {
        if (len > MAX_WRITE_INCREMENT)
        {
          writeIncrement = MAX_WRITE_INCREMENT; 
        }
        else 
        { 
          writeIncrement = len;
        }
        key = Hwi_disable();
        status = FlashProgram(pBuf, (uint32_t)FLASH_ADDRESS(page, offset), writeIncrement);
        Hwi_restore(key);
    
        if (status != 0)
        {
          while(1); //Error writing to flash 
        }
        else
        { 
          len -= writeIncrement;
          pBuf += writeIncrement; 
          offset += writeIncrement; 
        }
      }
    
      OADTarget_enableCache(cacheState);
    }

    错误似乎是FAPI _状态_ FSM _错误(操作失败)。

    你想写信到什么地址?能否分享一下你是如何调用oad target _ write flash(uint 8 _ t page,uint32_t offset,uint8_t *pBuf,uint 16 _ t len);

    你能试着从uint 32 _ t flash protection get(uint 32 _ t ui32 sector address)中读取并检查结果代码吗?https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_02_22/exports/tirtos_full_2_14_02_22/products/cc13xxware_2_00_04_16084/doc/driverlib/group__flash__api.html#gaca0d39806f2d9bec6a341712d242647d