I2C 是很常见的一种总线协议,I2C 是 NXP 公司设计的,I2C 使用两条线在主控制器和从 机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据 线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。I2C 总线标准模式下速度可以 达到 100Kb/S,快速模式下可以达到 400Kb/S。I2C 总线工作是按照一定的协议来运行的,接下 来就看一下 I2C 协议。
I2C 是支持多从机的,也就是一个 I2C 控制器下可以挂多个 I2C 从设备,这些不同的 I2C 从设备有不同的器件地址,这样 I2C 主控制器就可以通过 I2C 设备的器件地址访问指定的 I2C 设备了,一个 I2C 总线连接多个 I2C 设备。
帧起始:I2C 通信起始标志,通过这个起始位就可以告诉 I2C 从机,“我”要开始 进行 I2C 通信了。在 SCL 为高电平的时候,SDA 出现下降沿就表示为起始位
帧停止:停止 I2C 通信的标志位,和起始位的功能相反。在 SCL 位高电平的时候,SDA 出现上升沿就表示为停止位。
数据传输:I2C 总线在数据传输的时候要保证在 SCL 高电平期间,SDA 上的数据稳定,因此 SDA 上 的数据变化只能在 SCL 低电平期间发生。
IIC写时序:首先是给一个起始信号,发送IIC设备地址,读写位,从机发送应答信号,重新发送起始信号,发送要写入数据的寄存器地址,从机发送应答信号,发送要写入的数据,从机发送应答信号,停止信号。
在开发板设计中引出了扩展IO,用于接外设,如下所示,本次选择IIC0进行测试,对于can接口板子只引出了排针,没有将can的电平转换电路附在开发板上,需要自己外接独立模块,这样稍微比较麻烦,同时还有RS485等电路。
I2CTOOL 是一个专门调试 I2C 接口的开源工具,可以获取挂载的设备及设备地址,具 有在对应的设备上读取和设置寄存器值等功能。当前板子已经板载此工具,
直接使用就行,先把MPU6050连在开发板上,使用终端链接开发板;
输入i2cdetect -a 0进行IIC设备检测,检测到0x68,陀螺仪的设备地址,如下所示:
MPU6050初始化,打开I2C设备
IIC读取MPU6050数据:
IIC向MPU6050写数据:
主函数初始化MPU6050,并打印读取到MPU6050的数据:
配置编译工具链,编译代码
生产编译好的文件,传递到开发板,并添加可执行权限。运行,数据读取成功
更多回帖