3. I2C通信协议

参考I2C通信协议

4. MPU6050寄存器读写

I2C通讯中,主处理器芯片作为主设备,MPU6050作为从设备。

4.1 从设备地址

MPU6050作为从设备使用时,有一个芯片自身的7位的设备地址,该地址为:0b110100X,7位地址的LSB位由引脚AD0的值决定,这样在一个板子的同一个I2C总线上可以同时使用两个MPU6050芯片,所以MPU6050的从设备地址为:0b1101000(0x68,AD0为低)或者0b1101001(0x69,AD0为高)。

4.2 写寄存器

主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit读标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。接着,主设备发送从设备的寄存器地址(RA,8bit),等待从设备应答(ACK)后,主设备再发送要在寄存器中写入的数据(8bit),等待从设备应答(ACK)后,可以发送停止位(P)结束数据传输。 如果要写多个寄存器,在上一步中可以先不发停止位(P),而是继续发送数据(8bit),这样就可以实现连续写入多个寄存器数据了。MPU6050芯片会自动增加寄存器地址,并将连续写入的数据字节,按顺序依次写入到相邻的寄存器中。

两种写数据的格式如下图所示:

采用I2C总线实现MPU6050模块功能

4.3 读寄存器

主设备发送一个起始位(S),再发送I2C的从设备地址数据(由从7bit设备地址和1bit写标志位0组成),在第9个时钟SCL为高电平时,从设备发送应答信号(ACK)。然后发送要读取的寄存器地址,在接收到从设备发送的应答信号(ACK)后,主设备发送一个起始位(Sr),再发送从设备地址(由从7bit设备地址和1bit读标志位1组成 )。从设备会发送一个应答信号(ACK),再发送寄存器中的数据(8bit)。主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。 如果要读取多个连续的寄存器,在上一步中不能发送非应答信号(NOACK)和停止位(P),而是要发送一个应答信号(ACK),等待下一个从设备发送的数据,直到最后一个数据接收完成后,主设备发送一个非应答信号(NOACK),和一个停止位(P),停止I2C传输。

两种读寄存器数据的格式如下图所示:

采用I2C总线实现MPU6050模块功能

4.4 MPU6050通讯中的简写符号

采用I2C总线实现MPU6050模块功能