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

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

本帖最后由 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 (34.32 KB, 下载次数: 128)

下载附件

保存到相册

2016-11-22 16:05 上传

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, 下载次数: 1231)

2016-11-22 16:22 上传

点击文件名下载附件

下载积分: ST金币 -1

你想知道的关于I2C所有的技术细节都在上面了!

下面是NXP更新的I2C用户手册(它更官方话了些):

UM10204.pdf

(1.33 MB, 下载次数: 337)

2016-11-22 16:28 上传

点击文件名下载附件

下载积分: ST金币 -1

4.ST在国内关于I2C舆论时在干什么?

其实ST的硬件I2C有没有问题,各位应该有个大致判断了吧!

关于勘误表,我想说的是任何MCU都不是完美的,即使串口也有勘误。但勘误表不是自己的免死金牌!

我给一些其它ST官方的关于I2C的资料:

《STM32L4-I2C》见参考资料5.

《AN2824 STM32F10xxx I2C optimized examples》见参考资料6.

5.参考资料

1.http://en.wikipedia.org/wiki/I%C2%B2C

2.http://infocenter.arm.com/help/i ... .cortexm/index.html

3.http://developer.mbed.org/search/?q=ST+I2C

4.http://stackoverflow.com/search?page=2&tab=relevance&q=st%20i2c

5.http://www.st.com/content/ccc/re ... _Peripheral_I2C.pdf

6.http://www.st.com/content/ccc/re ... s/en.CD00209826.pdf

相关推荐

用手指吹口哨教程(简单易懂的用手指吹口哨技巧,你再也不用担心不会吹口哨了!)
在官网定购的iphone都是从哪里发货的
365bet亚洲娱乐场

在官网定购的iphone都是从哪里发货的

📅 07-28 👁️ 3470
TCS战队解散事件 从皇德耀世到贪吃飒的无奈
365bet亚洲娱乐场

TCS战队解散事件 从皇德耀世到贪吃飒的无奈

📅 09-14 👁️ 9875
lol冬季仙境卡尔玛价格详情-冬季仙境卡尔玛多少钱 已推荐
惠氏奶粉防伪码查询大揭秘:如何一秒揪出 “假奶粉”?
韩国连续11次晋级世界杯 提前一轮出线
Bet体育365app下载

韩国连续11次晋级世界杯 提前一轮出线

📅 07-19 👁️ 2399