【硬件】IIC总线

1. 引言

IIC总线是系统中比较常用的一种总线了。很多芯片用的都是IIC。
比如很多MEMS的姿态传感器(陀螺仪,加速度计,磁强计),一些加密芯片,E2PROM……比如mpu6050、9250、hmc5883……
适用于这些功能比较多而且速率要求不高的场合。
下面简单记录一下IIC总线的要点。记住高亮的地方基本就够了。

2. IIC总线介绍

2.1 IIC

IIC也可以写做I2C,全称是Inter IC bus.
是由PHLPS提出的一种一种串行数据总线协议

2.2 IIC有3种速率:

  • 低速模式 100 kb/s
  • 快速模式 400 kb/s
  • 高速模式 3.4M/s

2.3 引脚

IIC总线2根总线:
- 时钟线 SCL,由master提供
- 数据线 SDA

2.4 寻址

IIC总线是主从设备,从机地址位数为7位。一个主机在总线上最多可以挂127个从机(7位地址最多128,去除0x0广播地址,还剩127),设备间通过不同的设备地址来区分。

在这里插入图片描述

  • 任一设备输出低电平,都能拉低整个总线
  • 每个IIC器件都有自己的地址,7位,一般4位表示类型,3位表示编号。
    一般主机寻址发送8位地址,7位器件地址 + 1位读写位(0:W,1:R)。
    发送到总线上时也是高位先发。
    在这里插入图片描述
    不同厂家描述不同,如果datasheet说自己是7位地址,那就上图的A6~A0,如果说自己的8为地址,分读地址和写地址,那就是厂家把读写位加进去了。

3. 时序图

百度图片给的第一张结果,这就是一个典型的IIC读写时序
在这里插入图片描述
记住下面标黄的几个特征就行了。

3.1 空闲态

无数据传输时,SDA和SCL均为高

3.2 起始结束

SCL高时,SDA变化
如上图的框1和框5

3.3 数据传输

SCL低时,SDA变化
如上图框1和框2之间,给出数据,在SCL高电平时(框2),读取数据

3.4 ACK信号

ack信号的理解不是那么直观。
主机每发送完一个字节(8bit),会释放SDA总线,把控制权交给从机。如果从机有响应,会在下一个时钟周期里,把SDA拉低。作为一个ack信号。

3.2 例子

不同芯片,需要的时序是不一样的。
但是主流的IIC读写方式是这样的。

  1. 发送1字节(7位地址+W信号)
  2. 发送1字节(寄存器地址)
  3. 发送1字节(7位地址+R信号)
  4. 接收n字节

2、3步之间有时候在一次周期内完成,有些芯片需要2次(中间掺杂 结束 和 其实信号)

4. 驱动代码

4.1 mcu

MCU中的IIC很多是使用IO口模拟的。
这些一方面用起来比较方便,任何两个引脚都可以用,而且不涉及使用中断等,使用起来相对比较简单,而且有助于我们理解时序图。
网上例程太多了,搜IIC模拟一大把,按着时序图很快能写出来。如果不能用就用逻辑分析仪抓下波形看一下,稍微微调一下。(在此强推淘宝上那种很便宜的 逻辑分析仪,很好用,比示波器好用多了。而且低速总线我们也用不到那种很贵的带宽很高的逻辑分析仪,用了很多年了,确实是调时序的神器)。

4.2 Linux

在linux系统中怎么使用IIC驱动,详解下一篇博客。

5. 引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值