打印
[其他]

【最疯狂的经历】记一次大意的I2C实现

[复制链接]
50|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      算起来从读大学开始,从事嵌入式开发也很多年了,日子一天一天的过,普通人的工作,波澜不惊而已。回想已经过去的2024年的研发日子,大多都已经湮灭在时间的浩瀚海洋里了,但有一件调试经历挺难忘的,也挺有意义,现在分享出来做个记录,也希望大家不要犯我的错误,吸取前车之鉴,及时避坑!
      项目上面由于一些原因,我们必须使用外置的MCU来完成部分工作,我也顺利的完成了这部分代码的移植工作,并且移植后,MCU运行稳定,可靠。在经过一次PCB升级改板后,我们支持了PCIe的I2C接口,我需要在额外实现I2C从模式的数据发送与接收。
      想着已经轻松实现多次I2C主模式下的发送与接收,我觉得I2C从模式也是很easy的事情。代码很快就编写完成了,但调试就“啪,啪”的打脸呀!

      我使用了I2C从模式下的STOPF中断来判断本次收发结束,但发现其并未进入我设计好的运行状态,而是超时异常退出了!因为使用了I2C中断模式,在中断中添加日志输出又导致了I2C异常卡死,但通过逻辑分析仪来观察通讯序列又是好的!这可怎么办呢?
      在编写程序时参考的用户手册来自国产芯片原厂官网的,这回换回ST官方的手册,我想着既然寄存器的bit位都是一样的,估计操作序列也应该一样,至少有参考意义吧!这一看,可不要紧,差距还是蛮明显的。




      ST官方的I2C外设部分明确标明了在NACK信号之后,不会进入STOPF中断,所以,我的程序还在等待STOPF中断触发后才结束本次发送,这肯定等了一个寂寞啊!
      在阅读手册之后,我将NACK中断与STOPF中断分别对应I2C从模式的发送与接收包结束,I2C通讯也就正常越来了。
      I2C从模式下的开发需要的知识与注意点还是蛮多的,大家不要犯和我一样的错误,千万不要轻视它哟!



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