我的产品中使用了CC2642,生产了几万套产品运行良好。最近一个批次由于更换了晶振,出现了一些奇怪的问题:大约10%的产品在使用一段时间(几小时到几天不等)后,不再工作。既无蓝牙信号,也无法打印串口信息,IO管脚也没有任何变化,犹如死机一般。或者也可以认为进入了某种自我保护状态。我暂且称之为无响应状态。
这种无响应状态并非是普通的程序异常,因为无论使用硬件复位管脚,或是完全断电,都无法使其恢复正常工作。
但是只要重新下载一次固件(固件与生产时完全相同),就可以重新恢复正常工作。
进一步,在无响应状态下,通过Flash Programmer2读取CC2642内部Flash中的程序,发现程序是完整的,与下载的固件程序比较,数据一致。
除了0x48000-0x4A0000区域出现了一些奇怪的数据,在我原来下载的固件hex中并没有对这些地址写入任何数据。
更进一步,我发现关键的地方,是在0x4A000地址的一个字节。这个字节在正常工作的芯片中,读取的值是0xFE;而在无响应状态下,读取的值是0x70
当我使用Flash Programmer2将这个字节的值从0x70修改为0xFE,芯片立刻恢复了正常工作;而如果从0xFE修改为0x70,芯片立刻进入无响应状态。
为了排除硬件设计和固件设计的差异,我使用TI评估板CC26X2R1_LAUNCHXL,烧录了SDK中的例程程序simple_peripheral_oad_offchip
我同样在0x4A0000看到了这个0xFE字节,而将其修改成0x70时,同样将芯片置为了无响应状态。
我的问题是:
1. 在内部Flash的0x48000-0x4A000这个区域的数据是做什么用的,并没有在任何资料中找到说明,尤其是位于0x4A000的这个字节的作用是什么?
2. 在什么情况下,会导致位于0x4A000的字节发生变化,并导致芯片自动进入无响应状态?


