iic通信协议原理(https协议原理)

一、基本概念。I2C总线(I2Cbus,Inter-ICbus)是一个双向的两线连接总线,提供集成电路之间的通信线路。I2C属于一种串行扩展技术,广泛应用于电视、录像机、音频设备。I2C的意思是“完成集成电路或者功能单元之间信息交换的规范或协议”,采用一条数据线(SDA)和一条时钟线(SCL)来完成数据的传输以及外围器件的扩展。通信的原理是控制SCL和SDA的时序,时期满足总线协议从而进…

大家好,又见面了,我是你们的朋友全栈君。

一、基本概念。
I2C总线(I2C bus,Inter-IC bus)是一个双向的两线连接总线,提供集成电路之间的通信线路。I2C属于一种串行扩展技术,广泛应用于电视、录像机、音频设备。I2C的意思是“完成集成电路或者功能单元之间信息交换的规范或协议”,采用一条数据线(SDA)和一条时钟线(SCL)来完成数据的传输以及外围器件的扩展。
物理拓扑结构图
通信的原理是控制SCL和SDA的时序,时期满足总线协议从而进行数据的传输。
I2C总线上每一个设备都可以作为主机或者从机,而且每一个设备都会对应一个唯一的地址(地址可以从器件手册得知)。主从设备之间通过这个地址来确定与哪个器件进行通信。
I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。主设备与从设备之间以字节(8位)位单位进行双向的数据传输。

二、时序介绍。
整体时序图如下:
I2C协议整体时序图
协议时序状态说明:
(1)总线空闲状态:SDA为高电平,SCL为高电平。
(2)I2C协议起始位:SCL为高电平,SDA出现下降沿,产生一个起始位。
(3)I2C协议结束位:SCL为高电平,SDA出现上升沿,产生一个结束位。
(4)I2C读写数据状态:主要包括数据的串行输入输出和数据接受方对数据发送方的响应信号。具体的时序如图:
读写数据具体时序
当主机向从机写入数据时,SDA上的数据在SCL的高电平期间被写入从机中。从主机的角度看,需要在SCL低电平期间改变要写入的数据。而当主机读从机中的数据时,从机在SCL低电平期间改变要写入的数据,在SCL的高电平期间数据保持稳定,从主机角度看,需要在SCL的高电平期间将SDA上的数据读取存储。
数据传输过程:每当一个字节的数据或命令传输完成时,数据接受方会发送一位应答位,在响应应答位时,数据发出方将SDA总线设置为三态输入,由于总线上都有上拉电阻吗,因此此时总线默认为高电平,若数据接受方正确接受数据,则数据接受方将SDA总线拉低,表示此次的数据或命令接受成功。所以,主机将一字节的数据或命令传出后,会将SDA信号设置为三态输入,等待从机应答,即SDA被从机拉为低电平,若应答正确,表明可以结束或开始下一个数据或命令的传输,否则表明当前的数据或命令传输失败,主机就可以放弃写入或者重新发起写入。

三、I2C器件地址。
每个I2C器件都有一个器件地址,有的器件地址在出厂就设置好,无需更改,有的留下几个控制地址的引脚,由用户自己在硬件设计时确定。
一般情况下主机和从机的角色是确定的,主机向总线上发送地址信息,这条总线上所有的从机都会接收到总线上发来的地址,并与从机本身的地址做比较,如果一致,则匹配成功,相应的从机向总线上发送一位应答位,表示此次通信建立起来了,主机没有收到应答信号则表示寻址失败。
I2C协议在进行数据传输时,主机首先需要向总线上发出控制命令,其中,包括从机的器件地址和读写控制,然后等待相应的从机响应。如图:
控制命令传输数据格式
I2C 传输时,按照从高到低的位序进行传输。控制字节的最低位为读写控制位,当该位为 0 时表示主机对从机进行写操作,当该位为 1 时表示主机对从机进行读操作。例如,当需要对片选地址为 3’b100 的器件 发起写操作,则控制字节应该为 1010_100_0。若进行读操作,则控制字节应该为 1010_100_1。

四、I2C存储器地址。
每个支持I2C协议的器件,内部总会有一些可供读写的寄存器或存储器,因此,我们需要对一个器件的存储单元进行读写,就必须要能够指定存储器单元的地址。I2C协议设计了有从机存储器单元寻址地址段,该地址段为一个字节或两个字节长度,在主机确认收到从机返回的控制字节响应后由主机发出,地址长度因器件类型不同。以下是一个字节和两个字节的示意图:
一个存储器字节地址
存储器两个字节地址

