大家好!
我现在要将PIC单片机程序做在线升级,也就是IAP,而且需求是必须不断电升级,也就是单片机重启复位时外围的输出信号必须能保持住。前两天看到有人说用锁存器,不知道这个具体怎么用法,大家有没有比较好的不断电升级方案,在此先谢谢了!
大家好!
我现在要将PIC单片机程序做在线升级,也就是IAP,而且需求是必须不断电升级,也就是单片机重启复位时外围的输出信号必须能保持住。前两天看到有人说用锁存器,不知道这个具体怎么用法,大家有没有比较好的不断电升级方案,在此先谢谢了!
基于Monster 组和GPT的调写:
实现不断电升级需要满足两个条件:
在升级过程中保持数据存储的稳定性,以防止数据丢失。
在单片机复位后,外围的输出信号能够保持住。
其中,保持数据存储的稳定性可以通过使用锁存器来实现。锁存器可以将数据存储在寄存器中,并在需要时将其输出到下一级电路。在IAP过程中,当需要修改Flash存储器中的数据时,可以将数据读取到锁存器中,进行修改,然后再将修改后的数据写回Flash存储器。
保持输出信号的稳定性可以通过在单片机复位时将输出信号的状态保存在EEPROM中,并在复位后将其恢复。具体实现方法如下:
在代码中加入EEPROM读写函数,用于将输出信号的状态保存在EEPROM中,并在需要时将其恢复。
在单片机复位时,先从EEPROM中读取输出信号的状态,并将其输出到对应的外围设备。
在进行IAP过程时,先将输出信号的状态读取到锁存器中,并在IAP完成后将其写回EEPROM中。
在单片机正常运行时,使用锁存器来保存输出信号的状态,并在需要时将其输出到对应的外围设备。
需要注意的是,EEPROM的写入次数是有限的,因此需要控制好EEPROM的使用次数,以防止过度磨损。
除了使用锁存器和EEPROM来实现不断电升级,还可以考虑使用双Flash或者双EEPROM来实现,即在进行IAP时,先将程序下载到备用存储器中,再将程序复制到主存储器中。这种方法可以避免在IAP过程中丢失数据,同时也可以保持输出信号的状态。不过需要注意的是,双存储器的使用需要占用额外的空间,因此需要在设计时进行考虑。