0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GD32 MCU硬件I2C不可靠不如软件I2C?来看看红枫派开发版的硬件I2C驱动如何做到稳得一批

聚沃科技 2024-02-23 09:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在一个评论中,看到网友对硬件I2C的讨论,硬件I2C Busy找不到原因、软件I2C稳得一批。

那么为什么会出现I2C BUSY?硬件I2C真的不如软件I2C吗?怎么让硬件I2C也稳得一批,让我们来一探究竟。

首先我们从I2C时序分析下I2C总线挂死是如何产生的。

我们来看下I2C的时序和流程:

wKgZomXX9piAC-JfAABf-fjP0y0517.png

wKgaomXX9p6AdZ9vAABj3Ag6XSg389.png

所以总线挂死可能会有几个原因:

1、主机信号挂死了:

主机IO口损坏、I2C状态机异常软件死机

2、主机程序异常:

I2C通信需要主机来主导,主机软件本身异常了I2C信号也不会继续产生。

3、从机拉死了总线:

I2C是线与的,所以从机拉低后总线也挂了,主机无法再次拉高发起新的通信。这种情况一般在信号被干扰时从机丢失clock或者增加了clock导致双方时序没对齐,从机还维持住一个发送0 bit的状态就把SDA拉低了。

首先原因1和2是和程序相关,I2C的状态机流程较多,自行编写驱动确实容易出现问题,只要使用成熟驱动就可以。大家可以直接使用红枫派的I2C驱动就避免这类问题,红枫派的驱动可靠性不比原厂驱动低,经受RTOS、多中断、干扰等全方面打击。

wKgZomXX9qSAORzqAAAowZ6DO9Y088.png

对于原因3,既然是干扰多了clock和少了clock导致从机维持拉低SDA的状态,那我们补齐clock结束这次异常通信不就可以了?

其实这个方法在最新的I2C协议标准中也有说明,不管I2C当前丢失或增加几个clcok,我们只要让主机连续补齐9个clock,在9个clock内时序一定会补齐到ACK环节,此时主机维持SDA高状态就可以让这次通信以NACK进行结束,从机自然会释放总线,这个比强制用推挽模式拉高SDA更安全合理。

那么这个异常恢复在红枫派的驱动里也已经为大家考虑好了,当总线状态出现异常时,驱动里会自动进行处理恢复总线。

wKgaomXX9qyAeRWWAABEaGqe-dI730.png

那么软件I2C的弊端在哪里呢?

软件I2C一般通过IO口控制和延时进行模拟,这意味着整个通信过程会完全依靠并占用CPU,如果我们运行RTOS、或者有高频中断就会出现模拟时序过程被打断,波形会出现频率变化,波形中途停止等情况,一方面是降低通信效率,另外也可能导致主机没有在关键时间采样或者输出数据,出现通信错误。

