TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2642R: CC2642运行一段时间后进入无响应状态

Part Number:CC2642R

我的产品中使用了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的字节发生变化,并导致芯片自动进入无响应状态?

Kevin Qiu1:

更换的是高频晶振还是低频晶振,0x4A000是内部flash的:

The user application pictured above is responsible for the following:

Implementing the protocol stack specific implementation of the OAD transportFinding a suitable location in external flash for the image and storing its image header in the table.

,

Tao Wu:

更换的是高频48MHz晶振,晶振品牌型号没有改动,只是使用新生产批次的晶振,晶振指标也都正常。

检查了配置,确实0x48000-0x4BFFF是配置为内部SNV区域。如果程序并没有使用SNV的话,其内容为什么也会持续发生改变呢,什么情况下其内容会自动发生永久改动,并且改动进一步导致芯片进入无响应的状态呢?

芯片是否存在某类保护模式,例如检测到时钟、电源不稳定的话,触发这种保护机制,并永久禁止芯片运行程序?直到人为清除SNV中的记录,才能恢复正常?

,

Kevin Qiu1:

只是更换了晶振后就无响应,有没有测过频偏,测一下供电电压是否稳定

NV会在低电压是损坏

,

Tao Wu:

晶振在测试时,指标都是正常的

,

Tao Wu:

原因找到了,确实是由于SNV区域导致,并且发现了SDK中的一个设计问题。

SNV区域可能由于重启等原因,出现了错误数据。具体表现为:两个page的SVN,分别处于(PGNACT和PGXSRC)状态

在SDK(版本simplelink_cc13x2_26x2_sdk_3_40_00_02)文件nvocmp.c中

一旦遇到这种case,会直接执行while(1),将其修改后,不再出现芯片无响应问题

,

Kevin Qiu1:

感谢分享,这个问题在新的SDK中已经解决了,最新的SDK中没有上述代码

你也可以选择升级到最新的SDK来解决此问题

,

Tao Wu:

是的看了simplelink_cc13x2_26x2_sdk_5_20_00_52版本SDK,应该没有此问题。因此产品是两年前开发,所以还是用的老版本SDK。

谢谢您的支持和答复!

,

Kevin Qiu1:

好的

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R: CC2642运行一段时间后进入无响应状态
分享到: 更多 (0)