基于Apollo2 SDK上OLED屏幕的实现

润欣科技
关注

1.SPI通信原理

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

1.MOSI/SDI – SerialData In,串行数据输入;

2.MISO/SDO – SerialDataOut,串行数据输出;

3.SCLK – Serial Clock,时钟信号,由主设备产生;

4.CS – Chip Select,从设备使能信号,由主设备控制。

其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。

接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要8次时钟信号的改变(上沿和下沿为一次),才能完成8位数据的传输。

(图1)SPI通信结构图

(图2)SPI常规读操作

(图3)SPI常规写操作

2.SPI的四种模式

根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置的不同可分为4种模式。

时钟极性是指SPI通信设备处于空闲状态时(或SPI通信开始时,即SS为低电平时),SCK的电平信号CPOL=0时,SCK空闲状态为低电平,CPOL=1时则相反。

时钟相位是指数据采样的时刻,当CPHA=0时,MOSI或MISO数据线会在时钟线第一个边沿开始采样(奇数边沿)。

当CPHA=1时,MOSI或MISO数据线会在时钟线第二个边沿开始采样(偶数边沿)。

详细如下:

1.CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

2.CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

3.CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

4.CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

(图4)SPI的CPOL和CPHA

3.硬件SPI与模拟SPI的区别

在模拟SPI的模式下,我们需要使用IO口去模拟SPI的时序,这个模拟的全部过程,都需要CPU全程负责,但在获取或者发送数据的时候,可能会使用软件延时,这个时间在数据交互量不大的情况下并明显,但是如果数据量大,可能会打乱SPI的时序。

对于硬件SPI来说,我们只需要开启相应的寄存器配置和对应的中断。数据的交互就不需要CPU参与。当传输中断产生的时候,CPU只需要从中断中搬运数据就好了,省下了软件模拟IO的存取时间。让CPU省下更多时间去运行其他代码。

4.硬件SPI的配置

首先我们需要确定OLED屏幕上面的引脚,如图:

(图5)OLED硬件管脚图

GND - 接地                        VCC – 接3.3V

SCL – 接SCK(5脚)        SDA – 接MOSI(7脚)

RST – 接 42脚(可修改)  DC – 接43脚(可修改)

作为Master模式下,提供有6组IO口供用户选择,而作为Slave有1组。在Master模式下,Apollo提供一个128-byte 的local RAM作为双向FIFO的传输容量。Apollo2的管脚复用具体如下:

(图6)Apollo2全部引脚寄存器配置图

(图7)Apollo2 引脚颜色比对图

第一步,我们选择Master 0 Signals 也就是相对于的 5、6、7引脚。

具体通过am_hal_gpio_pin_config()函数进行引脚配置

第二步,配置iom_config

在SPI_g_sIOMConfig里面配置的是IOM的一些常规参数:

模式我们选择为AM_HAL_IOM_SPIMODE 传输速率为 100KHZ,相位和极性都是0 。写数据的阈值是4bit,读取是60bit。这两个是生产中断的条件。

最后记得开启IO Master

第三步,对屏幕进行复位操作,而复位操作主要是改变RST引脚的高低电平。

通过Apollo2 SDK提供的API去修改IO口状态。

am_hal_gpio_out_bit_clear()置0

am_hal_gpio_out_bit_set()置1

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存