数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4988|回复: 10

[STM] stm的芯片硬件IIC的bug真的那么多?

[复制链接]
发表于 2020-5-5 13:41:20 | 显示全部楼层
STM32的硬件I2C没有BUG.出问题主要是开发人员对I2C总线的软硬件设计有误区.相对于其他的SCI接口,I2C是个很另类的东西,其差异主要体现在两个地方:
1)I2C没有总线超时机制,一旦出现异常(设备软硬件自身问题或外部强干扰),它自己无法恢复.
2)I2C从设备的读写协议没有固定标准,不同的从机设备,协议各式各样.即使硬件I2C,其链路层的协议,也是由软件完成(START,STOP,ACK,NACK).

I2C的优点很多,缺点也特别明显,本质上不可靠,通信效率低下.如果设计的产品对可靠性要求高,尽量不用I2C.即使是模拟I2C也会出问题.如果要求速率高,用SPI,速率没要求,用SMB.

我曾经做了一个验证项目,STM32F429,一路硬件I2C,同时带EEPROM,5点触摸屏幕,陀螺仪,光感测距芯片.软件环境是FreeRtos+STemWin,I2C读写任务优先级很低.如果用原生态HAL库,10秒内总线必挂死.软件验证开发分成两个方向:1)用寄存器库重写I2C接口函数,牺牲读写效率和可移植性,让I2C总线不再挂死.2)直接用HAL库,允许挂死,加保护性代码以便恢复总线.对于普通的产品,上述任何一个措施都可以胜任.如果关键代码二者合并再配合上硬件设计,即使人为快速短路SCL和SDA造成严重故障(模拟外界强干扰),也可以恢复正常工作.

软件模拟I2C在产品设计上不可取,是自欺欺人的做法.比如人为的快速短路SCL和SDA,照样挂死总线.把I2C协议以及特定芯片的硬件I2C模块资料看明白,是解决问题的正路.
回复 支持 3 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-10 15:42 , Processed in 0.109200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表