RK3568驱动指南|第十六篇 SPI-第184章 初步认识SPI

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第十六篇 SPI_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第十六篇 SPI

第184章 初步认识SPI

184.1 SPI基础知识

SPI(Serial Peripheral Interface)最初是由摩托罗拉公司在上世纪80年代末期提出和开发的一种串行通信协议。当时,随着微控制器技术的发展,越来越多的外围设备需要与微控制器进行数据交换。但传统的并行总线接口存在着引脚数量多、接线麻烦、功耗高等问题,不太适合嵌入式系统的需求。

为此,摩托罗拉公司设计了SPI这种简单高效的串行通信总线协议,以解决当时嵌入式系统中通信接口的痛点。SPI的核心设计思路如下:

(1)使用最少的引脚数实现全双工通信:

通信模式可以分为单工、半双工和全双工,其中单工通信指信号只在一个方向上传输,仅能发送或接收,而半双工通信指信号可以在俩个方向上传输,但某一个时刻只允许发送或接收(前面讲解的单总线和I2C都是半双工通信),而全双工通信指数据同时在俩个方向上传输,而

SPI只需要4根信号线(SCLK、MOSI、MISO、CS)即可完成主从设备之间的数据交换,实现全双工通信。这大大减少了引脚数,简化了接线。

(2)采用同步通信机制:

计算机通信有同步和异步两种传输方式,其中同步通信是指数据传输的发送方和接收方使用相同的时钟信号进行协调。每个时钟周期都会发送或接收一个数据位,因此,数据传输严格依赖于时钟信号的节奏。而异步通信不依赖一个共同的时钟信号进行数据传输,发送方和接收方独立运行,通过特定的协议进行数据同步,具体示意图如下所示:

而SPI具有独立的时钟线(SCLK)在主从设备之间同步数据传输,从而避免了异步通信中的时序问题。

(3)主从结构设计:

SPI协议将通信设备分为主设备和从设备,主设备负责提供时钟信号和控制通信过程,从设备被动响应主设备的操作。

(4)支持多从设备接入:

SPI有多种连接模式,主要分为常规模式和菊花链模式,在常规模式下,每个从设备(Slave)都有独立的片选(Chip Select, CS)信号线。主设备(Master)通过拉低相应的CS线来选择从设备进行通信,具体示意图如下所示:

 

而在菊花链模式下,从设备会串联在一起,数据从主设备传输到第一个从设备,然后从第一个从设备传输到下一个,从而形成链式结构,具体连接示意图如下所示:

菊花链模式并不常用,只需了解即可,后面所讲解的内容都是在常规模式下进行的,会在下一小节中对SPI的硬件连接进行讲解。

184.2 SPI硬件连接

从上一小节的内容中可以了解到SPI使用4根信号线进行通信,分别是SCLK、MOSI、MISO和CS,现在对每根信号线的具体作用和功能进行介绍。

(1)SCLK (Serial Clock)时钟信号线

这是由主设备产生的同步时钟信号,用于驱动数据的收发。主设备负责提供稳定的时钟信号,频率可以根据需要进行调整。从设备需要使用这个时钟信号来对齐和采样数据。

(2)MOSI (Master Output Slave Input)主->从数据传输线

这是主设备向从设备传输数据的线路。主设备将要发送的数据放在这条线上,从设备则从这条线上读取数据。

(3)MISO (Master Input Slave Output)从->主数据传输线

这是从设备向主设备传输数据的线路。从设备将要发送的数据放在这条线上,主设备则从这条线上读取数据。

(4)CS (Chip Select) 或 SS (Slave Select)片选/从设备选择信号

这是主设备用来选择与之通信的从设备的信号线。当主设备拉低某个从设备的CS/SS线时,表示选中了该从设备进行通信。主设备可以通过控制多个CS/SS线来选择与不同从设备通信。

主设备和从设备之间的连接关系如下所示:

SCLK线连接主设备的SCLK输出到从设备的SCLK输入

