首页 > 其他分享 >13 SPI通信协议原理

13 SPI通信协议原理

时间:2023-12-29 11:33:05浏览次数:32  
标签:13 CPOL FPGA SCLK 通信协议 控制器 CPHA SPI

软件版本:VIVADO2021.1

操作系统:WIN10 64bit

硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA

登录米联客(MILIANKE)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!

1 概述

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

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

相比嵌入式单片机或者ARM已经集成了的SPI控制器,FPGA的SPI控制器完全由逻辑代码实现,我们可以在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 selcet从设备选择,该信号由master主机产生

需要注意对于SPI控制器数据位宽可以X1 X2 X4 X8方式,SS选通的外设根据控制器的设计也可以支持多个。更复杂的SPI控制器才能通过SS信号进行总线的竞争实现多主机的总裁。

以下方案中主控制器通过SS0~SS2可以选通多个SPI外设。

米联客的FPGA入门课程以标准的SPI控制器来说明,SPI的数据位宽是X1方式来讲解协议本身和标准控制器的设计,SS选通信号可以不使用。

2 SPI时序协议

米联客FPGA入门教程部分讲解的SPI协议为SPI标准协议,即数据通信总线为X1模式,并且SPI控制器不支持冲裁功能。这种标准的协议作为入门学习是最佳选择,对于SPI的扩展应用,比如X4模式访问QSPI 接口的FLASH,我们可以在应用方案部分继续讨论。

SPI串行同步时钟可以设置为不同的极性(Clock Polarity ,CPOL)与相位(Clock Phase ,CPHA)。

CPOL(时钟极性):

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

CPHA(时钟的相位):

对于SPI主控制器决定了数据的更新时刻设计,对于SPI从控制器决定了数据的采样时刻。当时钟相位为1时(CPHA=1),在SCK信号线的第二个跳变沿进行采样。

以下我们给出CPOL和CPHA的共计4种情况。

SCLK:SPI的总线时钟

DATA:SPI的总线数据

Sendstrobe:SPI 控制器内部程序发送数据的触发信号

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

2.1 CPOL=0 CPHA=0

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

2.2 CPOL=0 CPHA=1

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

2.3 CPOL=1 CPHA=0

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

2.4 CPOL=1 CPHA=1

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

3 SPI驱动程序基本模块

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

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

4 FPGA时序要求

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

标签:13,CPOL,FPGA,SCLK,通信协议,控制器,CPHA,SPI
From: https://www.cnblogs.com/milianke/p/17934445.html

相关文章

  • H5前端特殊艺术字体文件太大,可通过font-spider压缩
    原理:1.爬行本地html文档,分析所有css语句2.记录@font-face语句声明的字体,并且记录使用该字体的css选择器3.通过css选择器的规则查找当前html文档的节点,记录节点上的文本4.找到字体文件并删除没被使用的字符5.编码成跨平台使用的字体格式简而言之:就是爬出你项目中......
  • 社招面试题:说一说SPI是什么,有哪些使用场景?
    大家好,我是小米!今天在这里和大家分享一个在技术面试中常被问到的话题——SPI(ServiceProviderInterface),这是一个令人着迷的技术领域,也是很多Java开发者必须要熟悉的概念。不废话,让我们一起来揭开SPI的神秘面纱,看看它在实际开发中有哪些精彩的应用场景吧!SPI是什么?首先,我们来解释一......
  • Adobe Lightroom Classic v13.1 (macOS, Windows) - 桌面照片编辑器
    AdobeLightroomClassicv13.1(macOS,Windows)-桌面照片编辑器Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD作者......
  • 2023-2024-1 20231307《计算机基础与程序设计》第十四周学习总结
    作业信息所属课程2023-2024-1-计算机基础与程序设计作业要求 第十四周作业(必学,选做)作业目标自学教材《C语言程序设计》第13章并完成实验作业正文https://www.cnblogs.com/lzt-/p/17933997.html教材学习内容总结13.1二进制文件和文本文件文本文件(也称ASCII......
  • [EFI]联想Lenovo Air 13 IWL笔记本电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板联想LenovoAir13IWL笔记本处理器Intel(R)Core(TM)[email protected]已驱动内存16GB1867MHzMicron(BIOS可超频至2133MHzLPDDR3)已驱动硬盘海力士HFS512GD9TNG-62A0A(512GNVME固态)已驱动显卡IntelUHDGraphics620(8086:3EA0WhiskeyLake)(......
  • 学期2023-2024-1 20231310 《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业这个作业的目标《C语言程序设计》第13章并完成云班课测试作业正文https://www.cnblogs.com/wang-hoNbang/p/17933629.html教......
  • 2023-2024-1 20231301 《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231301《计算机基础与程序设计》第十四周学习总结作业信息作业链接作业课程<班级>(2023-2024-1-计算机基础与程序设计)作业要求<作业>(2023-2024-1计算机基础与程序设计第十四周学习总结)作业目标<《C语言程序设计》预习第十三章>《C语言程序设......
  • 2023-2024-1 20231329 《计算机基础与程序设计》第14周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里2022-2023-1计算机基础与程序设计第14周作业(https://www.cnblogs.com/rocedu/p/9577842.html)这个作业的目标《C语言程......
  • 2023-2024 20231313《计算机基础与程序设计》第十四周学习总结
    2023-202420231313《计算机基础与程序设计》第十四周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十四周学习总结作业内容《C语言程序设计》第13章并完成云班课测试作业正文我的作业目录教材总结总结学习过程中的问题《C语言程......
  • stm32u5 qspi 读写 w25q128 timeout
    http://ramlife.me/posts/solution/embedded/spi/stm32-use-qspi-write-and-read-w25q128-timeout/背景使用STM32U575主控芯片,使用QSPI读写W25Q128,简单的读写测试没有问题。但是在后面调试中发现,当按照11个字节一组进行读写,从4352这个地址开始写,写入到4605的时候,就超......