Advertisement

嵌入式通信协议 - SPI

阅读量:

1. 致敬Motorola

酷爱摩托罗拉手机,并于2012年7月推出了第一代智能手机的摩托罗拉公司首次推出的刀锋系列手机,在品质上同样出色!Hello Motor!激动地喊道!

同样是另一个卓越的品牌。然而它显得有些沮丧,并且经历了NXP的出售过程;同时飞思卡尔也经历了NXP的出售。

引言

当我们把微控制器与传感器、显示器以及其它模块连接起来时,请问:在这些设备之间是如何实现通信的呢?它们之间的具体交流内容又是什么呢?它们是如何相互理解并建立联系的呢?

电子设备间的相互联系类似于人类间的交流互动。任何两个系统间都必须使用相同的语言才能建立有效的沟通。在电子学领域内这些特殊的技术术语则被称为 信息交换标准或数据传输规范等专业术语

首先, 我们计划从电子通信的基础知识入手, 并将深入探讨SPI的工作原理。

SPI、I2C和UART相比其他协议如USB、以太网、蓝牙和WiFi等要慢得多,并且在使用硬件资源方面更为节省。SPI、I2C和UART特别适用于微控制器之间的通信以及那些无需传输大量高速数据的设备之间的通信。

SPI的协议很灵活,很简单,时钟信号线SCK、数据信号传输线 MOSI、数据信号传输线 MISO、片选信号线(SS/CS/NSS)。
需要重点关注的是,时钟信号的传输格式(方波时钟信号的极性、相位和速率)。一个时钟周期信号传递一个bit位的信息。SPI主从间通信使用同一根信号线,所以属于同步通信,无需像UART异步通信那样去设置波特率进行解析。IIC虽然也是同步通信,但是IIC支持多主模式,通信过程需要协议规范通信启停、主从切换、设备寻址、通信竞争的仲裁等,但SPI没有就一根信号线和一根数据线,数据传输过程中,数据信号线直接在跟随时钟采样模式(4种,相位、极性)同步进行,0负担,不存在启停协议的实现,天然自带,再有就是MSB/LSB(先传最高位还是先传最低位)的匹配;SPI也无需寻址,因为它使用一根额外的信号片选线连接从机设备,所以它天然就是那种数字信号最原始的通信模式(时钟+数据),且传输速率很大,只局限于主从设备的时钟信号、电磁环境、传输距离等,因此,SPI的速率远高于IIC,IIC较高与UART。

SPI的使用方式很灵活

在应用中,无论是采用软件仿真技术还是利用MCU内部硬件配置中的SPI接口作为硬件实现路径均可满足需求;其中软件仿真方案极为简便;得益于(同步)时钟信号的一致性保证了系统的稳定运行

最低限度必须有一条时钟引脚(CLK),一条用于数据传输的总线(通常采用MOSI总线),以及一条片选总线(SS/NSS/CS)。其中第二根总线可能作为MISO或SS/NSS/CS总线使用。此外,在某些设计中可以选择性地连接单片机(MCU)的SPI接口模块作为片选信号源;如果没有特别需求,则可直接配置GPIO引脚作为片选信号源。

基于 SPI 协议的外设模块中包含 ST7789 显示芯片采用 SPI4 接口制式的通讯模块,在其四个通信端子上分别连接有 CLK、MOSI 和 CS 端口。此外还有一根数据控制端口用于发送或接收信号,在此协议域内该控制端口的作用与 ST7789 控制器芯片之间的交互关系决定了 MOSI 端口的数据性质即为命令数据还是显示数据

SPI如何运作?

时钟

时钟信号负责将主设备的数据位输出同步至从设备的位采样。每次时钟周期仅传输一位数据,则决定了数据传输的速度上限。因为主机完成配置并生成了所需的时钟信号,在此条件下SPI通信始终会由主机发起。

设备共享时钟信号的任何通信协议均可被称作同步技术。 SPI则是其中一类典型的同步通信协议。除此之外还有一些非同步方式无需时钟信号的支持即可实现连接。例如在UART通信中使用预先配置的固定波特率进行数据传输;这种固定波特率不仅决定了传输速度还影响了时间安排。

可以利用其特性来调整SPI中的时钟信号。
它们决定了何时捕获数据位以及何时释放它们。
主机可以通过配置其极性来实现相应的功能。
通过配置其相位属性,则可以在A边沿或B边沿捕获数据,并根据需要决定是否进行重置。
这种机制能够通过配置其相位属性来实现对不同A边沿或B边沿的数据进行独立控制。

可以利用其特性来调整SPI中的时钟信号。
它们决定了何时捕获数据位以及何时释放它们。
主机可以通过配置其极性来实现相应的功能。
通过配置其相位属性,则可以在A边沿或B边沿捕获数据,并根据需要决定是否进行重置。
这种机制能够通过配置其相位属性来实现对不同A边沿或B边沿的数据进行独立控制。

从机选择

主机可以通过对从机的CS/SS引脚设置为低电压水平来实现与其通信的选择功能。在空闲时段(无数据传输状态),这些选择线应维持高电压水平以避免干扰。主机可能具备多个CS/SS/NSS引脚组接口(I/O端口),从而支持同时建立多条通信通道以供不同从机设备使用。如果主机只配备一个CS/SS引脚,则可采用菊花链拓扑结构来实现多台从机设备与之同步通信。

多个从机