MOSI线连接主设备的MOSI输出到从设备的MOSI输入

MISO线连接主设备的MISO输入到从设备的MISO输出

CS/SS线连接主设备的片选输出到从设备的片选输入

184.3 SPI通信原理

在前面的小节中对SPI的基础知识和硬件连接进行了介绍,而本小节将对SPI的通信原理相关内容进行介绍。

SPI总线在进行数据传输时,具有以下特点:

(1)传输顺序:默认情况下,SPI总线先传输高位(MSB,Most Significant Bit),然后传输低位(LSB,Least Significant Bit)。

(2)逻辑电平:数据线为高电平表示逻辑1,数据线为低电平表示逻辑0。

(3)字节传输:一个字节传输完成之后,无需应答信号即可开启下一个字节的传输。

然后对SPI的通信原理进行简单的介绍,SPI是单通信协议,意味着总线中只有一个主设备能发起通信,而SPI主设备和从设备都有一个串行移位寄存器,如下图所示:

 

 当SPI主设备想读/写从设备时,它首先要拉低从设备对应的CS线(CS线是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发送到MOSI实现“写”,同时可对MISO采样实现“读”,然后通过一个实际的例子对上述内容进行讲解,现在要将主设备的数据0x00发送给从设备,从设备现在的移位寄存器值为0xff,传输的具体示意图表如下所示:

主设备

从设备

数据

0000 0000

1111 1111

第一个时钟周期

0000 0001

1111 1110

第二个时钟周期

0000 0011

1111 1100

...

第八个时钟周期

1111 1111

0000 0000

根据表格可以得到数据传输实际上就是主设备和从设备之间进行的数据交换,在一个SPI时钟周期内,收发是同时进行的,主机通过MOSI线发送1bit数据,从机通过该线读取这1bit数据;从机通过MISO线发送1bit数据,主机通过该线读取这1bit数据;当寄存器中的内容全部移出时,相当于完成了俩个寄存器内容的交换。

如果主设备要给从设备传输数据,主设备只需要忽略掉从设备接收到的数据即可。如果主设备要从从设备接收数据,主设备向从设备随机发送数据,从设备忽略掉从主设备接收的数据即可。

184.4 SPI极性和相位

在SPI的通信之前需要先确定时钟信号的默认状态以及时钟信号的采样时间,这两个参数由CPOL(时钟极性Clock Polarity)和CPHA(时钟相位Clock Phase)来确定,接下来对这两个参数进行详细的讲解:

1.CPOL(时钟极性Clock Polarity)

CPOL定义了时钟信号的默认状态(即空闲状态)。

CPOL = 0时,表示时钟信号在空闲状态下为低电平(0)。

CPOL = 1时,表示时钟信号在空闲状态下为高电平(1)。

2.CPHA(时钟相位Clock Phase)

CPHA定义了数据信号相对于时钟信号的采样时间。

CPHA = 0时,表示数据在时钟的第一个边沿(上升或下降)被采样。

CPHA = 1时,表示数据在时钟的第二个边沿(上升或下降)被采样。

3.四种模式组合

(1)CPOL=0, CPHA=0: 时钟空闲为低电平,数据在时钟的第一个边沿(上升沿)被采样,具体波形图如下所示:

(2)CPOL=0, CPHA=1: 时钟空闲为低电平,数据在时钟的第二个边沿(下降沿)被采样。具体波形图如下所示:

 (3)CPOL=1, CPHA=0: 时钟空闲为高电平,数据在时钟的第一个边沿(下降沿)被采样。具体波形图如下所示:

 

(4)CPOL=1, CPHA=1: 时钟空闲为高电平,数据在时钟的第二个边沿(上升沿)被采样。具体波形图如下所示:

 

 注意:主设备和从设备必须配置相同的CPOL和CPHA,否则无法正常通信。而在一般情况下,主设备会配置CPOL和CPHA,从设备则需要根据主设备的设置进行匹配。

184.5 iTOP-RK3568处理器中的SPI接口

在RK3568数据手册中可以找到关于SPI接口的介绍,具体如下所示:

·支持4个SPI控制器

·1个控制器支持1个片选输出其余3个控制器各支持2个片选输出

·支持主机模式和从机模式,可通过软件进行配置切换

其中这里的4路SPI接口指的是硬件SPI,在SOC上有专用的硬件SPI电路,关于硬件I2C的介绍如下所示:

硬件 SPI:

(1)实现方式: 通过专门的硬件电路来实现SPI通信协议。

(2)优点:

CPU占用低: SPI总线由硬件电路自动完成,CPU无需直接介入。

传输速率高: 可以达到几十MHz甚至更高的通信速率。

灵活配置: 硬件SPI通常提供CPOL和CPHA的配置选项,用于设置时钟极性和相位。

(3)缺点:

需要专用硬件: 需要专用的硬件SPI接口模块支持,成本相对较高。

接口固定: 接口固定,不如软件SPI灵活。

(4)适用范围: 适用于高速、大量数据传输的场合,如LCD、EEPROM等外设的连接。

而软件SPI指的是通过GPIO口模拟SPI的四根信号线,在硬件SPI不够用的情况下,可以通过GPIO来模拟软件SPI,关于软件SPI的介绍如下所示:

软件 SPI:

(1)实现方式: 通过CPU的GPIO引脚模拟SPI通信协议。

(2)优点:

灵活性高: 可以灵活配置CPOL和CPHA,适用于高度定制化的SPI通信。

无专用硬件要求: 不需要专用的硬件SPI接口模块,适用于没有内置硬件SPI接口的系统。

(3)缺点:

CPU占用高: 需要CPU程序完成时钟信号的生成、数据的读写等全部操作。

传输速率低: 速度受到CPU执行程序的速度限制,通常较硬件SPI要慢。

(4)适用范围: 适用于没有内置硬件SPI接口的系统,或需要高度定制化SPI通信的场景。

RK3568开发板上的SPI接口具体使用情况如下表所示:

每个SPI控制器各自有两组pinctrl,但某一个硬件SPI只能由一组pinctrl引脚进行复用。在后续的实验中将以MCP2515 SPI转CAN 芯片为例,逐步讲解和填充SPI驱动相关的知识。

184.6 实验硬件mcp2515介绍

后续实验要用到的实验模块为迅为的CAN_RS485模块,如下图所示:

该模块不仅可以实现SPI转CAN的功能,还可以实现TTL转485的功能,在后续的实验中只会用到SPI转CAN相关的部分,相关的原理图如下所示:

上述原理图中总共涉及到了两个芯片,分别为MCP2515 SPI转CAN芯片和MCP2551 CAN收发器芯片,这里主要对MCP2515芯片进行介绍。

MCP2515 是一款独立的CAN协议控制器,完全支持CAN V2.0B技术规范。它通过标准的SPI接口与控制器连接。主要特点如下:

1.完全支持 CAN V2.0B:支持标准和扩展数据帧及远程帧的发送和接收。

2.高效的滤波功能:内置两个验收屏蔽寄存器和六个验收滤波寄存器,可以过滤掉不需要的报文,减少主 MCU 的处理负担。

3.SPI 接口:通过 SPI 接口与主控制器进行通信,提供高效的数据传输。

4.多种操作模式:包括正常模式、休眠模式、监听模式和环回模式,以满足不同应用需求。

5.自动重传:在发送失败时自动重传,确保数据传输的可靠性。

6.错误检测和处理:内置错误检测和处理机制,保证数据传输的准确性。

关于SPI转CAN模块原理图以及MCP2515芯片数据手册已经放到了“iTOP-3568开发板\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动程序\113_mcp2515_01”路径下,SPI转CAN模块与iTOP-RK3568开发板具体的连接示意图如下所示:

至此,关于MCP2515芯片介绍以及具体的硬件连接就讲解完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值