Other Parts Discussed in Thread: CC1310, Z-STACK
ccs无RTOS,调用FlashProgram实现OAD,返回04
工程是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 里了
主要问题是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