引言

低速通信目前搞过 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)相关推荐

  1. 基于FPGA的SPI FLASH控制器设计

    1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法 ...

  2. 基于FPGA实现SPI接口(配置或通信)

    基于FPGA实现SPI接口(配置或通信总线) 1)总线简介 串行外设接口(SPI)是微控制器(FPGA)和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.主要用于 ...

  3. 基于FPGA的信号发生器的设计

    基于FPGA的信号发生器的设计 首先先要介绍的是本设计的主芯片是ALTERA的一款芯片,芯片名称是EP2C5T144C8N.该芯片的LE单元有4608个,PLL锁相环具有2个,IO口管脚具有142个, ...

  4. 基于 FPGA 的 UART 控制器设计(VHDL)(下)

    今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...

  5. 源码系列:基于FPGA的PS2通信电路设计(附源码)

    今天给大侠带来基于FPGA的PS2通信电路设计,附源码,获取源码,请在"FPGA技术江湖"公众号内回复"PS2源码",可获取源码文件.话不多说,上货. 设计背景 ...

  6. FPGA零基础学习:基于FPGA的多路选择器设计(附代码)

    FPGA零基础学习:基于FPGA的多路选择器设计(附代码) 大侠好,欢迎来到FPGA技术江湖.本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的& ...

  7. 基于FPGA Uart串口通信实验

    基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...

  8. 基于FPGA的IIR滤波器设计

    基于FPGA的IIR滤波器设计,使用VHDL语言. 本设计是毕设,包括论文 下面是论文目录截图: 各模块VHDL程序 时序控制模块程序 library ieee; use ieee.std_logic ...

  9. 基于FPGA的电子计算器设计(下)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

最新文章

  1. DM368启动串口打印分析
  2. OpenCASCADE :VTK集成服务(VIS) 之使用低级 API
  3. bilibili Saber 实时计算平台架构与实践【Apache Flink 替换 Spark Stream的架构与实践】
  4. #RANK_1 极其简单的递归——骑士与金币
  5. Controller数据导出Excel 详细教程——easypoi-base,easypoi-web,easypoi-annotation
  6. XposedNoRebootModuleSample 不需要频繁重启调试的Xposed 模块源码例子
  7. A. Gamer Hemose
  8. Android 功耗(5)----功耗调试
  9. 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)
  10. H5自带的type=date或者month等日期控件移动端显示placeholder
  11. Web前端开发如何提高技术水平!
  12. 让Node.js在Azure上运行-3
  13. thymeleaf判断对象是否为空的相关逻辑处理
  14. 金格pdf打开服务器文件,金格插件解决方法.pdf
  15. 基于java的电子政务网的设计及开发
  16. 互联网人必备的六大类专业搜索工具
  17. 什么是web services?它有什么作用,以及它如何实现?
  18. 获取openwrt mac地址
  19. java-数组-输出二十六个字母
  20. MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)

热门文章

  1. vue.js 密码加密_软件操作与排错专题_第五期文档及操作系统加密小攻略
  2. Linux父子进程全局变量与局部变量
  3. 北京住房公积金查询密码是多少?
  4. 分享幻灯片+在线阅读
  5. ABAP SY-REPID和SY-CPROG的区别
  6. 【资源搜集】7 款不错的聊天机器人 API 接口搜集
  7. 传智播客学习之day59-mybatis初步
  8. 天天访客预约管理系统
  9. 如何自制DIY电视天线【方法】
  10. python RSA 公钥解密方法