**
SPI协议介绍:
**
-
硬件连接:
SPI Flash和SPI OLED。
两种方式:
用GPIO模拟SPI 用S3C2440的SPI控制器
我们先介绍下SPI协议,硬件框架如下:
SCK:提供时钟
DO:作为数据输出
DI:作为数据输入
CS0/CS1:作为片选
同一时刻只能有一个SPI设备处于工作状态。
2.假设现在2440传输一个0x56(二进制就是0b0101 0110)数据给SPI Flash,时序如下:
在SPI协议中,有两个值来确定SPI的模式。
CPOL:表示SPICLK的初始电平,0为低电平,1为高电平
CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿。
CPOL CPHA 模式 含义
0 0 0 初始电平为低电平,在第一个时钟沿采样数据
0 1 1 初始电平为低电平,在第二个时钟沿采样数据
1 0 2 初始电平为高电平,在第一个时钟沿采样数据
1 1 3 初始电平为高电平,在第二个时钟沿采样数据
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。
极性选什么?格式选什么?通常去参考外接的模块的芯片手册。比如对于OLED,查看它的芯片手册时序部分:
SCLK的初始电平我们并不需要关心,只要保证在上升沿采样数据就行。
使用GPIO实现SPI协议操作OLED
现在开始写代码,使用GPIO实现SPI协议操作。
我们现在想要操作OLED,通过三条线(SCK、DO、CS)与OLED相连,这里没有DI是因为2440只会向OLED传数据而不用接收数据。
我们要用GPIO来实现SOC向OLED写数据,这一层用gpio_spi.c来实现,负责发送数据。
对于OLED,有专门的指令和数据格式,要传输的数据内容,在oled.c这一层来实现,负责组织数据。