I2C、I2S、SPI、GPIO模拟I2C学习笔记

 

1.  什么是 I2C总线

NXP 半导体(原 Philips半导体)于 20 多年前发明了一种简单的双向二线制串行通信总线,这个总线被称为 Inter-IC 或者 I2C 总线。目前 I2C 总线已经成为业界嵌入式应用的标准解决方案,被广泛地应用在各式各样基于微控器的专业、消费与电信产品中,作为控制、诊断与电源管理总线。多个符合 I2C 总线标准的器件都可以通过同一条 I2C总线进行通信,而不需要额外的地址译码器。由于 I2C是一种两线式串行总线,因此简单的操作特性成为它快速崛起成为业界标准的关键因素。 

2. I2C总线的众多优秀特点 

    总线仅由 2根信号线组成   由此带来的好处有:节省芯片 I/O、节省 PCB 面积、节省线材成本,等等。 

    总线协议简单   I2C 总线的协议原文有好几十页,如果直接让初学者来看确实头大,但是并不意为着 I2C 总线协议本身就复杂。 本文撰写的目的就是服务于广大初学者,仅数页的正式内容,图文并茂,容易入门。相信读者认真看过之后,就能基本上掌握 I2C 总线的要领,为进一步操控具体的器件打下良好的基础。 

    协议容易实现   得益于简单的协议规范,在芯片内部,以硬件的方法实现 I2C 部件的逻辑是很容易的。对应用工程师来讲,即使 MCU内部没有硬件的 I2C总线接口,也能够方便地利用开漏的 I/O(如果没有,可用准双向 I/O代替)来模拟实现。 

    支持的器件多   NXP 半导体最早提出 I2C 总线协议,目前包括半导体巨头德州仪器(TI) 、 美国国家半导体 (National Semi) 、 意法半导体 (ST) 、 美信半导体 (Maxim-IC)等都有大量器件带有 I2C 总线接口,这为应用工程师设计产品时选择合适的 I2C 器件提供了广阔的空间。 

    总线上可同时挂接多个器件   同一条 I2C 总线上可以挂接很多个器件,一般可达数十个以上,甚至更多。器件之间是靠不同的编址来区分的,而不需要附加的 I/O 线或地址译码部件。 

    总线可裁减性好   在原有总线连接的基础上可以随时新增或者删除器件。用软件可以很容易实现 I2C 总线的自检功能,能够及时发现总线上的变动。 

    总线电气兼容性好   I2C 总线规定器件之间以开漏 I/O 互联,这样,只要选取适当的上拉电阻就能轻易实现 3V/5V逻辑电平的兼容,而不需要额外的转换。 

    支持多种通信方式   一主多从是最常见的通信方式。此外还支持双主机通信、多主机通信以及广播模式等等。 

    通信速率高   I2C 总线标准传输速率为 100kbps(每秒 100k 位) 。在快速模式下为400kbps。按照后来修订的版本,位速率可高达 3.4Mbps。 

    兼顾低速通信   I2C总线的通信速率也可以低至几kbps以下, 用以支持低速器件 (比如软件模拟的实现)或者用来延长通信距离。 

    有一定的通信距离   一般情况下,I2C 总线通信距离有几米到十几米。通过降低传输速率等办法,通信距离可延长到数十米乃至数百米以上。

3. I2C总线的信号线 

I2C 总线只需要由两根信号线组成, 一根是串行数据线 SDA, 另一根是串行时钟线 SCL。在系统中,I2C 总线的典型接法如图 1 所示,注意连接时需要共地。 

一般具有 I2C总线的器件其 SDA和 SCL 管脚都是漏极开路 (或集电极开路) 输出结构。因此实际使用时,SDA 和 SCL 信号线都必须要加上拉电阻 Rp(Pull-Up Resistor) 。上拉电阻一般取值 3~10KΩ。开漏结构的好处是: 

    当总线空闲时,这两条信号线都保持高电平,不会消耗电流。 

    电气兼容性好。上拉电阻接 5V电源就能与 5V逻辑器件接口,上拉电阻接 3V电源又能与 3V逻辑器件接口。 

    因为是开漏结构,所以不同器件的 SDA 与 SDA 之间、SCL 与 SCL 之间可以直接相连,不需要额外的转换电路。 

