嵌入式通信协议 - SPI

1. 致敬Motorola

喜欢摩托罗拉,第一部智能手机的品牌201207刀锋系列,质量也很好。Hello Motor!哈哈哈~~

同样也是一个伟大的品牌。不过落寞了,且被NXP收购了,飞思卡尔也被NXP收了。

引言

当您将微控制器连接到传感器,显示器或其他模块时,您是否考虑过这两种设备如何相互通信?他们到底在说什么?他们如何互相了解?

电子设备之间的通信就像人类之间的通信。双方都需要说相同的语言。在电子学中,这些语言称为 通信协议。对我们来说幸运的是,在构建大多数DIY电子产品项目时,我们只需要知道一些通信协议即可。

首先,我们将从有关电子通信的一些基本概念开始,然后详细说明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根据需要,可以使用也可以不用。CS线可以使用MCU内置SPI硬件接口模块的,也可以不用,而是单独配置一个GPIO接口作为片选信号线。

SPI接口的外设模块,比如使用显示芯片ST7789的SPI4线制式的接口通信的显示模块,它的四个通信接口引脚是 CLK、MOSI、CS。加上一根数据命令线,这根线不是SPI协议范畴的线,属于ST7789协议控制线,高低电平决定MOSI上的数据对于ST7789控制器芯片是命令数据还是显示数据。

SPI如何运作?

时钟

时钟信号将主设备的数据位输出同步到从设备的位采样。每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。由于主机配置并生成时钟信号,因此SPI通信始终由主机启动。

设备共享时钟信号的任何通信协议都称为 同步。 SPI是一种同步通信协议。还有一些 异步 方法不使用时钟信号。例如,在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

可以使用时钟极性和时钟相位的属性来修改SPI中的时钟信号。这两个属性共同定义了何时输出位以及何时对其进行采样。主机可以设置时钟极性,以允许在时钟周期的上升沿或下降沿输出和采样位。可以设置时钟相位,以便在时钟周期的第一沿或第二沿进行输出和采样,而不管它是上升还是下降。

从机选择

主机可以通过将从机的CS / SS线设置为低电压电平来选择要与之通信的从机。在空闲,非传输状态下,从选择线保持在高电压电平。主机上可能有多个CS / SS / NSS引脚,这允许多个从机并行连接。如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从机连接到主机。

多个从机

可以将SPI设置为与单个主机和单个从机一起运行,并且可以与由单个主机控制的多个从机一起设置。有两种方法可以将多个从站连接到主站。如果主机具有多个从机选择引脚,则从机可按以下方式并联:

如果只有一个从设备选择引脚可用,则可以通过以下方式菊花链连接从设备:

MOSI和MISO

主机通过MOSI线以串行方式将数据发送到从机。从机通过MOSI引脚接收主机发送的数据。从主机发送到从机的数据通常先发送最高有效位。

从机也可以通过MISO线串行将数据发送回主机。从从机发送回主机的数据通常先发送最低有效位。

SPI数据传输步骤
  1. 主机输出时钟信号:

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

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

    4.如果需要响应,则从机沿着MISO线一次将数据返回一位给主机。主机读取接收到的位:

2. SPI 协议

4. 功能描述

4.1 通用描述

The SPI module allows a duplex, synchronous, serial communication between the MCU and peripheral devices. Software can poll the SPI status flags or SPI operation can be interrupt driven. 翻译:

SPI 模块可实现 MCU 与外围设备之间的全双工同步串行通信。软件设计上,可以轮询 SPI 状态标志运行,也可由中断驱动 SPI 运行。

通过设置 SPI 控制寄存器 1 中的 SPI 启用 (SPE) 位来启用 SPI 系统。设置 SPE 位后,四个相关的 SPI 端口引脚专用于 SPI 功能,如下所示:

• Slave select (SS)

• Serial clock (SCK)

• Master out/slave in (MOSI)

• Master in/slave out (MISO)

The main element of the SPI system is the SPI Data Register. The 8-bit data register in the master and the 8-bit data register in the slave are linked by the MOSI and MISO pins to form a distributed 16-bit register. When a data transfer operation is performed, this 16-bit register is serially shifted eight-bit positions by the S-clock from the master, so data is exchanged between the master and the slave. Data written to the master SPI Data Register becomes the output data for the slave, and data read from the master SPI Data Register after a transfer operation is the input data from the slave. 翻译:

SPI 协议的设计精髓是 SPI 数据寄存器(准确来讲应该是数据移位寄存器)。主机中的 8 位数据寄存器和从机中的 8 位数据寄存器通过 MOSI 和 MISO 引脚连接,形成分布式 16 位寄存器。执行数据传输操作时,在主机发出的时钟信号(SCK)驱动下,此 16 位寄存器,串行移位八位,这就是主机和从机之间交换数据的过程。主机的输出数据就是从机的输入数据,从机的输出数据就是主机的输入数据,同时同步进行的。

移位寄存器,作为串并转换的功能。将MCU内SRAM的并行数据转为即将传出芯片的串行信号。

This 8-bit data register acts as the SPI receive data register for reads and as the SPI transmit data register for writes. A single SPI register address is used for reading data from the read data buffer and for writing data to the transmit data register.

这8位移位寄存器,既作为SPI接收数据寄存器,同时又作为SPI数据发送寄存器。这个单一8位寄存器地址,既是读数据寄存器地址同时又是写数据寄存器地址。

https://i-blog.csdnimg.cn/blog_migrate/0a6a11696e6b0336e33c326e0bfe3a0c.png#pic_center

The clock phase control bit (CPHA) and a clock polarity control bit (CPOL) in the SPI Control Register 1 (SPICR1) select one of four possible clock formats to be used by the SPI system. The CPOL bit simply selects a non-inverted or inverted clock. The CPHA bit is used to accommodate two fundamentally different protocols by sampling data on odd numbered SCK edges or on even numbered SCK edges (see 4.4 Transmission Formats). 翻译:

在SPI控制寄存器1中,存在时钟相位控制位和时钟极性控制位,排列组合形成4种时钟信号配置格式,都适用于SPI通信系统中的时钟信号。CPHA=时钟相位,CPOL=时钟极性。The CPOL bit simply selects a non-inverted or inverted clock. The CPHA bit is used to accommodate two fundamentally different protocols by sampling data on odd numbered SCK edges or on even numbered SCK edges (see 4.4 Transmission Formats).

SPI模块可以配置为主机模式或从机模式。当置位SPI控制寄存器1中的MSTR位时,处于主机模式;当MSTR位清零时,处于从机模式。

4.2 主机模式

MSTR = 1 时,SPI模块处于主机模式。只有处于主机模式下,SPI模块才能发起信息传输。往主机模式的SPI数据寄存器中写入数据,便开始数据传输。若移位寄存器此时为空,那么数据寄存器中的字节数据立即传入移位寄存器。继而,在时钟信号的驱动下,移位寄存器中的字节数据由MOSI引脚输出。

• 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的复位时序逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值