dsp2803x掉电保护(通过IIC通讯写入EEPROM)

发布时间:2023年12月26日

? ? ? ?最近在实习中遇到一个问题,如何用dsp2803x系列来完成掉电保护的功能,由于eeprom的擦写次数有限,利用掉电保护可以很大延长eeprom的寿命。虽然只是一次小小的优化,由于个人能力不足在很多细节的地方还是遇到了许多问题,所以在此将过程分享出来,希望能对大家有点帮助。

? ? ? 我遇到的情况需要在10ms内在eeprom不同的地址存储3个字节的数据。刚开始我采用配置寄存器的方法(iic通讯的具体方法有配置寄存器和模拟io口两种,已经有很多帖子了,这里就不再赘述了。)?我设置的iic主频在100khz,可计算一次时钟10us,传送一个字节需要九个时钟周期,就是90us。 那么可计算·一次数据的传输需要:2字节地址+3字节数据,共450us,加上配置寄存器的时间,此时从示波器观察到每次写操作间隔在3ms。?

图为每次写操作为3ms左右时,显示写入正常

? ? ? ?为了在更短时间内写入更多数据,我修改写入间隔为2.5ms,发现写入不稳定,在第二次写入时失败,示波器为直线。观察波形可以发现eeprom在第九个时钟周期并未应答。

为什么呢?明明传输的时间还有余量。我百思不得其解,在翻阅大量资料后,我终于在一篇帖子里找到了答案,这里非常感谢作者。STM32学习笔记(9)——(I2C续)读写EEPROM_stm32内部eeprom读写-CSDN博客

? ? ? ?AT24C官方手册: At this time the EEPROM enters an internally timed write cycle, tWR (Write Cycle Time, Max = 5 ms) , to the nonvolatile memory. All inputs are disabled during this write cycle and the EEPROM will not respond until the write is complete (see Figure 8 on page 10).

? ? ? ?即:主机通过iic通讯发送数据至 EEPROM,EEPROM 将数据存入缓存,此时iic通讯完成。下一步eeprom开始往非易失区写入数据,这个过程需要一定时间,根据官方手册可知一次写入过程的最大时间为 5ms(即:tWR=5ms),此时 EEPROM 不会响应主机任何的请求,相当于 EEPROM 从 I2C 总线断开。

注:tWR的定义为上一次iic通讯明确的停止信号,和下一次通讯开始信号之间。

官方手册里的说明:

? ? ? 也就是说不轮询是否写入完成的情况下,完成一次稳定的写操作需要 1ms通讯+5ms 等待eeprom写入数据存储区完成,总共6ms时间。实测中低于3ms无法写入,如果采用轮询方法,轮询一次需要1ms左右的时间,在3ms后开始轮询,就算一次成功总共的时间也需4ms多,也无法在10ms内完成两次写操作的要求。

注:官方手册里轮询方法为iic通讯只发送地址数据,如果有应答位说明可以写入。

? ? ? ?最后没办法只能考虑是否可以单独开辟一块空间用于存储?一次写操作直接写入六个字节,那么一次操作就可以完成。这样时间足够,考虑到iic发送寄存器FIFO深度4个字节,没办法一次性发送六位数据,不能采用配置寄存器的方法,所以推倒重来改用io口模拟iic的方法,一次性成功写入了六个字节。?

文章来源:https://blog.csdn.net/m0_58536998/article/details/134458753
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。