4. I2C总线的基本概念 

    发送器(Transmitter) :发送数据到总线的器件 

    接收器(Receiver) :从总线接收数据的器件 

    主机(Master) :初始化发送、产生时钟信号和终止发送的器件 

    从机(Slave) :被主机寻址的器件 

I2C 总线是双向传输的总线,因此主机和从机都可能成为发送器和接收器。如果主机向从机发送数据,则主机是发送器,而从机是接收器;如果主机从从机读取数据,则主机是接收器,而从机是发送器。不论主机是发送器还是接收器,时钟信号 SCL 都要由主机来产生。  

 5. I2C总线数据传送速率 

I2C 总线的通信速率受主机控制,能快能慢。但是最高速率是有限制的,I2C 总线上数据的传输速率在标准模式(Standard-mode)下为 100kbps(每秒 100k 位) ,在快速模式下为400kbps。按照后来修订的版本,位速率最高可达 3.4Mbps。

6. I2C总线上数据的有效性(Data validity) 

    数据线 SDA 的电平状态必须在时钟线 SCL 处于高电平期间保持稳定不变。SDA 的电平状态只有在 SCL 处于低电平期间才允许改变。但是在 I2C总线的起始和结束时例外。 

注:某些其它的串行总线协议,如 SPI,可能规定数据在时钟信号的边沿(上升沿或下降沿)有效,而I2C总线则是低电平有效。 

7.  起始条件和停止条件(START and STOP conditions) 

    起始条件 当 SCL 处于高电平期间时,SDA 从高电平向低电平跳变时产生起始条件。总线在起始条件产生后便处于忙的状态。起始条件常常简记为 S。 

    停止条件 当 SCL 处于高电平期间时,SDA 从低电平向高电平跳变时产生停止条件。总线在停止条件产生后处于空闲状态。停止条件简记为 P。 

8.  从机地址(Slave Address) 

    I2C 总线不需要额外的地址译码器和片选信号。多个具有 I2C 总线接口的器件都可以连接到同一条 I2C 总线上,它们之间通过器件地址来区分。主机是主控器件,它不需要器件地址,其它器件都属于从机,要有器件地址。必须保证同一条 I2C 总线上所有从机的地址都是唯一确定的,不能有重复,否则 I2C总线将不能正常工作。一般从机地址由 7 位地址位和一位读写标志 R/W 组成,7位地址占据高 7 位,读写位在最后。读写位是 0,表示主机将要向从机写入数据;读写位是 1,则表示主机将要从从机读取数据。 

 

9.  数据是按字节传输的 

    I2C 总线总是以字节(Byte)为单位收发数据。每次传输的字节数量没有严格限制。首先传输的是数据的最高位(MSB,第 7 位) ,最后传输的是最低位(LSB,第 0 位) 。另外,每个字节之后还要跟一个响应位,称为应答。 

10.  应答(Acknowledge) 

    在 I2C 总线传输数据过程中,每传输一个字节,都要跟一个应答状态位。接收器接收数据的情况可以通过应答位来告知发送器。应答位的时钟脉冲仍由主机产生,而应答位的数据状态则遵循“谁接收谁产生”的原则,即总是由接收器产生应答位。主机向从机发送数据时,应答位由从机产生;主机从从机接收数据时,应答位由主机产生。I2C总线标准规定:应答位为 0 表示接收器应答(ACK) ,常常简记为 A;为 1 则表示非应答(NACK) ,常常简记为A。发送器发送完 LSB 之后,应当释放 SDA 线(拉高 SDA,输出晶体管截止) ,以等待接收器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值