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

2019-12-12 18:09发布

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

望对这个问题有经验的朋友们不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
快乐的小娃
1楼-- · 2019-12-21 21:03
 精彩回答 2  元偷偷看……
godsend
2楼-- · 2019-12-21 21:31
szszjdb 发表于 2017-3-28 10:46
多谢! DMA完成中断前,的确可以干别的事,但实际上因为程序顺序逻辑的问题,这个检测标志并进一步进行I2 ...

上操作系统!
Azuresky
3楼-- · 2019-12-21 22:06
本帖最后由 Azuresky 于 2017-3-29 06:54 编辑
szszjdb 发表于 2017-3-27 11:54
看来要用硬件I2C,只有如此了。只是我的I2C操作EEPROM, 批量写入后还要读回校验无误,才写下面内容,所以 ...


看来,问题的关键不在于I2C通讯,而是你需要等待EEPROM做出反应。
如果其它任务不紧急,就等等吧。
如果和紧急任务同时执行,死等EEPROM肯定是不行的。一个简单的办法是使用操作系统,单独开个进程处理EEPROM的读写。
security
4楼-- · 2019-12-21 22:48
Azuresky 发表于 2017-3-29 06:50
看来,问题的关键不在于I2C通讯,而是你需要等待EEPROM做出反应。
如果其它任务不紧急,就等等吧。
如果 ...

楼主的意图,在楼主位写得很清楚,你们迟迟未抓住楼主的痛点。包括 godsend 也是一样。
我在 60 楼已经给楼主建议了。

其实,楼主也不用去纠结了。
结论就是:对于小批量数据交互,没太大差异,不管你用不用操作系统,因为那点时间,通常是短暂的,能利用的也是有限的。
szszjdb
5楼-- · 2019-12-22 02:40
非常感谢楼上众兄弟热情回复,你们的无私细致耐心,于我帮助良多!再次感谢!
shidadizhu
6楼-- · 2019-12-22 02:55
 精彩回答 2  元偷偷看……

一周热门 更多>