社区编辑申请
注册/登录
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-04-15 14:31:02

鸿蒙操作系统

2022-04-20 20:28:40

HDF 驱动框架鸿蒙操作系统

2022-05-15 22:34:32

SPI 控制器SPI 子系统

2022-05-11 15:08:52

驱动开发系统移植

2022-04-19 11:23:26

release3.1子系统鸿蒙

2022-05-09 15:08:56

存储厂商NFV领域华为

2022-05-17 15:51:32

数据中心运维能力基础设施

2022-05-16 10:36:08

GitHub开源项目

2022-05-16 13:37:12

Sysrv僵尸网络微软

2022-05-11 14:48:33

腾讯云寿险民生保险

2022-04-26 23:42:08

Windows 10微软升级

2022-05-14 08:05:18

Linux内存管理

2022-05-20 08:55:02

py文件exepython

2022-05-09 11:57:39

云原生实践安全

2022-05-24 12:42:24

物联网

2022-05-24 08:21:16

数据安全API

2022-05-24 07:51:05

测试模型测试单元测试

2022-04-19 14:41:29

Oracle数据库SQL

2022-04-15 09:23:29

Kubernetes面试题

2022-04-07 14:33:31

操作系统鸿蒙HarmonyOS

编辑推荐

教你怎么选择最合适的无线AP你会使用交换机吗?连接交换机的正确方法我们做了一款无网远程运维的智能硬件,坐等运维工程师“翻牌”通过降低数据采样率,如何构建通用的智能物联网关设备利用运维工具破局!看招商银行运维部门如何与开发、业务和睦相处
我收藏的内容
点赞
收藏

51CTO技术栈公众号