历史上的今天
今天是:2024年11月01日(星期五)
2021年11月01日 | ARM之I2C总线协议介绍
2021-11-01 来源:eefocus
I2C总线协议
概述:I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域挂规范采用的一种总线标准。是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。Exynos4412芯片包含8个通用I2C接口控制器。
I2C主从机设备连接

I2C总线物理连接

特点
半双工。
只要求两条总线线路:一条串行数据线SDA(Serial Data Address),一条串行时钟线(Serial Clock Address)。
每个连接到总线的器件都可以通过唯一的地址。
真正的多主机总线,支持冲突检测和仲裁,防止数据破坏。
串行8位双向数据传输位。
速率在标准模式下可达100kbit/s、快速模式下可达400kbit/s、高速模式下可达3.4Mbit/s。
片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整。
连接到相同总线的IC数量只受到总线的最大电容400pF限制。
I2C总线内容
I2C引脚
SDA(I2C数据引脚);
CLK(I2C时钟引脚);

I2C信号类型
I2C总线在数据传输过程中有三种信号,它们分别是:开始信号(S)、结束信号(P)、应答信号(ACK)。

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收设备在接收到8bit数据后,在第9个时钟周期,向发送设备发送低电平,表示成功收到数据。
I2C总线时序
当I2C总线是空闲的,SDA和SCL线都是高电平。I2C数据通信的主机发送开始信号(S)起始,到主机发送停止信号(P)结束。在开始信号和结束信号之间以字节为单位传输数据,每个字节后必须跟一个响应位,每次传输可以发送的字节数量不受限制。数据是一位一位地进行传输,先传输高位(MSB),再传输低位(LSB)。
发送器作为数据的发送方,接收器作为数据的接收方。根据SCL上的时钟信号进行数据传输同步,保证数据有效传输。SCL时钟为低电平周期时发送器发送数据,SDA线上数据可以发送变化,SCL时钟为高电平周期时接收器接收数据,SDA线上数据必须保持稳定。

I2C总线ACK信号
为了完成一个字节的发送操作,接收器必须将一个ACK信号发送到发送器。ACK信号在SCL线的第9个时钟周期产生。发送完一个字节后,第9个时钟周期发送器释放对SDA线的控制,SDA线由于上拉电阻的作用恢复到高电平。接收器如果接收数据成功,将SDA线置低电平作为ACK信号。发送器收到ACK信号,继续发送数据;接收器如果接收数据失败,则在第9个时钟周期不动作,SDA一直为高电平、发送器没有接收到ACK信号,就会发出停止信号停止本次通信或开始发送开始信号,重新发送。

I2C设备地址

I2C设备用一个7位或10位的数字,唯一标识自己。方便主机寻找自己,建立I2C通信。I2C设备地址由固定地址和可编程部分构成。这样I2C总线就可以支持一个I2C总线上挂载多个同样的器件,而地址不同。I2C地址的可编程部分最大数量就是可以连接到I2C总线上相同器件的数量。一般可编程的部分的值,由特定引脚的电器连接决定。
I2C总线地址寻址及数据传输方向控制
I2C总线的寻址过程是通常在起始信号后的第一个字节决定了主机选择哪一个从机。例外的情况是可以寻址所有器件的广播地址,使用这个地址时理论上所有器件都会发出一个响应,但是也可以使器件忽略这个地址。
第一个字节的头7位组成了从机地址,第8位它决定了数据传输的方向,第一个字节的最低位是0表示主机会写信息到被选中的从机;1表示主机会向从机读信息;
7位寻址

10位寻址和7位寻址兼容,而且可以结合使用。10位寻址过程是起始信号后的头两个字节,通常决定了主机要寻址哪个从机。10位从机地址由在起始条件信号或重复起始信号后的头两个字节组成。第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位(MSB)。第一个字节的第8位是R/W位,决定了数据传输的方向,第一个字节的最低位是=0,表示主机会写信息到被选中的从机;1表示主机会向从机读信息。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 再来分享一下2007全国大学生电子设计竞赛D题程控滤波器的三个方案设计吧~~~~ 原题: 程控滤波器(D题) 【本科组】 一、任务 设计并制作程控滤波器,其组成如图1所示。放大器增益可设置;低通 ...… 查看全部问答> |
|
一包一包的标准视频数据(或MPEG4, H263)送给播放器,播放器可以播放. WinCE上能实现这样的功能吗?网上有这样的源码吗(简单的)? 能给一些参考意见吗?… 查看全部问答> |
|
请问驱动程序版本号中各个字段的的意义是什么?比如一个驱动程序的版本号为:5.01.2600.0000,这四段字节的意义分别是什么呢?谢谢!… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 在失去全球PC市场第二排名九个月之后,戴尔在2010年第二季度夺回亚军位置。同期台湾的宏基销量下降。 戴尔第二季度全球出货量为1050万台,比第一季度的1070万台略降1.2%。第二季度全球出货量 ...… 查看全部问答> |
|
在下面的程序我发现"UART_SendData8"打印的数据为BB CC 00,这是怎么回事? 还有,我把a,b,c都定义成int就可以正确的打打印的数据为基础00 aa 00 bb 00 cc. void sum(u8 msg, ...) { ...… 查看全部问答> |
|
主控采用LM3S6911,TMP75接口原理图如下 tmp75接口原理图 #include \"sysinit.h\"#include \"tmp75.h\"#include\"yifan_UART_init.h\" float temperature;char temper[6]; void I2C ...… 查看全部问答> |
|
小弟最近学习zigbee,想试着将人体红外感应信号采集到zigbee芯片中,用的是成都感智的zigbee无线模块两块,各位大神能给点建议么?小弟现在的问题是i/o接口21个,具体我应该用哪个?驱动程序如何写?拜托了各位,谢谢… 查看全部问答> |




