本章通过讲解在应用层中使用SPI总线与外部设备的通讯,讲解Linux系统总线类型设备驱动架构的应用,它与上一章的I2C 总线操作方法非常相似,可以对比学习。
在Linux内核文档的Documentation/SPI目录下有关于SPI驱动非常详细的说明。
1. SPI通讯协议简介
SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。学习本章时,可与 I2C 章节对比阅读,体会两种通讯总线的差异。下面我们分别对 SPI 协议的物理层及协议层进行讲解。
1.1. SPI物理层
SPI通讯设备之间的常用连接方式见下图。
SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为 SSX,它们的作用介绍如下:
(1) ( Slave Select):从设备选择信号线,常称为片选信号线,也称为NSS、CS。以下用NSS表示。当有多个SPI从设备与SPI主机相连时,设备的其它信 号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的这一条 NSS信号