一. 简介
最近在弄oled显示屏的FPGA驱动,该显示屏是IIC接口的,随便可以深入学习一下IIC协议,以及如何用它来驱动oled显示。
由于在驱动oled的时候,是不需要对其进行读取的,因而只需要读数据的部分,减轻一些工作量。
二.IIC协议
IIC总共由两根数据线组成,一个为时钟线scl,另外一个为数据线sda。其设备也分为主机和从机,时钟线由主机提供,数据线根据需要看是主机控制,还是从机控制。
IIC协议主要包括以下部分:
空闲
开始信号
数据传输
应答信号
停止信号
空闲:空闲的时候,时钟线scl和数据线sda都为高电平。
开始信号:当时钟线scl为高电平的时候,数据线sda变为低电平。这里要注意的是,这是一个跳变,sda是由高跳变为低,不是一直为低电平,这是一个需要注意的点。
数据传输:在开始信号之后,时钟信号每一个高电平传输一位信 号,数据在scl低电平的时候跳变,在scl高电平的时候需要保持不 变,传输的时候,先发送高位,然后再发送低位。
应答信号: 在数据信号发送完成之后,主机需要等待从机的一个应答信 号,这时候主机释放对数据线的控制。从机会给出一个低位的应答信 号。
- 停止信号: 在应答信号之后,可以给出一个停止信号,在时钟线为 高电平的时候,需要有一个数据线由低到高的跳变,这里非常需要注 意的是是跳变。
- 其具体过程主要如下
三. 具体实现
先参考一下C语言驱动oled的代码,可以看出每次需要传输三个数据,第一个器件地址,第二个是写数据还是写命令选择,第三个是具体的数据或命令。然后根据这个,来写verilog代码。
下面给出具体的仿真图
公众号:FPGA之旅