一、简介
本章讲解模拟IIC和硬件IIC驱动方式,软件IIC可以使用任意GPIO进行模拟,比较灵活,但是速率和稳定性不如硬件IIC,硬件IIC由单片机硬件自主完成时序,并支持多种速率模式,在资源充足情况下推荐使用硬件IIC。
二、0.96寸OLED模块介绍
2.1 简介:
相信大家都认识此屏幕模块,特别上学时期,这里就简述;屏幕一般有黄蓝、白色和蓝色三种颜色选择,其中黄蓝屏为分段式色彩分布,而白屏和蓝屏则是纯色黑底显示;屏幕支持IIC(仅需两根线)、SPI(3或4线)以及6800/8080并行接口等多样化的连接方式,且采用SSD1306驱动IC;我们本章以IIC接口模块进行演示。
三、IIC协议原理
3.1 简介:
IIC通信协议 总线占用引脚少,可扩展性强,挂载多个设备时,由仲裁器配置优先级,只占用两个引脚,一根SCL时钟和一根SDA数据线,组成;数据以字节为单位传送,每次传输的字节数不受限制直到接收到停止信号才停止。
3.2 IIC物理层:
IIC是一个支持多设备的总线,支持多主多从,每个挂载到总线的设备都有一个独立的地址,主机可以利用地址进行不同设备之间访问;当线上某设备空闲时,就会输出高阻态也就是三态门状态(就理解为类似断开了),全部空闲时上拉电阻会把总线拉成高电平。
3.2.1 传输模式:
1.标准模式 (Standard Mode):
1.最大传输速率为100 kbit/s。
2.这是最早的IIC规范所支持的速度。
2.快速模式 (Fast Mode):
1.支持的最大传输速率提升到了400 kbit/s。
2.此模式在后续的IIC规范中被引入以支持更高的数据传输需求
3.快速模式Plus (Fast Mode Plus, Fm+):
1.该模式将最大传输速率进一步提高到1 Mbit/s。
2.并不是所有的设备都支持这个速度,这取决于设备的硬件设计。
4.高速模式 (High Speed Mode, Hs-mode):
1.最大传输速率可达3.4 Mbit/s。
2.高速模式需要额外的硬件支持来处理高速下的信号完整性问题,如电流源
输出 驱动器和高速使能信号(HS)。
3.3 IIC协议层:
此点讲解协议帧,我们先认识3.3.1~3.3.2基本的读写过程,它们是由3.3.3~3.3.5组成的一个过程,后续代码中就是按照此帧来进行通讯。
3.3.1 基本读写帧:
首先有个起始信号S,随后是从机地址SLAVE ADDRESS,随后是读写位R/W,随后是应答位A,随后是数据传输段(n字节+响应位),最后是停止位P。
广播地址后每个设备与自己的地址作比较,比较正确设备会发出应答信号,不正确的发出非应答信号,主机接收后才判断是发送还是不发送,发送数据时每发完一个字节都要等待从机的应答信号,如此循环,当从机发出非应答信号或者主机数据发送完给出停止信号才不传输了。
3.3.2 复合格式读写帧(常用):
其实差不多是两个读/写过程拼合,一般使用的先写:主机产生起始信号和设备地址和读写位发出,设备接收到后应答并接收主机写的数据,这个数据一般是一个从机设备的属性,某个单位地址,让从机设备知道主机是要访问这个内存单位,随后主机再发送一次起始信号和设备地址和读/写位,随后等候设备应答,随后对该地址读写数据,完成后发送停止信号; 第一次通讯是告诉从机读写地址,第二次则是读写的实际内容。
3.3.3 通讯的起始和停止信号:
当SCL线是高电平时SDA线从高电平向低电平切换,这个情况表示通讯的起始。当SCL是高电平时SDA线由低电平向高电平切换,表示通讯的停止。起始和停止信号由主机产生。
3.3.4 数据的有效性:
SDA数据线在SCL的每个时钟周期传输一位数据。传输时,SCL为高电平的时候SDA表示的数据有效,即在此的SDA为高电平时表示数据“1”,低电平时数据为“0”。当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行数据位的切换,为下一次数据做好准备。
3.3.5 地址及数据方向:
I2C总线上的每个设备都有自己的独立地址,主机发起通讯时,通过SDA信号线发送设备地址来查找从机。I2C协议规定设备地址可以是7位或10位,实际中7位的地址应用比较广泛,紧跟着设备地址的一个数据位用来表示数据传输方向,数据方向位为1表示读数据0表示写数据。读数据方向时由从机控制SDA信号线,主机接收信号;写数据方向时,SDA信号线由主机控制,从机接收信号。MSB与LSB是设置高位先行还是低位先行。
上面说了每个设备都有自己的独立地址,我们也知道OLED是采用SSD1306驱动IC,因此我们就要去驱动IC手册查看地址说明,可见手册里说明了设备地址由三部分组成:6bit固定位 +