串行外设接口(Serial Peripheral Interface,SPI)的缩写。是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线。Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

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

(1)SDO – 主设备数据输出,从设备数据输入;

(2)SDI – 主设备数据输入,从设备数据输出;

(3)SCLK – 时钟信号,由主设备产生;

(4)CS – 从设备使能信号,由主设备控制。

其中,CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。因此允许在同一总线上连接多个SPI设备。CS信号有时也成为SS_N, SS_N信号在从设备中还是有用的,用来标识新的数据包。

数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。SPI接口的缺点:没有指定的流控制,没有应答机制确认是否接收到数据。SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器。

SPI总线共有四种工作方式 ,SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。

在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI,从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。

注:

1 SPI信号有时也称为MISO,SPI总线主机输入/ 从机输出(SPI Bus Master Input/Slave Output);MOSI(Master Output/Slave Input),SCLK,SS_N。

2 SPI协议与实现有很大的区别。

参考文献:

SPI(Serial Peripheral Interface)串行外设接口协议详解+实例.

http://my.oschina.net/freeblues/blog/67400

Serial Peripheral Interface Bus. https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

最新文章

  1. 《100种过度医疗大公开》:转译自日文版,日文版依据的是美国的“Choosing Wisely”项目。三星推荐
  2. 使用SQLPlus连接Oracle实例
  3. Leap Motion发布新平台,直击下一代移动端VR/AR手部追踪
  4. UVA12653 Buses
  5. Ckeditor 的加载顺序
  6. Java内存管理的9个小技巧
  7. 【转】Java编程之字符集问题研究
  8. 更新wix installer里的Guid
  9. MyReport演示下载连接和相关文章索引
  10. request.getParameter()及解决数据库中文乱码问题——实习第七天
  11. 结对作业1----基于flask框架的四则运算生成器
  12. 史上最全的大厂Mysql面试题在这里!
  13. Docker 镜像编排并部署SpringBoot应用
  14. python之序列化模块、双下方法(dict call new del len eq hash)和单例模式
  15. python格式化输出的几种方式
  16. Hibernate 映射一对一关联关系
  17. 腾讯云cos封装
  18. 在浏览器中输入www.baidu.com后执行的全部过程
  19. 【Java】【线程】
  20. FFmpeg AVPacket和AVFrame区别

热门文章

  1. 管理 Word 博客账户
  2. [Selenium] WebDriver 操作 HTML5 中的 drag/drop
  3. liunx命令之【查看某个端口号的使用情况】
  4. 「ZJOI2008」「LuoguP2590」树的统计(树链剖分
  5. 【扬中集训DAY1T1】 微信群
  6. Cocos2d-X对常用Object-C特性的替换
  7. 148D
  8. 指针 * &
  9. (二十八)分类信息的curd-分类信息删除
  10. 在线抠图网站速抠图sukoutu.com全面技术解析之canvas应用