• 欢迎大家分享资料!前往留言板评论即可!

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

合宙 模组资料网 2年前 (2021-05-15) 316次浏览 0个评论 扫描二维码
文章目录[隐藏]

1)I2C总线简介

I2C总线是由Philips公司在1982年提出的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

I2C接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持高电平。

I2C总线上的设备通过不同的I2C地址进行区分,地址定义为7位 A6-A0,由于整字节为8位,因此在单片机上往往用8位表示,分为大端对齐和小端对齐。

I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址可以从器件的数据手册查询),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。

I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。

I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。

下图为基本电路连接示意图。 在物理连接上,各个设备是对等的。 在逻辑上,分主设备和从设备,主设备负责控制时钟和数据线进行通信控制,从设备负责正确响应主设备的时钟信号在数据线上收发数据。

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

2) SMBus总线简介

I2C总线协议有一个姊妹协议SMBus,是由Intel在1995提出的,与I2C总线在协议细节上有所差别,但多数支持I2C的硬件设备兼容SMBus协议。下面是二者区别:

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

可以看到,在一定的速率和工作电压范围内二者协议是兼容。

2)I2C的基本时序

总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。总线在空闲状态时,SCL和SDA都保持着高电平,当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;当SCL为高而SDA由低到高的跳变,表示产生一个停止条件。在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。如图所示:

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将控制SDA线,回传给主设备一个应答位ACK,或非应答位NACK。 0表示应答ACK,数据传输正常,1表示非应答NACK,表示数据传输终止。

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,设备的地址是7位,添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

3) I2C实际应用

对I2C总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:

第一,主设备往从设备中写数据。数据传输格式如下

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

第二,主设备从从设备中读数据。数据传输格式如下

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

第三,主从设备连续进行读写操作,即主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。重启条件为,应答位后,从机拉低SCL。

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

4) I2C总线的测试方法

对于I2C总线,由于每个字节的传输需要从设备进行应答,因此必须使用支持I2C总线的设备进行总线测试,比较常见的有I2C设备有Flash芯片24C01等。

上海合宙Luat Air720SL模块 入门指南(7)-I2C接

在下一篇文章,我用Luat编程方式编写驱动对I2C总线进行相关测试。 感谢您的耐心阅读。


喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址