Post Go back to editing

ADuC7023程序问题

我们的产品在一块板卡上使用了多片ADuC7023,通过将P0.0引脚拉低,使用I2C下载模式逐个下载了程序(多个芯片使用同一程序)。

产品在经过多番测试过程后(测试期间都正常),发现有一部分ADuC7023上的程序没有了(后续我说明程序没有的状态),而有的芯片一直正常。没有程序的芯片后续多次上电,均是已没有程序的状态。

我解释一下程序没有的状态。

对于正常仍有程序的芯片,能看出其外围其他设备是在正常工作的;通过I2C-WSD烧写工具和I2C-Downloader的下载器连接AduC7023芯片时,点击connect时,会显示连接超时,提示连接异常,芯片可能未处于I2C下载模式中;这种情况是正常的,说明芯片中已有程序;

但部分异常状态的芯片则似乎其内部程序已丢失,芯片上电后对外无任何输出,通过I2C-WSD烧写工具和I2C-Downloader的下载器连接AduC7023芯片时,点击connect时,显示能够连接,而且,此时可以重新烧入程序!!重新烧入程序后,产品则恢复了正常工作状态。

我对照芯片资料看了,ADuC7023能够进入I2C下载模式的条件是(P0.0 外部下拉(这个外部条件是恒成立的) && 0x80014 == 0xFFFFFFFF),按照我的理解,程序下载了程序后,0x80014 处就不会是0xFFFFFFFF,如果想重新下载程序,则需要删除这个地址上的数据。那么出现异常情况的芯片,就是这个地址0x80014被写入了0xFFFFFFFF。

1.我想问一下,是否可以确定,这些没有了程序的芯片,是某种原因导致了0x80014 == 0xFFFFFFFF这个条件成立了?

2.会有哪些原因,导致程序出现这种类似丢失的情况呢?是FLASH芯片被异常操作了,还是外围器件(比如电源异常?)导致这种情况出现呢?

3.我程序逻辑里,是有可以将0x80014地址写入 0xFFFFFFFF的逻辑的,我要考虑产品需要更新程序的情况,正常情况下,我从外部发个专用指令,程序会自行擦除将0x80014地址,这样新程序就可重新烧写;但是我在接收这个指令时,会朝外部EEPROM写入一个数据,表明程序现在我特意把它擦掉了,而实际上,程序在异常丢失时,EEPROM并没有看到这个数据,因此,我感觉程序丢失与我的代码逻辑无关。

期盼答复,虽然这个问题在实际使用时,在测试频次非常高时才小概率出现,但是结果实在太严重了,我们很多已经出厂的产品都用的这款芯片。