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

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

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

    关注

    6035

    文章

    44553

    浏览量

    634729
  • 嵌入式
    +关注

    关注

    5082

    文章

    19111

    浏览量

    304847
  • 硬件
    +关注

    关注

    11

    文章

    3315

    浏览量

    66203
  • IIC
    IIC
    +关注

    关注

    11

    文章

    300

    浏览量

    38313
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24328
收藏 人收藏

    评论

    相关推荐

    RISC V的I2C操作

    system_i2c_0_io_scl_writeEnable = !system_i2c_0_io_scl_write;Interface配置示例I2C寄存器设置在I2C的设置中第
    的头像 发表于 11-01 11:06 197次阅读

    I2C协议的基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及上拉电阻大小计算。
    的头像 发表于 10-22 15:51 488次阅读
    <b class='flag-5'>I2C</b>协议的基础知识

    使用USCI I2C主站

    电子发烧友网站提供《使用USCI I2C主站.pdf》资料免费下载
    发表于 10-21 09:30 0次下载
    使用USCI <b class='flag-5'>I2C</b>主站

    I2C噪声毛刺滤波

    电子发烧友网站提供《I2C噪声毛刺滤波.pdf》资料免费下载
    发表于 10-08 14:39 5次下载
    <b class='flag-5'>I2C</b>噪声毛刺滤波

    了解I2C总线

    电子发烧友网站提供《了解I2C总线.pdf》资料免费下载
    发表于 10-08 11:13 2次下载
    了解<b class='flag-5'>I2C</b>总线

    物联网嵌入式软件中的I2C总线设计详解

    基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C通信协议可以用普通GPIO引脚进行
    的头像 发表于 09-29 16:21 373次阅读
    物联网嵌入式<b class='flag-5'>软件</b>中的<b class='flag-5'>I2C</b>总线设计详解

    I2C基本指南

    电子发烧友网站提供《I2C基本指南.pdf》资料免费下载
    发表于 09-10 09:40 0次下载
    <b class='flag-5'>I2C</b>基本指南

    CAN转I2C桥接器

    电子发烧友网站提供《CAN转I2C桥接器.pdf》资料免费下载
    发表于 08-28 11:10 0次下载
    CAN转<b class='flag-5'>I2C</b>桥接器

    UART转I2C桥接器

    电子发烧友网站提供《UART转I2C桥接器.pdf》资料免费下载
    发表于 08-28 09:24 1次下载
    UART转<b class='flag-5'>I2C</b>桥接器

    GD32 MCU 入门教程】GD32 MCU 常见外设介绍(7)I2C 模块介绍

    I2C(Inter-Integrated Circuit)总线是种由Philips公司开发的两线式串行总线,用于内部IC控制的具有多端控制能力的双线双向串行数据总线系统,能够用于替代标准的并行总线
    的头像 发表于 08-16 09:54 540次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入门教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常见外设介绍(7)<b class='flag-5'>I2C</b> 模块介绍

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C协议因其高效
    的头像 发表于 07-25 18:06 1437次阅读

    I2C逻辑选型指南

    电子发烧友网站提供《I2C逻辑选型指南.pdf》资料免费下载
    发表于 06-20 16:20 2次下载

    请问数字(硬件)I2C和模拟I2C的优缺点?

    请教哈各位同仁: 1. 数字(硬件)I2C和模拟I2C的优缺点? 2.他们在正常模式下的功耗对比,哪个较好?
    发表于 05-13 06:10

    什么是I2C协议 I2C总线的控制逻辑

    在实际使用过程中,I2C比较容易出现的个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA直为低。
    发表于 03-12 09:17 1056次阅读
    什么是<b class='flag-5'>I2C</b>协议 <b class='flag-5'>I2C</b>总线的控制逻辑

    stm32 I2c硬件驱动程序不稳定该怎么解决?

    stm32 I2c硬件驱动程序不稳定该怎么解决? stm32 的 I2C 硬件驱动程序不稳定可能
    的头像 发表于 01-16 17:11 3010次阅读