I2C驱动学习

来源:互联网 发布:js 设置div style 编辑:程序博客网 时间:2024/05/19 13:21

菜鸟来袭。。。

一 什么是I2C?

I2C总线是一种串行总线,由数据线SDA和时钟线SCL两条线构成,用于进行主器件和从器件之间的通信。具体谁是主,谁是从由数据的传输方向决定。
支持多主控(multimastering),但任何时间点只能有一个主。每个设备(包括主和从)都有一个自己唯一的地址Addr,确定了地址,也就确定了谁与谁的通信。
每个地址包括8bit,前7bit表示地址,最低位代表Read/Write(1/0)。器件地址的确定可以参考具体的芯片手册。

本Blog的I2C知识以TI的功放芯片TAS5760为例进行介绍。TAS5760地址可配,具体为110110X[R/W], 前7位110110X,其中X根据供给芯片地址引脚ADR PIN的电平高低,可配置为0或1。


二、I2C的读写时序

TAS5760支持100KHZ和400KHZ的传输速率,只能作为从器件,I2C用于读写5760的寄存器,从而对其进行功能控制和状态的获取。

地址和数据以字节(8bit)的形式进行传输,每传输一个字节会有一个ACK的应答。ACK类似一个尖峰脉冲,为0时表示正确的传输,此时在波形上表现出来的时一个很窄的尖峰,ACK为1时表示I2C传输错误,这时是一个类似数据宽度的高电平。

每个传输操作都有一个开始标志和结束标志。当SCL为高,SDA由高变成低,代表start; SCL为高,SDA由低变成。高,代表STOP。如下图Figure48,每个数据位bit在时钟线为低电平时产生,每个时钟周期产生一位bit。Master产生7位的slave地址和W/R位,然后等待一个ACK,ACK正确后开始进行下一位的传输。Start和Stop之间传输的数据位数不受限制。Master收到Stop标志位后释放I2C总线


I2C的写操作

如Figure49, 在Master对Slaver进行写操作时,先传输Master的7位地址和写W位,然后等待ACK,再传输slaver的地址,等待ACK,然后传输数据位,数据包括要写的寄存器的地址和值,图中的Date Byte不限于一个字节。


如图Figure50,在进行读操作时其实也先进行了写地址的操作,Master先传输7位的地址位和读写位(此时仍为W),等待ACK,再传输8位的slaver地址,等待ACK,再传输Master的地址位和读写位(此时为R),等待ACK,再传输数据。如要读取Slaver器件某个寄存器的值,则Date Byte可以为寄存器的地址。

原创粉丝点击