I2C 协议的理解以及在 OLED 上的应用
I 2 C I^2C I2C 协议
仓库地址
介绍
- I 2 C I^2C I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线
- 两根通信线:SCL(Serial Clock)、SDA(Serial Data)
- 同步,半双工
- 带数据应答
- 支持总线挂载多设备(一主多从、多主多从)
硬件电路
- 所有I2C设备的SCL连在一起,SDA连在一起
- 设备的SCL和SDA均要配置成开漏输出模式 开漏输出介绍
- SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
I2C 时序基本单元
- 起始条件:SCL高电平期间,SDA从高电平切换到低电平
- 终止条件:SCL高电平期间,SDA从低电平切换到高电平
- 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
- 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
- 发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
- 接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
- 指定地址写
- 对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)
- 当前地址读
- 对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)
- 指定地址读
- 对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)
OLED 屏幕
OLED 屏幕使用的驱动 SSD-1306 使用 I 2 C I^2C I2C 进行通讯的,所以我们如果要想实践一下 I 2 C I^2C I2C 协议直接可以通过让OLED屏幕显示来达到训练的效果。
但是如果我们想直接玩OLED屏幕仅仅有 I 2 C I^2C I2C的知识是远远不够的,还需要了解SSD-1306它是如何让OLED屏幕进行显示的。如果想知道原理那么直接去看 SSD-1306 的数据手册就好啦。
这里简单介绍一下,我是用的OLED屏幕是0.96寸大小的64*128的屏幕,屏幕的组成的是是通过8页,128列组成的,每一页都有128列,一列有8个像素点。
每当我们传输数据给OLED屏幕的时候,它接收的就是一个 Byte 的数据,直接就是显示一列,比如传输 0xaa,那么显示结果就是如下图
更多的内容的话去看数据手册,当然所有的内容我的仓库都有提供。
效果展示
这里利用了上位机进行串口通讯,利用 Python 的解析能力,把视频内容进行二值化进行解析了,然后通过串口传输给单片机
I2C&OLED视频