一文速通 IIC I2C子系统驱动 通信协议原理 硬件 时序 深度剖析

本文作为一个引入,作用是让读者理解熟知IIC协议关键内容,结合实际手册内容,深度解析协议本质,作为后续嵌入式linux驱动IIC子系统的一个铺垫。

目录

1. 硬件连接

2. IIC传输时序

2.1.写操作

2.2.读操作

2.3.I2C信号

3.IIC协议细节

4.IIC协议类比 SPI、UART


1. 硬件连接

I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻。(之前在我们的硬件篇有提到上拉电阻 还想系统性的了解上拉电阻的可以参考学习 接下来我们也会对IIC硬件中的上拉电阻进行分析)

由此我们可以得知以下信息,这些都是重点,读者需要牢牢记住。

同步、串行、半双工、多主机总线、近距离、低速、芯片与芯片之间的通信;

接口:两线制:SDA数据线、SCL时钟线 成本低

可以挂载多设备、主机是使用总线权利者、从机只可以听取从机、被主机管理;

 我们接下来就是分析下上拉电阻的问题了。

我们知道由于芯片在输出高低电平的时候,内部通常会有两个mos管(针对mos管的知识在硬件篇也有系统的讲 不懂的读者也可以回顾学习),上面的MOS管导通输出高电平,下方的MOS管导通输出低电平。

因此我们熟知IIC是需要多设备通信,假设我们把两个IO口都挂在到一个总线上,很简单的可以发现当一个芯片输出高电平,一个芯片输出低电平,此时就短路了,因此IIC对于设备的IO口做了一些阉割,去掉了上面的mos管,只保留下方的mos管,但是问题也暴露出来了,虽然解决了短路的问题,但是设备只可以输出低电平,另一种情况的电平就是未知的状态,浮空,为了避免这种情况,我们需要引入上拉电阻,这样完美了解决这个问题,同时也体现了IIC硬件设计的驱动能力。

同时我通过IIC手册对于IIC硬件设计规范图图例进行实例的调研,如下所示:

可以清楚的看出,正如我们先前总结的一样,这就是IIC的上拉电阻的作用。

2. IIC传输时序

2.1.写操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 主设备发送一个字节数据给从设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"

2.2.读操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 从设备发送一个字节数据给主设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"

2.3.I2C信号

I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。

  • 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。

  • 结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA

  • SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化

I2C协议信号如下:

3.IIC协议细节

  • 如何在SDA上实现双向传输? 主芯片通过一根SDA线既可以把数据发给从设备,也可以从SDA上读取数据,连接SDA线的引脚里面必然有两个引脚(发送引脚/接受引脚)。

  • 主、从设备都可以通过SDA发送数据,肯定不能同时发送数据,怎么错开时间? 在9个时钟里, 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据; 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据。

4.IIC协议类比 SPI、UART

特性I2CUARTSPI
通信方式多主多从同步通信全双工异步通信主从同步通信
通信线数2 条(SCL、SDA)2 条(TX、RX,可能附加GND)4 条(SCLK、MOSI、MISO、CS)
通信速率标准模式:100kbps;
快速模式:400kbps;
高速模式:3.4Mbps
通常 9600bps - 1Mbps通常最高几十Mbps,依设备支持而定
拓扑结构菊花链总线点对点主从结构,支持多从设备
总线仲裁支持,基于时序和逻辑(多主控制)不支持不支持
时钟信号由主设备提供不需要(内部分频产生波特率)由主设备提供
传输效率较高,支持多个从设备,但有协议开销较低,数据包中通常有起始位、停止位和校验位高,直接传输数据
硬件复杂性适中,依赖外部上拉电阻简单,仅需基本串口硬件较高,需额外的片选线和主控支持
多设备支持支持多个从设备(地址唯一)每个 UART 端口仅支持一对设备支持多个从设备(需独立片选信号)
全双工支持不支持(半双工)支持支持
数据传输可靠性较高,有 ACK/NACK 确认机制依靠硬件/协议,无确认机制较高,无明确协议确认机制
典型应用场景传感器(如温湿度、气压传感器)、EEPROM调试接口、低速外设通信高速外设(如显示屏、ADC、DAC)
易用性中等,需要配置设备地址简单,常用于调试与低速数据传输复杂,需要主控与从设备紧密配合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go语言启动独立进程

文章目录 问题解决方案1. **将 npc.exe 启动为独立的进程**2. **修改 exec.Command 函数**示例代码解释为什么这样有效注意 问题 在你当前的代码中,调用 exec.Command("XXX.exe") 启动 XXX.exe 程序时,这个程序是由 Go 程序直接启动的。如果 …

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)

