08_SPI_OLED模块操作方法
参考资料:
- OLEDC芯片手册:
SPEC UG-2864TMBEG01 .pdf、SSD1306-Revision 1.1 (Charge Pump).pdf
1. 硬件
1.1 原理图
IMX6ULL:

STM32MP157:

原理图:

1.2 连接
无论是使用IMX6ULL开发板还是STM32MP157开发板,都有类似的扩展板。把OLED模块接到扩展板的SPI_A插座上,如下:

2. OLED操作原理
原理图简化如下:

要操作OLED,只需使用SPI接口发送数据,并不需要使用SPI接口读取数据。除此之外,还需要控制D/C引脚:
- 当DC引脚是低电平时,是命令:比如复位、打开显示、设置地址
- 当DC引脚是高电平时,是数据:写入要显示的数据
2.1 显存和像素
OLED上有128*64个像素,每个像素只有2种状态:亮、灭。
![]()
怎么控制屏幕上每个像素的状态?OLED内部有显存GDDRAM(Graphic Display Data RAM):

显存中,每位对应一个像素,入下图所示:
- byte0的8位数据对应屏幕上角左侧、竖向排列的8个像素,即COL0的像素,bit0对应第0行,bit1对应第1行,……
- byte0对应COL1那列第0~第7行的8个像素
- ……
- byte127对应COL127那列第0~第7行的8个像素
- byte128对应COL0那列第0~第7行的8个像素
![]()
2.2 显存寻址模式
显存被分为8页、127列,要写某个字节时,需要先指定地址,然后写入1字节的数据
- 哪页(Page)?
- 哪列(Col)?
- 写入1字节数据
OLED有三种寻址模式:
-
页地址模式(Page addressing mode):每写入1个字节,行地址不变,列地址增1,列地址达到127后会从0开始

-
水平地址模式(Horizontal addressing mode):
- 每写入1个字节,行地址不变,列地址增1
- 列地址达到127后从0开始,行地址指向下一页
- 列地址达到127、行地址达到7时,列地址和行地址都被复位为0,指向左上角

-
垂直地址模式(Vertical addressing mode):
-
每写入1个字节,行地址增1,列地址不变
-
行地址达到7后从0开始,列地址指向下一列
-
列地址达到127、行地址达到7时,列地址和行地址都被复位为0,指向左上角
-

2.3 具体操作
2.3.1 初始化
对于OLED的初始化,在参考手册SPEC UG-2864TMBEG01 .pdf中列出的流程图:

2.3.2 设置地址
- 设置地址模式
- 设置page
- 设置col
如下图:
-
设置地址模式,比如设置为页地址模式时,先写命令0x22,再写命令0x02。页地址模式是默认的,可以不设置。

-
设置页地址:有0~7页,想设置哪一页(n)就发出命令:0xB0 | n

-
设置列地址:列地址范围是0~127,需要使用2个命令来设置列地址

2.3.4 写入数据
让DC引脚为高,发起SPI写操作即可。