五、I2C写时序。
1、单字节写时序:不同器件地址字节不同,所以对于写时序会有差别,图示为1字节地址段器件单字节写时序图。
iic通信协议原理(https协议原理)
根据时序图,从主机的角度分析一次写入单字节数据过程如下;
a、主机设置SDA为输出;
b、主机发出起始信号;
c、主机传输器件地址字节,其中最低位为0,表明为写操作;
d、主机设置SDA为三态输入,等待读取从机应答信号;
e、读取应答位信号成功,主机设置SDA为输出,传输1字节地址数据;
f、主机设置SDA为三态输入,读取应答信号;
g、读取应答信号成功,对于两字节地址段器件,传输地址数据低字节,对于1字节地址段器件,主机设置为输出,开始传输待写入的数据;
h、设置SDA为三态输入,读取应答信号,对于两字节地址段器件,接着发送一次低字节位地址信息,并读取应答信号;
i、读取应答信号成功,主机产生STOP位,终止传输。
2、I2C连续写时序(页写时序)
连续写也称页写,但不是所有的器件都支持连续写时序,连续写是主机连续写多个字节数据到从机,和单字节写操作类似,下图为连续写时序:
页写时序

六、I2C读时序。
1、单字节读时序。
单字节读操作分为1字节地址段器件单字节数据读操作和2字节地址段器件单字节数据读操作。以下为1字节地址段器件单字节数据读操作:
1字节地址段器件
从主机角度描述一次读取数据过程:
a、主机设置SDA为输出;
b、主机发起起始信号;
c、主机传输器件地址字节,其中最低位为0,表明为写操作;
d、主机设置SDA为三态输入,读取从机应答信号;
e、读取英达信号成功,主机设置SDA为输出,传输1字节地址数据;
f、主机设置SDA为三态输入,读取从机应答信号;
g、读取应答信号成功,主机设置SDA为输出,对于两字节的地址段器件,接着传输低字节地址数据,对于1字节地址段器件跳过次步骤;
h、主机发起起始信号;
i、主机传输器件地址字节,其中最低位为1,表明为读操作;
j、设置SDA为三态输入,读取从机应答位信号;
k、读取应答位信号成功,主机设置SDA为三态输入,读取SDA总线上的一个字节的数据;
l、产生无应答信号(高电平),无需设置为输出高电平,由于上拉电阻的原因,总线会被自动拉高。
m、主机产生STOP位,终止传输。
2、连续读时序(页读取)
连续读是主机连续从从机读取多个字节数据,这个和单字节读操作类似。如下:
连续读时序

具体时序分析类似于单字节读取。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129600.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月14日 上午7:00
下一篇 2022年4月14日 上午7:00


相关推荐

  • wlan无线网络密码激活成功教程

    wlan无线网络密码激活成功教程WPA PK 的激活成功教程 不像 WEP 一样抓很多的包就能够激活成功教程出密码 目前 WPA PSK 的激活成功教程几乎还是靠字典 而且要先捕捉到握手包 4way handshake 四次握手包 其中包含了 SSID AP MAC STATION MAC ANonce SNonce MIC 激活成功教程实例 环境 KaliLinux 工具 Aircrack ng 第一步 iwconfig 命令查看加载的网卡第二步 airmon ngstartwlan0

    2026年3月18日
    2
  • 基于Linux搭建Apache网站服务配置详解

    基于Linux搭建Apache网站服务配置详解

    2021年7月6日
    69
  • 公有云和私有云的区别正确的是_私有云安全性相对公有云更好

    公有云和私有云的区别正确的是_私有云安全性相对公有云更好私有云和公有云的显著差别在于对数据的掌控。只需一分钟,下面几张图就能让你看懂公有云和私有云的本质区别。私有云和公有云的显著差别在于对数据的掌控。采用公有云服务的企业必须将数据托管于云服务商的数据中

    2022年8月6日
    6
  • CPLD和FPGA的区别

    CPLD和FPGA的区别下面我们整理一下CPLD和FPGA的主要区别:1)CPLD的逻辑阵列更适合可重复编程的EEPROM或Flash技术来实现。而FPGA显然是利用SRAM技术更合适。2)由于是EEPROM或者Flash工艺决定了CPLD是有一定的擦写次数限制的。而FPGA在实际使用中几乎可以说是无配置次数限制。3)CPLD由于采用的是EEPROM或者Flash工艺所以配置掉电后不丢失,也就不需要外挂配置芯片。而FPGA采用的是SRAM工艺,配置在掉电后就没有了,因此需要一个外部配置芯片。4)CPLD的安

    2022年5月4日
    63
  • 串行通信(USART/UART)「建议收藏」

    串行通信(USART/UART)「建议收藏」USART支持同步模式,因此USART需要同步始终信号USART_CK(如STM32单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。UART作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一条线,因此通过UART接口与外界相连最少只需要三条线:TXD(发送)、RXD(接收)和GND(地线)**空闲位:**数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲,没有数据传输。**起始位:**.

    2022年5月18日
    34
  • C++ 简单FTP客户端软件开发

    C++ 简单FTP客户端软件开发题目简单 FTP 客户端软件开发 100 分 网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中 而文件传送协议 FTP 是因特网上使用得最广泛的文件传送协议 FTP 使用客户服务器方式 设计要求 1 以命令行形式运行 2 该 FTP 客户端程序具有以下基本功能 能完成 FTP 链接的打开和关闭操作 能执行文件的上传和下载 能完成目录的创建 删除等有关操作 3 设计中加入新的功能 登录 进入上级或下级目录要求可以传输简单的文本文件 设计思路 1 分为两个端口 指令交流端口 数据交换端

    2026年3月26日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号