大家好,这里是程序员 杰克 。一名平平无奇的嵌入式软件工程师。
作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过i2c接口的外设。诸如常用的存储器eeprom等皆是i2c接口进行通信。
本系列推文主要是对i2c总线进行总结和分享,本篇推文主要是对i2c总线及其通讯时序进行介绍和分享。后续会分别出推文分享mcu实现i2c接口以及在fpga实现i2c逻辑时序。
下面正式进入本章推送的内容。
01 i2c总线介绍
i2c总线是由philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的集成ic器件之间 双向通信 。其特点如下:
i2c总线上的每个设备都可以作为主机或从机,当多个主机需要使用总线时,通过仲裁方式决定特定主机的优先占用.
每个设备都有 唯一地址 ,总线上通过地址识别来确定通信的主从双方.
连接到相同总线的设备数量受到总线的最大电容400pf限制.
总线物理连接
i2c作为总线,其总线上会挂载很多的设备,下图为一个典型的总线拓扑:
i2c总线的物理连接上比较简单,由 sda(串行数据线) 、 scl(串行时钟线) 、上拉电阻组成。单一设备硬件电路如下图所示(eeprom-24c02为例):
特别说明:
多个器件连接在一条总线上时,sda、scl上各有一个上拉电阻便可.
通信模式
i2c总线支持三种模式: 标准模式 、 快速模式 、 高速模式 ,其对应的速率如下表所示:
模式速率(bit/s)
标准模式 100k
快速模式 400k
高速模式 3.4m
i2c协议整体时序
对于一个完整的i2c协议而言,其包括起始位、主从数据交互以及停止位。整体时序、组成如下所示:
组成描述
空闲状态 总线空闲时,sda、scl皆为高电平
起始位 scl为高电平时,sda出现下降沿
主从数据交互(数据+应答) 数据:1字节的控制帧/数据帧
应答:数据传输完成后的下一个时钟沿,sda-0表示应答,sda=1表示非应答.
停止位 scl为高电平时,sda出现上升沿
02 i2c读写时序介绍
i2c总线上的设备主动发起通信时作为主机,被动接收时作为从机。因此对于i2c读写时序而言,分为主机、从机读写时序。本篇主要是描述主机的读写时序操作,从机的时序不在此系列推文分享。
i2c写时序(主机)
对于i2c主机在scl时钟驱动下的基本写时序组成如下所示:
写时序组成描述
起始位 scl为高电平时,sda出现下降沿. 表示一次总线通信的开始. 由主机发起.
控制帧(8bit)(主机->从机) 由从机地址(slave_address)和操作位(r/w)组成.r/w:控制帧[0]为操作位,0-表示写,1-表示读;控制帧[7:1]为从机地址,具体使用的位数由器件决定;
应答位(从机->主机) 从机接收到对应的控制帧后,匹配到器件地址后,会返回一个应答ack信号;主机只有接收到应答后,才会发送数据;
数据帧(8bit)( 主机->从机 ) 主机写到从机的1字节数据(8bit).
应答/非应答( 从机->主机 ) 从机接收到对应的数据帧后,会根据具体器件,选择返回一个应答ack/非应答nack信号.
停止位 scl为高电平时,sda出现上升沿. 表示一次总线通信的结束. 由主机发起.
i2c读时序(主机)
对于i2c主机在scl时钟驱动下的基本读时序组成如下所示:
读时序组成描述
起始位 scl为高电平时,sda出现下降沿. 表示一次总线通信的开始. 由主机发起.
控制帧(8bit)(主机->从机) 由从机地址(slave_address)和操作位(r/w)组成.r/w:控制帧[0]为操作位,0-表示写,1-表示读;控制帧[7:1]为从机地址,具体使用的位数由器件决定;
应答位(从机->主机) 从机接收到对应的控制帧后,匹配到器件地址后,会返回一个应答ack信号;主机只有接收到应答后,才会发送数据;
数据帧(8bit)(从机->主机) 从机返回给主机的1字节数据(8bit).
应答/非应答(主机->从机) 主机接收到从机返回的数据帧后,会根据具体器件,选择返回一个应答ack/非应答nack信号给从机.
停止位 scl为高电平时,sda出现上升沿. 表示一次总线通信的结束. 由主机发起.
特别说明:
i2c主机的读写时序的起始位、控制帧、控制帧应答以及停止位是一致的,差异主要体现在是数据帧、数据帧的应答的主从方向上。
差异点写时序读时序
数据帧(8bit) 主机写入到从机(主->从) 从机返回给主机(从->主)
应答/非应答 从机做出应答/非应答(从->主) 主机做出应答/非应答(主->从)
03 文章总结
i2c总线以其外围电路简单、占用pcb面积小、总线可挂载多节点设备等特点而被广泛应用,因此,对于学习i2c总线的电路结构、时序还是很有必要的。
基于labview8.5和QLI50气象数据采集器实现自动气象站软件的设计
PyTorch教程-3.4. 从头开始执行线性回归
谷歌开发出癌症检测算法 AI监测准确率达到99%
线路板与油气板块的互利共赢关系:线路板如何适应和推动油气行业的发展和创新
首个自动驾驶低速无人车团体标准已正式发布
I2C总线介绍 I2C读写时序介绍
7步设计完美PCB
新宙邦发布2020年第一季度业绩预告 预计盈利比上年同期增长40%至60%
美高森美精确时间协议客户端容量增加到四倍
锂电负极材料募投项目投资资金及经济指标对比
海外网络专线的七大用处
开关电源测试ate要检测哪些项目?ATECLOUD测试系统如何助力?
基于LabVIEW的无线温度测控系统设计方案
半导体制冷和压缩机制冷哪个好
OTN未来将趋向于可编程网络方向的发展
LTE230无线通信系统设计要点
海信TOUCH 5月20日震撼来袭 音阅星推官王博文、李歌洋邀你共同见证
经典重生,两款诺基亚手机入网工信部
三星石墨烯电池12分钟充满电
SMT贴片打样的价格如何定义