您好!
我们在用此款产品做为主控芯片量产使用的过程中,发现1000套中出现10套固件丢失(无固件的的外部状态),在使用C2仿真器读取固件 0000-F000处地址的时候发现代码区为全0(而正常的板子用C2读取的固件是有数据的)
参考附件0000-F0000.TXT 怀疑程序运行过程中扇区被锁定。
又读取FBFF-FC00 的值,发现出现80 数据 锁定页( 为什么能读出来? )
又读取 FA00-FBFF的值 , 发现全0.
对应的文件参考附件 固件读取.zip里面的内容。
有几个问题可能相关。
1: 什么情况下会导致类似此种情况。
2:程序没有对页加锁保护过,即正常的程序是可以被C2读取。
3: 我查阅相关代码,FLASH 擦写的addr 0xF200-0xF600 只在这个区域, 为何FBFF 地址的数据在FBFF-FC00 能读出来(理论锁住话不能读出),在 FA00-FBFF 为全0.
void FLASH_ByteWrite (unsigned int addr,unsigned char byte)
{
bit EA_SAVE = EA; // Preserve EA
unsigned char xdata * data pwrite; // FLASH write pointer
ResetWDT();
EA = 0; // Disable interrupts
// change clock speed to slow, then restore later
VDM0CN = 0x80; // Enable VDD monitor
RSTSRC = 0x02; // Enable VDD monitor as a reset source
pwrite = (unsigned char xdata *) (addr);
FLKEY = 0xA5; // Key Sequence 1
FLKEY = 0xF1; // Key Sequence 2
PSCTL |= 0x01; // PSWE = 1
VDM0CN = 0x80; // Enable VDD monitor
RSTSRC = 0x02; // Enable VDD monitor as a reset source
*pwrite = byte; // Write the byte
PSCTL &= ~0x01; // PSWE = 0
EA = EA_SAVE; // Restore interrupts
}
4: 考虑堆栈溢出为题,堆栈定义0X40大小。
半天测试,堆栈使用在 0X20-0X4E大小 0x2e之间,未有溢出。
如果还需要什么资源提取以利于问题分析,大家可以提下,我去试验。。紧急,麻烦了!
gaoyang9992006:
该芯片好像不是TI生产的吧,另外你说道的1%的芯片固件丢失,如果芯片没有损坏那么我怀疑是根本没有烧录进去固件
TI中文支持网
