再问STM32的硬件I2C与软件模拟

2019-12-12 18:09发布

坛里的帖子看了很多,大致了解了STM32的硬件I2C的确有一些BUG,或者说使用时有很多不方便满足的要求,比如DMA加最高中断。所以思考是否使用模拟方式替代。但有种观点是模拟I2C太耗资源。我认真分析了下,其实大部分I2C读写操作在程序中都是顺序类型的,及当读、写I2C从机时,必须读、写到想要的数据才能继续往下执行,如果其中出错,还必须重新来过。所以不管是用硬件查询,中断,DMA等方式还是模拟方式,都必须等待从机完成,所花时间决定与I2C速度和从机响应速度。如果可以这么理解,是否可以说其实模拟方式没有任何风险,速度差不多,故而是最好的选择?

望对这个问题有经验的朋友们不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
szszjdb
1楼-- · 2019-12-16 03:46
科技猎人 发表于 2017-3-7 14:56
用硬件IIC也不能中途切换任务吧

好像是的。至少查询方式的硬件是不行的,其他两种都可以吧。
godsend
2楼-- · 2019-12-16 06:22
szszjdb 发表于 2017-3-8 10:17
多谢,同意您的看法! 不少朋友也是用DMA。我这里提到的观点就是用硬件I2C加DMA,不见得比模拟I2C节省资 ...

等待ACK?为什么要等待?这个是中断干的事。。。总线产生ACK,中断自己检测,又不要CPU参与。
ffbiao
3楼-- · 2019-12-16 06:23
 精彩回答 2  元偷偷看……
szszjdb
4楼-- · 2019-12-16 08:54
godsend 发表于 2017-3-8 10:24
等待ACK?为什么要等待?这个是中断干的事。。。总线产生ACK,中断自己检测,又不要CPU参与。 ...

这里不是说ACK和NACK,而是当操作I2C时,往往都是关键数据,是必须确认已经成功了才能继续下一步操作的。比如上电时从I2C读回设置参数,必须读了,且读到了,才能进行下一步处理。DMA只是过程中不用程序关注,但结果还是要等的。所以才推断硬件和模拟I2C其实效能差不多这个结论。
godsend
5楼-- · 2019-12-16 12:48
szszjdb 发表于 2017-3-8 13:04
这里不是说ACK和NACK,而是当操作I2C时,往往都是关键数据,是必须确认已经成功了才能继续下一步操作的。 ...

发送和接收数据都是有DMA完成,我不知道你说的CPU在等什么?你管他完成没有,反正从机接收会给个ACK,I2C事件中断去检测ACK.
godsend
6楼-- · 2019-12-16 17:17
szszjdb 发表于 2017-3-8 13:04
这里不是说ACK和NACK,而是当操作I2C时,往往都是关键数据,是必须确认已经成功了才能继续下一步操作的。 ...

数据是否发送完成也是DMA干的事,CPU操的哪门子心。

一周热门 更多>