MCU

ADXL345的I2C通信模式

0
阅读(38003)

微处理器可以通过SPI方式或者I2C方式对ADXL345芯片的内部寄存器进行读写操作,从而实现对该芯片的设置和对检测结果的数据读取。今天将重点介绍ADXL345芯片的I2C通信方式。

首先是I2C通信模式的电路连接图,从ADXL345芯片的PDF文档可以找到相关的电路图,如图1所示,切记I2C通信的两个信号管脚SDA和SCL都必须接上拉电阻,而由于ADXL345芯片还可以通过SPI方式进行通信,在I2C模式下必须禁止SPI模式,即使CS管脚置高,无效SPI功能。

                图1  I2C连接图(地址0x53)

对于以上电路图,还有一个地方比较难理解的,就是ALT ADDRESS管脚,该管脚在SPI模式下是数据通信管脚,而在I2C模式下则用于控制该芯片的通信地址,用过I2C的同学应该都知道,I2C通信必须知道设备的通信地址。下面详细说一下地址怎么获得,从ADXL345芯片的PDF文档可以找到下面这一句话“ALT ADDRESS引脚处于高电平,器件的7位I2C地址是0x1D,随后为R/W位。这转化为0x3A写入,0x3B读取。通过ALT ADDRESS引脚(引脚12)接地,可以选择备用I2C地址0x53(随后为R/W位)。这转化为0xA6写入,0xA7读取。”一开始老是看不懂是啥意思,后来想了很久才知道,0x1D是高7位I2C地址,将0x1D左移一位,然后根据最低位写为0,读为1的原则,加到最低位后就可以得到0x3A和0x3B啦,后面的0XA6和0XA7也是通过同样的规则获得的,同样,图1中的ALT ADDRESS管脚接地,所以地址为0x53。

下面再介绍一下ADXL345芯片的I2C时序,如图2为其时序图。

                                   图2  ADXL345 I2C时序图

SDA和SCL两条信号线在空闲时均处于高电平,即释放总线的状态,然后要通信之前得先发送一个启动信号,如图2的START CONDITION处所示,即在SCL为高电平的时候将数据信号SDA的电平拉低,它标志着一次数据传输的开始。启动信号后将是数据位的传送,在I2C总线上传送的每一位数据都有一个时钟脉冲相对应,即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。而只有在SCL为低电平期间,才允许SDA上的电平改变状态。如图3所示。

      图3 SDA电平状态变化

主控制器发送完一个8位的字节后,都会在时钟脉冲9期间释放数据线,即拉高SDA,这时从设备会通过拉低SDA信号来反馈一个应答信号,主控制器接收到应答后再发送其他数据。

数据发送完成后,主控制器会发送一个结束信号来结束该次数据的传送。从图2中的STOP CONDITION可以知道,结束信号即在SCL信号为高电平时释放SDA信号,表示通信结束。

以上便是对ADXL345芯片I2C功能使用的理解。仅供参考。