当前位置: 首页 > news >正文

GD32 MCU硬件I2C不可靠不如软件I2C?

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

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

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

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

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

1、主机信号挂死了:

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

2、主机程序异常:

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

3、从机拉死了总线:

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

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

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

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

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

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

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

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

以上即为本期讲解,如有问题或建议,欢迎评论区讨论。

更多GD32 MCU相关咨询:https://www.gd32bbs.com/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux之文件系统
  • C#中的TCP和UDP
  • LeetCode每日一题_3143.正方形中的最多点数
  • 【虚拟化】KVM使用virt-manager部署及管理虚拟机
  • 嵌入式FPGA(现场可编程门阵列)面试题及参考答案
  • 简明 | ResNet特点、残差模块、残差映射理解摘要
  • 【C语言】C语言期末突击/考研--结构体与C++引用
  • 2024华硕迷你主机选购指南:全系列覆盖
  • 深入理解 C 语言中的联合体
  • JavaWeb基础1:HTML/CSS/JS/HTTP
  • 蓝屏事件:网络安全的启示
  • 云原生的候选应用
  • 静态代理与动态代理区别?
  • 记一次Mysql8.0使用GROUP BY查询导致异常问题
  • 供应链安全:黑客攻击 Nimble 包
  • 【347天】每日项目总结系列085(2018.01.18)
  • 77. Combinations
  • Cumulo 的 ClojureScript 模块已经成型
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java编程基础24——递归练习
  • java中的hashCode
  • leetcode-27. Remove Element
  • VuePress 静态网站生成
  • vue自定义指令实现v-tap插件
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 聚类分析——Kmeans
  • 跨域
  • 浏览器缓存机制分析
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  •  一套莫尔斯电报听写、翻译系统
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • mysql面试题分组并合并列
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #Linux(帮助手册)
  • #vue3 实现前端下载excel文件模板功能
  • #考研#计算机文化知识1(局域网及网络互联)
  • #数据结构 笔记一
  • (007)XHTML文档之标题——h1~h6
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Oracle存储过程编写经验和优化措施
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .DFS.
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes