请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32的I2C(IIC)问题的讨论  

[复制链接]
moyanming2013 提问时间:2016-11-22 16:35 /
本帖最后由 moyanming2013 于 2016-11-22 16:58 编辑

此问题延伸于:
https://www.stmcu.org.cn/module/forum/thread-609223-1-1.html
我发表了一些言论引起了激烈的讨论。这讨论是积极的好的,希望下述也能起到讨论和传播的效果。
为什么国内一股ST的硬件I2C不行的氛围,这些初始言论从何而来、从谁而来,又是如何被形成“共识”的?!
但,现在已经不重要了。为了能够摆脱这种氛围,或者说让那些没认真操作或者没实际操作ST硬件I2C的同学能够真正了解其原理而不至于把这种言论再传播下去,希望大家踊跃讨论,各抒己见。
1.I2C协议在2006年10月10日已经免除版税了!参考资料1。
但需要缴纳I2C从设备地址版税(意思就是说你如果是做I2C从设备的厂商只需要缴纳从设备地址版税)给NXP。
ST首个STM32产品是基于Cortex-M3的,而Cortex-M3首个开放IP的版本是r1p1(参考资料2),是在2006年发布的,接着在2008年发布了r2p0,当前广泛使用的是2010年发布的r2p1。如果你是通过正规途径购买的F1系列产品,基本都是2010年后基于r2p1生产的免版税的I2C协议实现(即使ST实现从设备,这些从设备版税对ST来说根本比不了砍了I2C带来的损失)。参考资料2.
所以,以后别说是ST与飞利浦或NXP由于版税或版权导致的I2C有问题这种不当言论了!
额外:国内洋垃圾横行,一些小厂为了减少成本,可能使用了一些早间2006或之前生产的ST产品(这种情况其实本来就小的很!),看了一些时间对不上版本号的勘误表给出了一些错误的结论。希望我们都认真一些!负责一些!

2.ST的I2C是否真的有问题?
首先,用它的同学不要妄下结论,大家水平都有限,后面的同学看了你说的结论会“一朝被蛇咬十年怕井绳”,因为我们做的产品都需要稳定运行。
我们来看下国外用户对STM32的I2C的问题吧:
2.1.arm mbed上面搜索“ST I2C”有24万个结果(大部分是相关资料等)(参考资料3),我们可以看其中列出的2个问题:
“Basic i2c issues with STM32F103RB target”,他的问题大致是说收到的数据是错误的,并没有I2C本身存在问题的描述。
“I2C2 on ST Nucleo F103RB.”,他的问题是用I2C2时不工作,其中有人提醒他:
I2C需要10K的上拉电阻!(国内用户也应该看看是否此配置正确?)
另一位说问问题的搞错了管脚(但该位的I2C1有问题,但I2C2没问题)
上面的2个问题都没有说明I2C本身有什么硬件问题!
2.2.stackoverflow上面搜索“ST I2C”只有28个结果(参考资料4),我们可以看其中列出的2个问题:
“STM32 how to set a slave I2C port”,他从I2C1发数据到从设备I2C2,但是I2C2没有回复ACK,其中有人回复他不要忘了加上拉电阻。
“Embedded software program block, I2C?”,他实现的IO比较多:串口、SPI、DMA等,知道自己的I2C仲裁可能存在问题,其中有人回复他的程序里面有些处理没有超时退出。该回复者提到了ST的I2C硬件有时有bug,但现在他的I2C操作可用。
上面都提到的上拉电阻,见下图红框处(参考资料1):
QQ截图20161122155711.jpg
2.3.国内也不是所有人都觉得ST的I2C的难用:
“关于STM32的I2C硬件DMA实现”提到:
“网上看到很多说STM32的I2C很难用,但我觉得还是理解上的问题,STM32的I2C确实很复杂,但只要基础牢靠,并没有想象中的那么困难。”
上述来源:http://blog.sina.com.cn/s/blog_a960e9100102v0ot.html
所以,当你遇到问题时,先要怀疑自己的理解能力、解决问题的能力,再说其它原因,更不要以讹传讹。只有面对自己的问题才能进步。

3.我自己的情况。
我用过NXP自己的硬件I2C(这可能比ST的I2C有点说服力,毕竟I2C是NXP(飞利浦)的原创),有串口中断、有定时器中断等。在调试该I2C时也遇到了问题,而且长时间(2个月)无法解决。我找到了NXP官方(其实还是飞利浦的资料)的关于I2C的技术细节,并实现了它(仍然是硬件I2C实现而不是模拟,当时搜索国内的解决方案,包括周立功方面都是给的模拟方案和建议改为模拟方案(我觉得周立功方面没作为),但我是没有放弃),最后是在进行I2C通信前关闭所有中断解决了此问题,并通过了长时间的测试仍然运行良好。但此前的功夫不是白费的,只有掌握和实现了I2C本身,才能够说其它方面有问题,比如中断。但反过来,即使中断改对了,也不一定能够解决硬件I2C的问题。再进一步妥协到用模拟I2C,那种被牵着鼻子走的感觉就如同买了个拖拉机还让用牛车一样。我想ST下的I2C也有类似的问题,就看是否真去解决!下面的资料是I2C的技术细节,有些能够在ST的关于I2C的介绍中找到,有些还需要参考原始技术细节比较容易理解。我发现I2C看起来简单,但是真正运行时很复杂,见上面2.3提到的,我建议大家在做I2C通信时都要彻底掌握I2C协议本身并结合自己的项目来处理(其实做什么项目都应该如此)。比如是否关闭所有中断和设置优先级。
比较难找的、至今通用的、追本溯源的、非常通俗易懂的、我对I2C研究压箱底的、飞利浦I2C原始细节用户手册《AN10216 I2C Manual》:
AN10216 I2C Manual.pdf (4.12 MB, 下载次数: 1189)
收藏 23 评论37 发布时间:2016-11-22 16:35