红枫派开发板上板载了一个I2C的EEPROM,欢迎大家在软件极其严苛、硬件I2C接口随机进行干扰下验证例程,体验下稳得一批的硬件I2C。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45596

    浏览量

    674061
  • 嵌入式
    +关注

    关注

    5210

    文章

    20683

    浏览量

    337455
  • 硬件
    +关注

    关注

    13

    文章

    3640

    浏览量

    69185
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40787
  • GD32
    +关注

    关注

    7

    文章

    434

    浏览量

    27659
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK平台I2C开发:从硬件原理到实战排查

    在嵌入式开发中,I2C 总线是连接外设的 “桥梁”—— 小到传感器、EEPROM,大到 LCD 驱动器、音频芯片,都离不开它的控制。而瑞芯微(Rockchip)系列芯片作为主流嵌入式方案,其
    的头像 发表于 02-05 13:42 2701次阅读
    RK平台<b class='flag-5'>I2C</b><b class='flag-5'>开发</b>:从<b class='flag-5'>硬件</b>原理到实战排查

    I2C 为什么只要两根线就能搞定通信?

    到目前为止,我们已经讨论了SPI通信和UART通信的基础知识,现在让我们讨论本系列的最后个协议,即集成电路间协议(I2C)。如果您曾经构建过使用OLED显示器、气压传感器或陀螺仪/加速度计模块
    的头像 发表于 01-04 09:14 2103次阅读
    <b class='flag-5'>I2C</b> 为什么只要两根线就能搞定通信?

    基于FPGA的I2C控制模块设计

    I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的头像 发表于 12-26 09:48 6167次阅读
    基于FPGA的<b class='flag-5'>I2C</b>控制模块设计

    AS32X601的I2C模块操作EEPROM详解

    国科安芯推出的AS32X601系列MCU芯片内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设备的通讯。I2C
    的头像 发表于 12-21 21:39 1680次阅读
    AS32X601的<b class='flag-5'>I2C</b>模块操作EEPROM详解

    I2C死锁的问题

    在实际使用过程中,I2C比较容易出现的个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA直为低。 在
    发表于 12-04 06:00

    基于CW32 MCUI2C接口优化稳定读写EEPROM关键技术

    影响I2C信号完整性的外部干扰源,提供相应的硬件设计优化措施,如PCB布线、接地处理等,减少干扰对I2C通信的影响。 软件容错机制与超时处理:介绍如何在
    发表于 12-03 07:29

    如何在CW32 MCU上优化I2C通信

    的数据完整性。 数据完整性与容错机制: 提出如何通过软件硬件的容错机制来提升I2C通信的可靠性,包括数据校验、重试机制和错误检测策略,以应对可能的数据传输问题。 高效
    发表于 11-27 06:25

    深入剖析I2C协议

    I2C也是种可以多主设备,多从设备的总线协议,通过地址索引,I2C可以使能所需从设备,I2C的出现主要是用来实现不同集成电路组件之间的控制功能,比如通过
    的头像 发表于 08-21 15:10 3960次阅读
    深入剖析<b class='flag-5'>I2C</b>协议

    高效率、6通道、白光LED驱动器,带I2C接口 skyworksinc

    电子发烧友网为你提供()高效率、6通道、白光LED驱动器,带I2C接口相关产品参数、数据手册,更有高效率、6通道、白光LED驱动器,带I2C接口的引脚图、接线图、封装手册、中文资料、英
    发表于 07-30 18:31
    高效率、6通道、白光LED<b class='flag-5'>驱动</b>器,带<b class='flag-5'>I2C</b>接口 skyworksinc

    第十八章 I2C通信测试

    本章介绍了I2C协议,其物理层用SDA和SCL双线,支持多设备:协议层含起始/停止信号、应答机制等。还讲解W55MH32的I2C外设及初始化,并进行了通信测试代码的分析。
    的头像 发表于 06-19 17:07 1506次阅读
    第十八章 <b class='flag-5'>I2C</b>通信测试

    SPC574s如何使用SPC5Studio自带的I2C库实现I2C通信?

    SPC574s并没有硬件I2C外设,可以使用SPC5Studio自带的SW I2C库来实现,但是由于SPC5Studio软件资料太少,I2C
    发表于 06-09 06:22

    SPC574s如何使用SPC5Studio自带的I2C库实现I2C通信?

    SPC574s并没有硬件I2C外设,可以使用SPC5Studio自带的SW I2C库来实现,但是由于SPC5Studio软件资料太少,I2C
    发表于 06-05 08:17

    SPC574s如何使用SPC5Studio自带的I2C库实现I2C通信?

    SPC574s并没有硬件I2C外设,可以使用SPC5Studio自带的SW I2C库来实现,但是由于SPC5Studio软件资料太少,I2C
    发表于 05-14 07:10

    简单了解I2C接口

    在电子电路的复杂世界里,各种电路模块设备需要相互通信才能协同工作 ,I2C接口就像是电路模块设备间的沟通桥梁,今天就带大家深入了解它。
    的头像 发表于 05-08 14:15 2847次阅读
    简单了解<b class='flag-5'>I2C</b>接口

    基于RT-Thread的I2C(软件) 实践 | 技术集结

    、软硬件介绍(I2C(软件)I2C种广泛应
    的头像 发表于 05-06 18:44 1250次阅读
    基于RT-Thread的<b class='flag-5'>I2C</b>(<b class='flag-5'>软件</b>) 实践 | 技术集结