求救各位大神, 目前我在使用MSP430F169遇到一个非常奇怪的问题: MSP430F169程序莫名其妙丢失!!!!!! 我在设计开发时一直很正常,但是产品发到客户那边用了2,3个月,半年或1年这样子, 有一小部分机器就不工作了, 返回检测发现Flash程序有些全部变成FF了, 也有些程序段被改写了(基本上排除客户改写和存储程序),把返回产品重新烧录又OK, 非常奇怪!!!!!! 我原来以为是进入自己升级模式擦除flash程序,后面我们干脆把自定义升级模式也取消,直接BSL烧录, 但是问题依旧! 产品出去后, 100台中总有2~3台又出现同样程序丢失问题, 难道真如网上很多遇到那样, 我们产品进入BSL模式,自动改写程序???????
HG:
你们的板子一般用在什么场合?噪声大么?有没有进入BSL的条件,要一定的时序啊。
andy jiang1:
回复 HG:
谢谢HG, 我们产品一般医院环境使用, 我的应用部分应该与外部也有隔离电路的。与外部沟通只有电源,地,RX,TX,但是这个引脚都是通过光耦隔离。 目前我们复位电路是采样RC方式, R=100K,C=0.1uF; TCK,TDO,TDI都是悬空, P1.1和P2.2也是悬空的。 但是我们真想不清楚还有什么地方会导致程序莫名其妙被擦除或改写!!!
andy jiang1:
回复 HG:
我现在也在尝试不同测试方法想复现客户遇到程序丢失, 但是就是不能复现。 可能客户隔三差五又投诉我们, 请问TI或各位网上大神有遇到我们类似问题和现象?能赐给小弟们一些解决方案吗?
灰小子:
回复 andy jiang1:
一般程序跑飞的时候,常会遇到这种情况。你分析一下代码,在长期运行之后,有没有堆栈溢出、数组溢出等的可能性
andy jiang1:
回复 灰小子:
谢谢 dirtwillfly, 堆栈编译时采用IAR默认 80字节, 这个是自动分配的。目前RAM我的程序是使用1650个字节,加上堆栈80字节,总共1730字节, MSP430F169的2KRAW还是有一定距离,至少还有几百字节MCU可以自动用于堆栈。 另外数组溢出方面我得想想办法,看用门狗检测一下长期运行会不会出现。
andy jiang1:
回复 HG:
@HG, 我们复位电路是采样RC方式, R=100K,C=0.1uF; TCK,TDO,TDI都是悬空, P1.1和P2.2也是悬空的。 在网上很多人说这样复位方式不可靠,一定要复位芯片, 按照TI电路设计经验, 这样是否可靠吗? 会不会可能是MCU复位不正常导致程序跑飞,擦除flash里面程序呢?
HG:
回复 andy jiang1:
一般复位电路推荐是47-kΩ 电阻pullup,电容 10-nF (2.2 nF) pulldown,你的值略微有点大。你烧完程序JTAG口Lock了没有?加复位芯片当然好,但我觉得不是必需的。你的代码里面有Erase整个flash的代码么?
andy jiang1:
回复 HG:
代码不存在Erase整个flash的代码,只有擦除信息段flash, 0x1000~0x10FF , 而且每次擦写信息段都是严格限制地址的。
andy jiang1:
回复 HG:
JTAG 熔丝我们烧断的。 对程序丢失或flash程序被改写的MCU, 我们试通过BSL读取发现不对。
HG:
回复 andy jiang1:
我看你的现象是整个flash都成FF了,如果是代码跑飞的话,可能是部分擦除,倒是不至于整个被改成FF。
JTAG不锁的话,噪声可能耦合进来,对flash进行篡改