配置SPI使其同时适配单一主机及单一从机,并能兼容由单一主机管理的多台从机。具体而言,有两类方法可实现多个主站间的通信。当主站配置有多个管理端子时,则各副站可通过以下方式连接。

当仅有一个从设备选择引脚可用时,则可采用以下措施进行以菊花链方式进行连接。

MOSI和MISO

主机利用MOSI线采用串行传输方式将数据发送至从机。从机依靠MOSI控制输入引脚接收主机的数据。通常情况下,来自主机的数据按最高有效位优先的顺序发送给从机。

主从型设备也可以通过采用MISO线串行协议实现数据传输至主机。主从型设备向主机发送的数据一般首先传输最低有效位。

SPI数据传输步骤

主机输出时钟信号:

2.主机将SS / CS引脚切换到低电压状态,从而激活从机:

3.主机沿着MOSI线一次将数据发送给从机。从站读取接收到的位:

  1. 如果需要响应,则通过MISO总线将数据发送到主机。主机接收的数据位:

2. SPI 协议

4. 功能描述

4.1 通用描述

The SPI module supports duplex, synchronous, serial communication with peripheral devices connected to an MCU. Software is capable of polling the SPI status flags or alternatively may operate in an interrupt-driven manner.

SPI 模块具有实现 MCU 与外围设备之间全双工同步串行通信的能力。在软件设计中,默认情况下可以通过轮询 SPI 状态标志进行操作;若需中断驱动,则需相应配置。

为了激活SPI系统,请在控制寄存器1中配置SPI启用位(SPE)。配置该位后,在控制寄存器1中的四个相关端口引脚将被指定用于SPI功能。例如

• Slave select (SS)

• Serial clock (SCK)

• Master out/slave in (MOSI)

• Master in/slave out (MISO)

Central to this system's functionality is its SPI Data Register. The master and slave each utilize an 8-bit data register connected via MOSI and MISO pins to form a distributed 16-bit register. When a data transfer occurs, this 16-bit register undergoes serial shifting of eight bits under S-clock control from the master unit, enabling communication between both ends. The write operation on this unit transfers its stored data as output to its partner device. The read operation retrieves stored information as input from its counterpart device after completion of a transfer sequence.

SPI协议的核心理念在于其采用的数据移位寄存器机制。这些设备通过MOSI和MISO引脚连接,在主机8bit和从机8bit的数据总线上实现了信息传递功能。在时钟信号(SCK)驱动下完成串行移位操作后即可实现一次完整的通信过程:即通过这种方式实现了主机与从机之间的高效交互机制设计意图得以体现

移位寄存器电路 作为串并转换的核心功能 使用于 MCU 内部 SRAM 的数据传输系统中 该电路负责将 MCU 内部 SRAM 的并行数据转换为即将输出至外部芯片的串行电平

This 8-bit information storage unit serves dual purposes: acting as an SPI receive unit during read operations and an SPI transmit unit during write operations. A single designated address within the SPI system is dedicated to both reading from a designated buffer and writing to a designated transmission storage location.

该8-bit移位寄存器既充当SPI接收数据存储单元(用于接收来自外部的数据),同时也充当SPI发送数据存储单元(用于向外部发送数据)。该单一8-bit移位寄存器的地址,在读操作时用于存储输入的数据,在写操作时用于存储输出的数据。

![(https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/1hze4EogbsqrTU7cfFwJNOXQxRpj.png)

The control phase and polarity bits (CPHA and CPOL) within the SPI Control Register 1 (SPICR1) are designed to determine the clock format from a set of four options, ensuring compatibility with various communication protocols. The CPOL bit specifically indicates whether an inverted or non-inverted version of the input clock should be utilized, while the CPHA bit provides flexibility in selecting between two distinct communication methods by enabling sampling on either odd-numbered or even-numbered SCK edges (as detailed in Section 4.4).

在SPI控制器1中包含有定时器相位控制端口与定时器极性控制端口,在这些端口的不同排列组合下形成了四种定时器工作模式,在这些模式下均适用于SPI通信系统的定时器工作状态设定。其中定义为:CPHA表示定时器相位设置端口(CPHA),而CPOL表示定时器极性设置端口(CPOL)。其中:CPOL端子仅允许选择非反向或反向的主控 clocks;而CPHA端子则用于通过采样数据于奇数或偶数SCK边缘来支持两种基本的数据传输协议(如参考文献第4.4节所示)。

SPI模块支持配置为主机或从机模式。当设置 SPI 控制寄存器1的MSTR 位时,则进入主机模式;若将 MSTR 位清零,则进入从机模式。

4.2 主机模式

当MSTR被赋值为1时

• S-clock 串行时钟信号:

SPI波特率寄存器中的SPR2, SPR1, SPR0 波特率选择位 和SPR2, SPR1, SPR0

• MOSI, MISO 引脚:

3. stm32f10x的SPI

[todo]

4. 典型SPI接口外设芯片 ST7789

ST7789支持的通信接口:并行接口8080系列、串行接口SPI。由IM0~3配置方式决定。

ST7789的时序逻辑

时序逻辑方面,在阐述了关键时间参数的逻辑关系的同时,还深入探讨了信号保持时间的特性。

8080并行口

SPI-3线口

略。

SPI-4线口

RGB接口

略,参考官方文档。

ST7789的复位时序逻辑

全部评论 (0)

还没有任何评论哟~