i2c总线介绍
i2c(inter-integrated circuit)总线是由philips公司开发的一种双向二线制同步串行总线,它只需要两条线(sda,scl)即可在连接于总线上的器件之间传送信息。i2c总线的工作速率有100k、400k和4m三种,支持多机通讯,支持多主控模块但同一时刻只允许有一个主控端。
scl(serial clock):边沿触发方式,上升沿将数据输入到eeprom,下降沿驱动eeprom输出数据。
sda(serial data line):双向数据线,od门,每次传输8bit。
成都英创eta202 i2c矩阵键盘扩展模块
i2c总线中主要定义如下:
发送机(transmitter):向总线传输数据的设备。
接收机(receiver):从总线接收数据的设备。
主机(master):产生时钟、启动发送、发送i2c命令、停止发送的设备。
从机(slave):监听总线并且被主机寻址的设备。
多主控(multi-master):总线上可以有多个主机,每一个都可以发送命令。
仲裁(arbitration):在有多个主机同时尝试控制总线时,只允许其中一个控制总线并使报文不被破坏的过程。
同步():两个或多个设备同步时钟信号的过程。
scl和sda信号都是双向的,他们通过电阻连接到电源上,总线空闲时两条线都处于高电平状态。i2c总线上的设备都必须有集电极开路或者漏极开路管脚,激活总线意味着拉低其电平。单个总线上的设备数量几乎是无限的,唯一的要求是总线电容不超过400pf。由于逻辑1取决于电源电压的大小,因此没有标准的总线电压。
i2c总线挂载设备示意图
i2c时序分析
总线空闲
sda和scl两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线的上拉电阻把电平拉高。
启动信号start
时钟信号scl保持高电平,数据信号sda的电平被拉低。启动信号必须是跳变信号,而且在建立该信号前必须保证总线处于空闲状态。
停止信号stop
时钟信号scl保持高电平,数据线被释放,使sda返回高电平,停止信号也必须是跳变信号。
i2c启动信号start与停止信号stop
应答信号ack
发送器每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个应答信号ack(将sda的电平拉低)来表示数据成功接收。
无应答信号nack
在时钟的第9个脉冲期间发送器释放数据总线,而接收器不拉sda电平,则表示一个无应答信号nack,nack有两种用途:
(1)一般表示接收器未成功接收数据字节。
(2)当接收器是主机时,它收到最后一个字节后,应发送一个nack信号,以通知从机结束数据发送,并释放总线,以便主机发送停止信号stop。
数据传输
每个时钟脉冲传输1比特数据。sda信号只在scl处于低电平时变化,scl处于高电平期间,sda电平必须保持稳定。
i2c数据传输时sda与scl电平变化情况
i2c数据传输流程
i2c总线协议
基本工作原理
主设备以启动信号start来掌管总线,以停止信号stop来释放总线。主设备启动的每一个i2c命令均以start开始,以stop结束。
启动信号start后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位r/w。r/w为0表示主机向从机写数据,r/w为1表示主机从从机读取数据。当从机检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号。每个数据字节在传送时都是高位(msb)在前。
i2c基本工作流程
写数据过程
1、主机检测到总线空闲之后,发送启动信号start信号掌管总线。
2、主机发送一个地址字节(包括7位地址码和1位r/w)。
3、当从机检测到主机发送的地址与自己的地址相同以后,发送应答信号(ack)。
4、主机收到应答信号ack后,开始发送第一个数据字节。
5、从机收到数据字节后,发送应答信号ack表示继续传送数据,发送nack表示数据传送结束。
6、主机发送完全部数据后,发送停止信号stop,结束通讯并释放总线。
读通讯过程
1、主机检测到总线空闲之后,发送启动start信号掌管总线。
2、主机发送一个地址字节(包括7位地址码和1位r/w)。
3、当从机检测到主机发送的地址与自己的地址相同以后,发送应答信号ack。
4、主机收到应答信号ack后释放数据总线,开始接收第一个数据字节。
5、主机收到数据字节后,发送应答信号ack表示继续传送数据,发送nack表示数据传送结束。
6、主机完成接收以后,发送停止信号stop,结束通讯并释放总线。
同步
每个主机必须生成自己的时钟信号,只有当时钟信号电平为低时,数据才能改变。执行总线仲裁必须有同步时钟。当某个主机拉低时钟电平时,时钟会并保持低电平,直到所有主机均将时钟拉至高电平。同样,时钟会处于高电平状态,直到第一个主机将其拉低。这样,通过观察scl信号,主设备可以同步它们的时钟。
仲裁
对于i2c总线上的正常数据传输过程而言,只允许一个主机进行控制。如果出于某种原因,两个主机同时启动i2c命令,则仲裁过程决定哪个主机获得控制权并且可以继续执行命令。仲裁是通过sda信号执行的,此时scl信号处于高电平。每个主机检查总线上的sda信号是否对应于自己生成的sda信号。如果总线上的sda信号应该是高电平但它却处于低电平,那么这个主机就在仲裁过程中失败。仲裁失败的i2c主设备可以产生scl脉冲直到字节结束,然后必须释放总线并进入从设备模式。仲裁过程可以持续到所有数据传输完毕以后。这意味着在多主机系统中,每个i2c主机必须监控i2c总线并执行相关操作。
i2c总线典型电路
现在的arm cpu芯片普遍直接支持i2c总线,直接从cpu中将相应管脚引出,即可以外接i2c功能模块或者芯片,然后通过软件进行控制操作。
下图为一个典型的i2c应用扩展(成都英创eta202 i2c矩阵键盘扩展模块部分电路),使用tca8418芯片扩展出8x8矩阵键盘。直接将sda、scl、键盘中断信号key_int#和复位信号rst#接入芯片,并接上电源和地,即可以控制8x8矩阵键盘。
i2c总线在英创主板平台上的应用
支持i2c接口的芯片都可以直接和英创主板连接,并执行相应的功能。历年来,大量用户使用英创主板进行i2c应用和数据处理,英创也累积了丰富的工程经验。下面整理出了英创网站发表的相关技术文档供用户参考。虽然有一些方案文档中提到的英创主板是较老的型号,用户在新产品开发的时候未必会使用这些老主板产品,但是文中的软硬件使用技巧、编程技巧和方法等技术细节,是值得用户参考或者直接使用的。
使用方法与技巧
英创工业主板em9160的gpio应用于i2c通讯嵌入式linux工控板em9160的i2c功能及其应用
em9170工控主板i2c总线使用方法java操作英创主板i2c接口简介
数据能“喂养”出真正的人工智能吗?(含2019年1-7月数据服务企业融资分析)
呼吸机热门连接器推荐:YM系列工业级连接器不只防腐
贸泽电子联手Microchip和Crowd Supply推出2020 Get Launched设计计划
红外线探测器接线方式_红外线探测器的安装高度
华为2017首发!华为荣耀V9速度全方位开挂
英创信息技术I2C接口协议的简介与用途
关于螺丝RFID载码体在发动机制造中的应用分析
如何利用电子电路来实现逻辑运算
利元亨科创板IPO申请获上交所受理
电机碳刷打火的原因
自制红外线自动门控制器电路制作方案
低边SiC MOSFET导通时的行为
小米在印度市场曾遭受挫折,采用联发科芯片有助于提升市场份额
超声波液位计抗干扰设计的详细说明
无线测温产品在工厂配电项目的应用
国产服务器网卡和进口芯片服务器网卡性能测试
如何降低LED照明基板的热度
格力董事长表示格力才是世界上最好的空调不用格力你是傻瓜
魅族发言人:Flyme9隐私保护可与苹果iOS系统相媲美
太空武器系统技术有哪些技术