我们一直在构建基于 CC2541的器件的小批量(一次10到50次)、在成功构建数百个器件后、我在从2个器件上的闪存读取值时遇到了问题。
下面是背景:我们存储一个从闪存地址0x86开始的小结构。 它位于中断矢量表的顶部、长度为44字节。 它用于控制器件的各种间隔和功能。 这些设置与固件代码一起进行编程、作为我们编程过程的一部分。 我们在使用正确设置刷新.hex 文件之前对其进行修改。
问题在于:一个值无法从2个有问题的器件上的闪存中正确读取。 所有其他设置(就我所知)均已正确读取。 但有一个问题。 只要编程后器件仍通电、有问题的器件就会从闪存读取正确的值。 循环通电将导致使用一些其他(随机)值。 它只是一种设置。 所有其他设置均已正确加载。 编程后需要重启电源才能导致设置损坏。
这是位于闪存地址0x86的结构。
typedef struct { uint16_t setting1、 uint16_t setting2、 uint16_t setting3、 uint16_t setting4、 uint16_t setting5、 uint16_t setting6、 uint16_t setting7、 uint32_t setting8、 uint16_t setting9、 uint16_t setting10、 uint16_t setting11、 uint16_t setting12、 uint16_t setting13、 uint16_t setting14、 uint16_t setting15、 uint16_t setting16、 uint32_t setting17、 uint32_t setting18 }设置 T;
调解8是有问题的。 它从闪存地址0x102开始、长度为4字节。 我甚至通过 TI 的闪存编程器读回闪存内容、闪存中存储的内容与下载到 CC2541的内容相匹配。 存储在闪存中的值没有问题。 我尝试禁用缓存(设置 FCTL = 0x00),但这没有解决问题。
重申一下、我们已经构建了数百个这些器件、所有器件都运行相同的固件、但2个器件无法正确加载闪存中的值。