[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-13 SPI通信协议原理

news/2024/9/24 7:24:56/文章来源:https://www.cnblogs.com/milianke/p/18330266

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

板卡获取平台:https://milianke.tmall.com/

登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

 

1概述

SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议,是Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROMFlashRTC(实时时钟)ADC(数模转换器)DSP(数字信号处理器)以及数字信号解码器上,是常用的、重要的低速通讯协议之一。本节我们主要学习SPI通信的原理。

SPI通信协议简介:

SPI是一种高速的、全双工、同步、主从式的串行总线接口,也是各类嵌入式设备以及FPGA应用开发中常用的一种串行通信接口。SPI的接口速度可以最高到上百兆,因此SPI接口不仅仅可以应用于低速设备进行合理的时序设计,也可以用于一些高速串行外设通信。

采用SPI接口的设备一般兼顾低速通信和上百兆的高速通信,比如最常见的FPGA的配置FLASH,最高可以支持100Mbps以上。FPGA内置的SPI配置控制器,可以支持多数据总线方式:X1 X2 X4 X8模式,这样大大提高配置速度,减少配置时间,另外比如高精度ADC芯片AD7606,可以采用自定义SPI协议完成多路高精度ADC的实时采集。

相比嵌入式单片机或者ARM已经集成了的SPI控制器,FPGASPI控制器完全由逻辑代码实现,我们可以在FPGA上自己设计SPI控制器然后应用于我们的项目中。

学习FPGA一定要具备非常熟练的FPGA代码设计能力,作为入门学习,掌握SPI串行控制器设计的意义不仅仅是SPI的实用性,更重要的是通过这些简单接口时序的设计,增加初学者原创代码的设计能力,创造能力,这些基础的能力是我们以后面对复杂问题,解决FPGA代码构架设计、通信接口设计、时序逻辑设计的关键能力。

对于SPI Master主设备(所谓的主设备也就是所有的数据发送或者发起者):

SCLK(spi clock)时钟,由Master发送,用于同步数据,决定了通信速率,不同设备支持的最高时钟频率不同

MOSI(master out slave in)主设备输出数据,从设备输入数据,信号线上的数据方位由主机到从机

MISO(master in slave out)主设备输入数据,从设备输出数据

SS(slave selcet)从设备选择,该信号由Master主机产生,

对于SPI SLAVE从设备:

SCLK(spi clock)时钟,该时钟由Master主机产生

SIMO(slave in master out)从机接收来自主机发送的数据

SOMI(slave out master in)从机发送数据

SS(slave selce)t从设备选择,该信号由Master主机产生

寻址方式:

需要注意对于SPI控制器数据位宽可以X1 X2 X4 X8方式,SS选通的外设根据控制器的设计也可以支持多个。当有多个SPI SlaveSPI Master相连时,都共同使用SCKMOSIMISO这三条总线,每一个SPI Master都有独立的片选信号(SS),通过SS片选信号来决定和哪台从设备进行通信。更复杂的SPI控制器才能通过SS信号进行总线的竞争实现多主机的仲裁。

以下方案中主控制器通过SS0~SS1可以选通多个SPI外设。当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设备。如果使能多个SS片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

通信过程:

要开始SPI通信,主机必须发送时钟信号,并通过使能SS信号选择从机。只有片选信号SS拉低(或者拉高),MOSIMISOSCLK每一个周期传送一位数据。SPI总线在进行数据传送时,没有硬性规定先传送高位还是低位,但是通信双方要约定好相同的传送方式,一般采用先传送高位,后传送低位。例如下图,MOSIMISO同时从高位开始传输,一个字节传送完成后无需应答即可开始下一个字节的传送,八个时钟周期即可完成一个字节数据的传送。

多从机配置:

主机可以通过将从机的CS片选信号来选择要与之通信的从机,从机可以采用常规模式连接,或采用菊花链模式连接。

常规SPI模式

主机上可以有多个CS引脚,允许多个从机并联接线。如果主机只有一个CS引脚,则可以通过菊花链将多个从器件连接到主机。所有从机的片选信号连接在一起,所有从机同时接收同一SPI时钟,来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。然而在这种方法中,当数据从一个从机传SDO播到下一个从机SDI时,会有周期延迟。

菊花链SPI模式

2 SPI时序协议

米联客的FPGA入门课程以标准的SPI控制器来说明,SPI的数据位宽是X1方式来讲解协议本身和标准控制器的设计,SS选通信号可以不使用,并且SPI控制器不支持仲裁功能。这种标准的协议作为入门学习是最佳选择,对于SPI的扩展应用,比如X4模式访问QSPI 接口的FLASH,我们可以在应用方案部分继续讨论。

SPI总线传输有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的,但我们的通信双方必须是工作在同一模式下。SPI总线的工作方式由时钟极性(Clock Polarity CPOL)与时钟相位(Clock Phase CPHA)来定义。我们可以通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。

CPOL(时钟极性)

决定在总线空闲时,同步时钟(SCLK)信号线上的电位是高电平还是低电平。当时钟极性为0时(CPOL=0),SCK信号线在空闲时为低电平;当时钟极性为1时(CPOL=1),SCK信号线在空闲时为高电平;

CPHA(时钟相位)

对于SPI主控制器决定了数据的更新时刻设计,对于SPI从控制器决定了数据的采样时刻。当时钟相位为0时(CPHA=0),在sclk的第1个跳变沿采样;当时钟相位为1时(CPHA=1),在sclk的第2个跳变沿采样;

以下我们给出CPOLCPHA的共计4种情况。

SCLKSPI的总线时钟

DATASPI的总线数据

SendstrobeSPI 控制器内部程序发送数据的触发信号

CapStrobleSPI 接收制器内部程序采样数据的触发信号

2.1 CPOL=0 CPHA=0

CPOL=0 CPHA=0默认SCLK为低电平,对于发送方,在对于第1bit数据提前放到总线,建议提前0.5SCK周期,对于接收方,数据在第1SCLK跳变沿采样,并且容易满足时序约束。

2.2 CPOL=0 CPHA=1

CPOL=0 CPHA=1默认SCLK为低电平,对于发送方,在第1SCLK的跳变沿更新(对于第一个bit数据可以提前放到总线)对于接收方,数据在第2SCLK跳变沿采样,并且容易满足时序约束。

2.3 CPOL=1 CPHA=0

CPOL=1 CPHA=0默认SCLK为高电平,对于发送方,在对于第1bit数据提前放到总线,建议提前0.5SCK周期,对于接收方,数据在第1SCLK跳变沿采样,并且容易满足时序约束。

2.4 CPOL=1 CPHA=1

CPOL=1 CPHA=1默认SCLK为高电平,对于发送方,在第1SCLK的跳变沿更新(对于第一个bit数据可以提前放到总线)对于接收方,数据在第2SCLK跳变沿采样,并且容易满足时序约束。

3 SPI驱动程序基本模块

一个基本的SPI Master驱动程序至少包含用于产生SCLK的时钟分频单元,发送数据并串移位模块、接收数据串并移位模块;

一个基本的SPI Slave驱动程序至少包含接收数据的串并移位模块,和发送数据的并串转换模块。

4 FPGA时序要求

基于FPGA的程序设计一定要时刻考虑程序能够满足时序要求,如下图所示。最佳的采样时刻在数据的中心位置,这样可以获得最大的Tsu(数据建立时间)Thd(数据保持时间)。关于更多时序方面的设计要求可以参考"米联客FPGA代码时序设计专题篇"相关课程内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773638.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DiffSeq

目录概 符号说明 流程 代码 Gong S., Li M., Feng J., Wu Z. and Kong L. DiffuSeq: Sequence to sequence text generation with diffusion models. In International Conference on Learning Representations (ICLR), 2023概 本文提出了一种用于 Seq2Seq 的不需要 classifier…

嵌入式测试手册——基于NXP iMX6ULL开发板(2)

基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估板接口资源丰富,引出双路网口、双路RS485、双路CA…

广东注塑行业MES系统——优化生产管理的利器

注塑行业MES系统是优化生产管理的利器,具有以下优势和作用: 实现生产过程的数字化管理:注塑行业MES系统可以实现生产过程的数字化管理,实时监控生产数据、设备状态和生产进度,提高生产过程的可视化和透明度。提高生产效率:通过优化生产计划、资源调度和工艺流程,注塑MES…

嵌入式基础测试手册——基于NXP iMX6ULL开发板(4)

前 言 本文档适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ubuntu18.04.4 64bit U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux SDK:5.4.70_2.3.0 基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6…

Markdown 常用语法

上一篇简单介绍了 Markdown 是什么,以及如何使用,本篇就来详细说说 Markdown 的常见语法。上一篇简单介绍了 Markdown 是什么,以及如何使用,本篇就来详细说说 Markdown 的常见语法。 ‍ 注意,并不是所有编辑器,都支持所有的 Markdown 语法,如果遇到失效的也不必疑惑。 此…

软件无线电系统基带信号处理卡:612-基于6UVPX C6678+XCVU9P的4路2Gsps AD 8路2Gsps DA 信号处理板卡

基于6UVPX C6678+XCVU9P的4路2Gsps AD 8路2Gsps DA 信号处理板卡 一、板卡概述板卡基于6U VPX标准结构,包含一个C6678 DSP芯片,一个XCVU9P 高性能FPGA,8路DA ,4路AD。 二、技术指标● DSP处理器采用TI 8核处理器TMS320C6678; ● DSP 外挂一组64bit DDR3颗粒,总容量2G…

AM62x相比AM335x,到底升级了什么?

Sitara作为TI处理器经典系列,曾推出众多优秀处理器型号(如AM335x)。因其能在相同价位下,提供比市面上其他厂商处理器更优良的性能,并凭借GPMC高速并口、PRU协处理器等个性化硬件资源,可提供更便利的拓展性,在工业控制、能源电力、轨道交通、智慧医疗等领域广受用户欢迎。…

NXP IMX8M Plus工业核心板规格书

核心板简介 创龙科技SOM-TLIMX8MP是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 + 单核ARM Cortex-M7异构多核处理器设计的高端工业核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M7实时处理单元主频高达800MHz。 处理器采用14nm最新工艺,内置2.3TO…

数据驱动测试-多组数据测试

背景:测试多组数据 解决方法:使用文件写入参数化具体操作具体设置

公共数据维护

背景:每写一个用例都需要重复写协议、域名、端口号等信息 解决方法:使用用户定义变量,实现公共数据维护实现初级自动化 具体操作语法格式 ${K值}

案例源码公开!分享瑞芯微RK3568J与FPGA的PCIe通信案例,嵌入式必读!

ARM + FPGA架构有何种优势 近年来,随着中国新基建、中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力、工业控制、智慧医疗等行业通常需要ARM + FPGA架构的处理器平台来实现特定的功能,例如多路/高速AD采集、多路网口、多路串口、多路/高…