SPI 子系统之SPI spec

网络 网络设备
外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

1.SPI hardware

SPI:Serial Perripheral Interface,串行外围设备接口,由 Motorola 公司提出,是一种高速、全双工、同步通信总线。SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,无应答机制。

本文我们讲解标准的 4 线 SPI,四根线如下:

①CS/SS,Slave Select/Chip Select,片选信号线,用于选择需要进行通信的从设备。

②SCK,Serial Clock,串行时钟,和 I2C 的 SCL 一样,为 SPI 通信提供时钟。

③MOSI/SDO,Master Out Slave In/Serial Data Output,主输出从输入。

④MISO/SDI,Master In Slave Out/Serial Data Input,主输入从输出。

2.SPI 四种工作模式

SPI 有四种工作模式,通过时钟极性(CPOL)和时钟相位(CPHA)的搭配来得到四种工作模式:

①、CPOL=0,串行时钟空闲状态为低电平。
②、CPOL=1,串行时钟空闲状态为高电平。
③、CPHA=0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。
④、CPHA=1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。

示例波形图如下:

SPI 是全双工的,所以读写时序可以一起完成。

3.SPI 传输机制

从图可以看出,主机和从机都有一个串行移位寄存器,主机通过向它的 SPI 串行寄存器写入一个字节来发起一次传输。寄存器通过 MOSI 信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过 MISO 信号线返回给主机。这样,两个移位寄存器中的内容就被交换。

外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

虽然 SPI 四线制支持读写同时进行,但实际上我们很多时候并不需要又读又写,见以下两种情况(参考 BMA223 数据手册):

注意:如下三幅图示均为 CPOL=1,CPHA=1

(1)主机向从机写数据

主机发送先发送 8 bits,第一个 bit 为 0 代表这次主机是想写数据到从机,AD6~AD0 表示要写的寄存器地址。然后,主机就会一直写下去。在这期间 SDO 一直没用,一直是高阻态,算是一直读到1。

(2)主机从从机读数据

这种情况下,主机先发送 8 bits,第一位为 1 代表这次是读,然后 AD6 ~ AD0 是想要读的寄存器地址,然后 SDO 开始返回数据。

4.SPI timing diagram

Tcsb_setup:建立时间
Tcsb_hold:保持时间
tsckl:低电平时间
tsckh:高电平时间
SCK period :Tsckl + tsckh
一般情况下 Tsckl = tsckh

注意:真实的波形图如上,高低电平并不是到达最高点才算,0.3Vdd 以下为低电平,0.7Vdd 以上为高电平,计算信号时间长度的时候需要注意这个微小的时间,硬件设计必须注意信号质量风险,软件开发人员也要会看波形图。

这里的参数,一般 spi 驱动不需要设置,但是半导体厂商提供的 spi 控制器驱动中,可以修改这些参数。我们写 SPI 驱动时候,可以根据从设备的要求来修改这些参数。

5.DMA 与 FIFO

不同平台对于 SPI FIFO 和 DMA 的 buffer size 设置不同:

传输 32bytes 以下使用 FIFO,传输 32bytes 以上使用 DMA。

DMA 可以自动发起多次传输,一次最大 256K 。

6.I2C 与 SPI 对比

功能

I2C

SPI

线数

2(SDA,SCL)

4(MOSI,MISO,SCLK,CS)

主机数量

>=1

==1

类型

半双工

全双工

回应机制

yes

no

速度

<=3.4Mbps

high

应用

重要数据

大量数据

流控

yes

no

设备地址

yes

no

常规用途

命令

数据

I2C 和 SPI 的速率如下:

I2C模式

速度

标准

100KHz

快速

400KHz

快速+

1MHz

高速

3.4MHz

SPI 速率:几十 MHz 甚至上百 MHz,速度取决于 CPU 的 SPI 控制器和时钟 clock

STM32F103 的 SPI 最高支持 18MHz,imx6ull 的 SPI 最高支持 52MHz,其他芯片一般用不到更高的,因为速度越快波形质量越不好,越容易出问题。

具体采用多大速率还和外设有关,比如 EEPROM 的 W25Q128 的 SPI 最高支持 80MHz,ICM20608 传感器的 SPI 最高支持8MHz。一般用在 flash 上的速度会较快。

7.扩展

SPI 协议其实是包括:Standard SPI、Dual SPI 和 Queued SPI 三种协议接口。

Dual SPI 还是四线制,只是传输线可以变为同方向,速度是 Standard SPI 的两倍。

Queued SPI 是六线制,多了两根数据线,传输速度是 Standard SPI 的四倍。

责任编辑:武晓燕 来源: 嵌入式Linux系统开发
相关推荐

2022-05-15 22:34:32

SPI 控制器SPI 子系统

2023-12-11 07:21:12

SPI机制插件

2011-11-30 14:35:19

JavaSPI

2023-06-05 08:07:33

JavaJava SPI

2010-06-09 11:05:28

SPI总线协议

2022-11-02 21:45:54

SPIJava

2021-03-05 11:52:50

LinuxSPI驱动详解

2022-05-05 13:54:37

SPI机制APISPI

2022-06-28 08:02:44

SPISpringJava

2022-08-17 08:17:01

SPI机制接口

2020-12-14 11:35:22

SPI Java机制

2022-05-06 08:26:32

JavaSPI机制

2023-08-28 10:42:25

DubboSPIJava

2021-09-10 08:31:19

DubboSPI框架

2021-05-30 07:54:24

SPI机制场景

2023-04-28 08:42:08

Linux内核SPI驱动

2020-06-30 15:35:36

JavaSPI代码

2022-06-15 11:01:59

自定义SPIJava

2022-09-15 18:32:13

SPI模型框架

2010-06-08 16:11:10

SPI总线协议
点赞
收藏

51CTO技术栈公众号