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

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

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

 

cb714d2ea5da43948909ef944c9637a0.png

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

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

 

1e177d417f8b4551b0a068aef11104c4.png

       传输的时间还有余量。iic通讯却出现了问题,为什么会出现这样的情况,在翻阅大量资料后,我终于在一篇帖子里找到了答案,这里非常感谢作者。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通讯明确的停止信号,和下一次通讯开始信号之间。

官方手册里的说明:

7192368ba3d04955b518cdea84285a94.png8eaf697dd6ff48468646fe613ca32b9a.png

 

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

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

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

 

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不绿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值