举报

37个回答
jcx0324 回答时间:2016-11-23 11:18:26
以前应用的时候是会出问题,ST支持都说自己的有问题,这个是事实的, 口碑估计就是那个时候开始的
STM32F051 回答时间:2016-12-14 00:05:05
几年前的事了,楼主认为ST的IIC没有问题,还举例说明;片面
IIC的协议不复杂,用过NXP的人,尤其对IIC印象深刻,没问题;


ST的IIC是什么时候出的问题?是早期的版本,问题主要是STM8系列,STM32F1XX系列,STM32F2XX系列;
我遇到的问题,一旦出错,有可能对应的端口一直保持低电平状态,重新上电后,直接挂掉;只有把芯片擦除才可以恢复过来;
出现上述问题的时候,如果只是操作24CXX这类器件,问题要少很多;如果是双机IIC通讯,基本是没听说谁成功了。都是被迫改用模拟IIC来操作IO端口;耗时,费劲。


如果说ST的IIC很成功,为何后续新的器件,如STM32F0系列,把IIC部分的硬件重新设计?同期的STM32F4XX也跟着一同改用新核了;


问题出在哪?印象中有人分析过,是应答检测环节;处理的很草率,容错性差,如果应答信号没有及时检测到,就直接挂掉了;严重到不可恢复,重新上电都不行。
如果是短距离的硬件,如24CXX,能及时给出应答,没事,否则,发生什么都有可能。所以用24CXX的人有,但双机通讯的人,没听说谁成功了。


事后,ST公司并没有解释为什么IIC难弄,只是对IIC核重新设计了。


你自己可以搭个电路测试,二片STM8,用IIC通讯,通讯距离1米;
wdshuang09 回答时间:2016-11-23 12:18:43
支持         
DavidTan 回答时间:2018-9-12 11:46:00
正常跑起来应该挺稳定的,但是要考虑一下做环境实验的时候,被静电一打,或者某些情况下SDA、CLK被强制拉低了一下,这时候你就知道硬件IIC的稳定性有多好了,我是吃过亏的,呵呵
u012801 回答时间:2018-8-11 07:39:42
乱讲一通我用 STM32F411 I2C 测试 ADC 采样
过一段时间就卡住

用模拟就不会

胡说八道,乱讲一通
农夫水0533 回答时间:2016-11-23 16:25:59
从我接触的几个ST的支持来看水平真的不咋地
没事逛荡 回答时间:2016-11-23 09:24:01
楼主研究透彻。顶起!
奏奏奏 回答时间:2016-11-23 08:57:34
我用I2C访问EEPROM,当时是24C64,地址要由默认的8位改为16位地址。
用STM32F1的硬件I2C也没有问题。
不知道为什么有人会说硬件I2C有问题
五哥1 回答时间:2016-11-22 17:37:53
这个才象研究的样子,我们就需要这样的研究,我支持楼主。
moyanming2013 回答时间:2016-11-22 23:00:55
五哥1 发表于 2016-11-22 17:37
这个才象研究的样子,我们就需要这样的研究,我支持楼主。

不管如何,我说了自己认为合理的
moyanming2013 回答时间:2016-11-23 10:48:31
奏奏奏 发表于 2016-11-23 08:57
我用I2C访问EEPROM,当时是24C64,地址要由默认的8位改为16位地址。
用STM32F1的硬件I2C也没有问题。
不知 ...

嗯,那种声音太刺耳,我们去噪一下。
moyanming2013 回答时间:2016-11-23 12:10:37
jcx0324 发表于 2016-11-23 11:18
以前应用的时候是会出问题,ST支持都说自己的有问题,这个是事实的, 口碑估计就是那个时候开始的 ...

嗯。
ST自己的国内业务员太不负责任了,如果连“由于和NXP(或飞利浦)关于I2C的专利问题”都写入FAQ,那么就看出ST中国自己都搞不清楚吗?!
其实,ST的新网站也有问题(https://www.stmcu.org.cn/module/ ... amp;fromuid=3089512)!
moyanming2013 回答时间:2016-11-24 11:19:17
农夫水0533 发表于 2016-11-23 16:25
从我接触的几个ST的支持来看水平真的不咋地

其实这正是大家存在的价值,即使官方也可能有错误的时候啊
zbber 回答时间:2016-11-24 14:31:16
好帖,必须支持一下!
原田夜舞love 回答时间:2016-11-25 09:41:27
学习了,有空好好研究一下I2C
moyanming2013 回答时间:2016-12-30 11:55:14
STM32F051 发表于 2016-12-14 00:05
几年前的事了,楼主认为ST的IIC没有问题,还举例说明;片面
IIC的协议不复杂,用过NXP的人,尤其对IIC印象 ...

8位下你可以用模拟的没人质疑什么。
但不要把这种“认识”带入到32位的MCU中。
至于所谓的“新核”,Cortex-M3也会从r1p1升级到r2p0,都是正常的更新。
还是建议好好搞清楚I2C本身,然后再找找原因。
如果是应答环节无反馈,建议添加超时退出。
你的“把芯片擦除才可以恢复过来”太生猛了。
123下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版