12-SPI

声明:

本文是本人在韦东山笔记的基础上加了一些注释,方便理解。原文地址:
http://wiki.100ask.org/%E7%AC%AC020%E8%AF%BE_SPI%E8%A3%B8%E6%9D%BF

第001节_SPI协议介绍

市面上的开发板很少接有SPI设备,但是SPI协议在工作中经常用到。我们开发了SPI模块,上面有SPI Flash和SPI OLED(OLED就是一块显示器)。

我们SPI裸板程序会涉及两部分:
1、用GPIO寄存器模拟SPI
2、用S3C2440的SPI控制器

这节课我们来介绍SPI协议,硬件框架如下:
SCK:提供时钟
DO:作为数据输出
DI:作为数据输入
CS0/CS1:作为片选(注:各片选引脚,只能有一个正在工作,即同一时刻只能有一个SPI设备处于工作状态。)
12-SPI
现在来举例子,看看SPI如何工作。
假设现在2440传输一个0x56数据给SPI Flash,时序如下:
CS0低选中SPI Flash。
0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。
SPI Flash会在每个时钟周期的上升沿读取D0上的电平。
12-SPI
讲一下SPI的模式:
在SPI协议中,有两个值来确定SPI的模式。 CPOL:表示SPICLK的初始电平,0为电平,1为高电平 CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿
12-SPI
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。

极性选什么?格式选什么?通常去参考外接的模块的芯片手册。比如对于OLED,查看它的芯片手册时序部分如下图:
SCLK的初始电平我们并不需要关心,只要保证在上升沿采样数据就行。
12-SPI