完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、I2C是一种总线通讯协议 和之前我们介绍的串口通信类似,I2C也是一种通信协议。但它是一种总线通讯协议,也就是说,一个I2C可以连接多个设备,物理连接上像这样。 那它串的设备数量有没有上限呢?有的,上限是127个。 那为什么我们都是用18和19来驱动OLED和MPU6050呢?原因很简单,他们都是连在同一跟线上。 上原理图 像ESP32这种引脚资源匮乏的单片机,引脚的复用就显得很重要了,这里我们就将OLED和MPU6050都接在同一个I2C上,减少引脚占用。 二、I2C是一种两线协议 在上几节我们驱动OLED和IMU的时候,都导入了“Wire.h”,这个就是Arudino提供的好的头文件。我们使用的Wire的定义如下 TwoWire Wire = TwoWire(0); TwoWire也就是两线的意思,两线也就是一个是SCL,一个是SDA SCL即时钟线,以一个固定的周期进行电平变换,SDA即数据线,用于数据的传输,这样说有些抽象,小鱼用逻辑分析仪截取了一段OLED初始化时的SCl(GPIO18)和SDA(GPIO19)上的电平变化,并分析出其对应的数据。 再放大一些看 可以直观的看到SCL在数据传输开始前一直保持高电平,SDA变成了低电平,这意为着数据传输的开始,也就是那个绿点的地方。 根据I2C协议规定:SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。 继续观察,你会发现,在传输过程中SCL引脚电平在以一个固定的周期来回跳变,从机这边当检测到SCL电平跳变后就开始读取SDA上的的电平,高记为1,低记为0。所以你可以看到逻辑分析仪检测到八个上升箭头,一共传输了八位数据,这八位数据用16进制表示就是0X3C。 0X3C是什么,就是我们OLED的设备地址,所以这段信号的意思就是,我接下来要给0X3C的设备发数据了,请编号为0X3C的设备准备接收。 这个信号会被0X3C的设备接收和处理,而同一总线上ID非0X3C的接收到数据后就会将其扔掉,这就是I2C支持多个设备的核心原因。 在我们的开发板上,OLED的默认地址为:0X3C,IMU的默认地址为:0x68 附件:OLED初始化时I2C引脚数据图 |
|
相关推荐 |
|
偏置电路与宽带偏置电路(Bias-Tee)-----电感器比较与选择
2653 浏览 0 评论
6052 浏览 0 评论
3637 浏览 2 评论
6521 浏览 2 评论
4324 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:54 , Processed in 0.587223 second(s), Total 32, Slave 25 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号