Linux I2C驱动分析1 - I2C总线协议

一. I2C总线简介

        I2C是Philips设计的一套总线规范,其中包括了硬件上的设计参考和软件的总线上的数据传输的时序。I2C总线上一个主机可以连接多个从机,主机通过从机的地址和从机交互。

        I2C总线现在的应用可以说是不胜枚举,非常多的传感器,EEPROM,LCD驱动芯片等都是通过I2C总线控制。

        本文主要讲解7位地址格式的I2C总线的时序部分。

二. I2C总线的一些基本概念

1. 发送器

        发送数据到总线的器件。所以I2C总线上的所有器件都可以是发送器,由器件功能决定,例如,LCD驱动芯片就只需要接收,而不需要发送。

2. 接收器

        从总线上接收数据的器件。

3. 主机

        初始化发送,产生时钟信号和停止发送的器件,通常指CPU。

4. 从机        

        被主机寻址的器件。

5. 多主机

        同时有多个主机尝试控制总线,但是不破坏报文。

6. 仲裁

        在一个有多个主机尝试控制总线,但只允许其中一个主机控制总线但是不破坏报文的过程。

7. 同步

        两个或多个器件同步时钟信号的过程。

总结

        1. 主机或从机都可能是发送器和接收器,视器件的功能而定。

        2. 发送信号,终止信号,时钟信号都是由主机发出的。

        3. 从机是通过被主机寻址,从而与主机交互数据。

        4. 当一个总线上出现多个主机时,主机间需要通过仲裁产生一个允许控制总线的主机。

三. 7位地址格式的I2C总线的时序

1. I2C数据传输

I2C数据传输时序:

         在SDA线上的每个字节必须为8位,每次传输可以发送的字节数量没有限制,但是每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后才能接收下一个字节,从机可以将SCL保持低电平,进入等待状态。当从机准备好接收下一个字节并释放时钟线,数据会继续传输。

2. 7位地址传输格式

7位的地址格式:

        7位地址格式表示start信号后的第一个字节表示地址,地址由bit1-7和bit8 R(1)/W(0)组合而成。地址的范围由下表所示。

从机地址

    R/W 位

 描述

0000 000

0

广播呼叫地址

0000 000

1

起始字节

0000 001

X

CBUS地址

0000 010

X

保留给不同的总线格式

0000 011

X

保留到将来使用

0000 1XX

X

Hs模式主机码

1111 1XX

X

保留到将来使用

1111 0XX

X

10位从机地址

3. 起始和停止信号

         从上图可以看出,当时钟线(SCL)为高电平时,数据线(SDA)由高电平向低电平切换,这种情况表示起始信号。当时钟线(SCL)为高电平时,数据线(SDA)由低电平向高电平切换,这种情况表示停止信号。总线在起始信号后,停止信号前都被认为是忙状态,在停止信号一段时间后,总线被认为是空闲状态

总结:

        当时钟线(SCL)为高电平时,数据线(SDA)电平变化会产生起始或停止信号。所以在传输实际数据时,数据线(SDA)电平变化时,时钟线(SCL)必须为低电平。

4. 响应

        数据传输必须带响应。响应的时钟(SCL)脉冲由主机输出,在响应时,发送器不控制数据线(SDA)电平信号,由接收器控制。并且在响应期间,接收器必须将SDA拉低,使在这个时钟的高电平期间保持稳定低电平。

四. 总结

        本文介绍了7位地址格式的I2C协议和时序特点,为后面分析Linux内核I2C打基础。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值