一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…

Everything实现,快速搜索文件

最近编写NTFS文件实时搜索工具, 类似 Everything 这样, 翻阅了很多博客, 结果大致如下: 1.分析比较肤浅, 采用USN日志枚举来获取文件记录 速度一言难尽, 因为日志枚举的是全盘所有文件的所有日志, 记录比文件记录还多, 速度当然很慢, 还有的甚至于是 使用 DeviceIoControl 函数…

【完美解决】windows打开cmd窗口的时候闪退解决办法

本章教程,主要记录,windows中打开cmd的时候,闪退问题。产生问题的原因,电脑上之前安装了anaconda,卸载之后,就发现cmd无法正常打开,一执行不会弹出窗口。 解决办法 一、打开注册表 regedit二、…

乐凡信息智能安全管控方案:助力油气田行业安全管控多方位升级

我国油田地域广阔,分布着大量各种油井,油井开采设备的连续稳定运行是保证石油开采的首要条件。然而,由于油田多位于特殊地理环境中,因而实现油井之间的通信首要问题就是要克服地理环境所带来的限制,传统通信系统的建设…

2024年企业中生成式 AI 的现状报告

从试点到生产,企业 AI 格局正在被实时改写。我们对 600 名美国企业 IT 决策者进行了调查,以揭示新兴的赢家和输家。 从试点到生产 2024 年标志着生成性人工智能成为企业关键任务的一年。这些数字讲述了一个戏剧性的故事:今年人工智能支出飙升…

L24.【LeetCode笔记】 杨辉三角

目录 1.题目 2.分析 模拟二维数组的大致思想 杨辉三角的特点 二维数组的元素设置代码 两个参数returnSize和returnColumnSizes 理解"有效"的含义 完整代码 提交结果 1.题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉…

“从零到一:揭秘操作系统的奇妙世界”【操作系统中断和异常】

一开始看王道网课,它说内中断就是异常。但是我一查ai,它又说内中断和异常不能等同,是两个概念,这时候我觉得天都塌了。内中断到底是不是异常啊? 我心想我今天一定要把这个搞懂,我来交作业了!我…

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式,把Docker Deskstop的images和container装在D盘中。 安装前&a…

前端关于pptxgen.js个人使用介绍

官方文档链接:Quick Start Guide | PptxGenJS git地址:https://github.com/gitbrent/PptxGenJS/ 1. 安装命令 npm install pptxgenjs --save yarn add pptxgenjs 2. 示例demo import pptxgen from "pptxgenjs"; // 引入pptxgen // 1. Create a Presenta…

Vulnhub靶场Nginx解析漏洞复现

一.nginx_parsing 原理:这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置⽂件中有⼀个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的⽂件,PHP就会向前递归解析。在⼀个⽂件/xx.jpg后⾯加上/.php会将 /xx.jpg/xx.php 解…

harbor离线安装 配置https 全程记录

1. 下载harbor最新版本 下载网址: 找最新的版本: https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz 这里我直接使用迅雷下载, 然后上传 1.1解压 sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /opt/ 2. 配置Harb…

Next.js v15 - 服务器操作以及调用原理

约定 服务器操作是在服务器上执行的异步函数。它们可以在服务器组件和客户端组件中调用,用于处理 Next.js 应用程序中的表单提交和数据修改。 服务器操作可以通过 React 的 “use server” 指令定义。你可以将该指令放在 async 函数的顶部以将该函数标记为服务器操…

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码,在本课程中指的是类似于汇编代码的一种形式,由一条条的指令构成目标代码。 抽象机指令格式:OP 目的操作数,源操作数。 我们要做的&…

JaxaFx学习(三)

目录: (1)JavaFx MVVM架构实现 (2)javaFX知识点 (3)JavaFx的MVC架构 (4)JavaFx事件处理机制 (5)多窗体编程 (6)数据…

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代,智能家居产品如同璀璨繁星般点缀着我们的生活,从智能灯光的温馨到温控系统的精准,处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中,一款极具创新的电热毯——Type-C 接口电热…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…

WSL Ubuntu

文章目录 1. 概述1.1 什么是适用于 Linux 的 Windows 子系统1.2 什么是 WSL 21.3 WSL 2 中的新增功能1.4 比较 WSL 2 和 WSL 1 2. 参考资料3. 修改存储位置4. 网络访问 1. 概述 1.1 什么是适用于 Linux 的 Windows 子系统 适用于 Linux 的 Windows 子系统可让开发人员按原样运…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…