基于FPGA的 SPI通信 设计(1)
引言
低速通信目前搞过 UART串口通信、IIC通信。其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记录。欢迎订阅关注~
SPI 标准协议 x1模式
SPI 是一种事实标准,由Motorola开发,支持全双工通信,并没有一个官方标准。已知的有的器件SPI已达到50Mbps,如果时序满足,FPGA的SPI通信速率可以达到100Mbps以上。具体到产品中SPI的速率主要看主从器件SPI控制器的性能限制。
设备通信框图
SPI通信主设备:
SCLK:SPI 通信时钟,源:SPI 主设备。
MOSI:SPI 主设备控制器数据发送,源:SPI 主设备。Master Out Slave In
MISO:SPI 主设备控制器数据接收,源:SPI 从设备。Master In Slave Out
SS:从设备片选,源:SPI 主设备。Slave Select
SPI通信从设备:
SCLK:SPI 通信时钟,源:SPI 主设备。
SIMO:SPI 从设备控制器数据接收,源:SPI 主设备。Slave In Master Out
SOMI:SPI 从设备控制器数据发送,源:SPI 从设备。Slave Out Master In
SS:从设备片选,源:SPI 主设备。Slave Select
SPI 时序协议
SPI 串行同步时钟可以设置为不同的极性(Clock Polarity,CPOL)与相位(Clock Phase,CPHA)
CPOL(时钟极性)
决定在总线空闲时,同步时钟(SCK)信号线上的电位是高电平还是低电平。当时钟极性为0时(CPOL=0), SCK信号线在空闲时为低电平;
当时钟极性为1时(CPOL=1) ,SCK信号线在空闲时为高电平;CPHA(时钟的相位)
对于SPI主控制器决定了数据的更新时刻设计,对于SPI从控制器决定了数据的采样时刻。当时钟相位为0时(CPHA=0),在SCK信号线的第一个跳变沿进行采样;
当时钟相位为1时(CPHA=1),在SCK信号线的第二个跳变沿进行采样;以下我们给出CPOL和CPHA的共计4种情况。
1、CPOL = 0;CPHA = 0;
CPOL=0, CPHA=0默认SCLK为低电平,对于发送方,在对于第1个bit数据提前放到总线,建议提前0.5个SCK周期,对于接收方,数据在第1个SCLK跳变沿采样,并且容易满足时序约束。
2、CPOL = 0;CPHA = 1;
CPOL=0, CPHA=1默认SCLK为低电平,对于发送方,在第1个SCLK的跳变沿更新(对于第一个bit 数据可以提前放到总线)对于接收方,数据在第2个SCLK跳变沿采样,并且容易满足时序约束。
3、CPOL = 1;CPHA = 0;
CPOL=1,CPHA=0默认SCLK为高电平,对于发送方,在对于第1个bit 数据提前放到总线(建义提前0.5个SCK周期)对于接收方,数据在第1个SCLK跳变沿采样,并且容易满足时序约束。
3、CPOL = 1;CPHA = 1;
CPOL=1 CPHA=1默认SCLK为高电平,对于发送方,在第1个SCLK的跳变沿更新(对于第一
个bit数据可以提前放到总线)对于接收方,数据在第2个SCLK跳变沿采样,并且容易满足时序约束。
SPI 驱动模型
一个基本的SPIl Master驱动程序至少包含用于产生SCLK的时钟分频单元,发送数据并串移位模块、接收数据串并移位模块;
一个基本的SPI Slave驱动程序至少包含接收数据的串并移位模块,和发送数据的并串转换模块。
目前只先介绍较为基础的标准 SPI 通信协议(x1模式),后续会继续添加更为复杂的模式的基本介绍~
基于FPGA的 SPI通信 设计(1)相关推荐
- 基于FPGA的SPI FLASH控制器设计
1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法 ...
- 基于FPGA实现SPI接口(配置或通信)
基于FPGA实现SPI接口(配置或通信总线) 1)总线简介 串行外设接口(SPI)是微控制器(FPGA)和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.主要用于 ...
- 基于FPGA的信号发生器的设计
基于FPGA的信号发生器的设计 首先先要介绍的是本设计的主芯片是ALTERA的一款芯片,芯片名称是EP2C5T144C8N.该芯片的LE单元有4608个,PLL锁相环具有2个,IO口管脚具有142个, ...
- 基于 FPGA 的 UART 控制器设计(VHDL)(下)
今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...
- 源码系列:基于FPGA的PS2通信电路设计(附源码)
今天给大侠带来基于FPGA的PS2通信电路设计,附源码,获取源码,请在"FPGA技术江湖"公众号内回复"PS2源码",可获取源码文件.话不多说,上货. 设计背景 ...
- FPGA零基础学习:基于FPGA的多路选择器设计(附代码)
FPGA零基础学习:基于FPGA的多路选择器设计(附代码) 大侠好,欢迎来到FPGA技术江湖.本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的& ...
- 基于FPGA Uart串口通信实验
基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...
- 基于FPGA的IIR滤波器设计
基于FPGA的IIR滤波器设计,使用VHDL语言. 本设计是毕设,包括论文 下面是论文目录截图: 各模块VHDL程序 时序控制模块程序 library ieee; use ieee.std_logic ...
- 基于FPGA的电子计算器设计(下)
今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...
最新文章
- DM368启动串口打印分析
- OpenCASCADE :VTK集成服务(VIS) 之使用低级 API
- bilibili Saber 实时计算平台架构与实践【Apache Flink 替换 Spark Stream的架构与实践】
- #RANK_1 极其简单的递归——骑士与金币
- Controller数据导出Excel 详细教程——easypoi-base,easypoi-web,easypoi-annotation
- XposedNoRebootModuleSample 不需要频繁重启调试的Xposed 模块源码例子
- A. Gamer Hemose
- Android 功耗(5)----功耗调试
- 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)
- H5自带的type=date或者month等日期控件移动端显示placeholder
- Web前端开发如何提高技术水平!
- 让Node.js在Azure上运行-3
- thymeleaf判断对象是否为空的相关逻辑处理
- 金格pdf打开服务器文件,金格插件解决方法.pdf
- 基于java的电子政务网的设计及开发
- 互联网人必备的六大类专业搜索工具
- 什么是web services?它有什么作用,以及它如何实现?
- 获取openwrt mac地址
- java-数组-输出二十六个字母
- MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)