FPBA学习记录1——SPI读数据(一)

一、前言

突然想记录下接触到的东西,用于记录、总结和回顾,就从FPGA的SPI开始。

二、目标

通过SPI读取FLASH数据,并通过串口RS232反馈。

三 、基础知识

1.SPI简介

1)SPI为全双工,同步串行数据总线。

全双工:数据可以同时双向传输。与之相对的半双工,也是可以双向传输,但是不能同时双向。
同步:发送端和接收端时钟一致,在一个时钟下发送与接收;
串行:数据在一根信号线上按位传输。与之相对的并行通信,数据的每一位同时在多根数据线上传输。

2)SPI主从模式。

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个主设备,一个或多个从设备,主设备只能有一个。
提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave)。
SPI的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

alt

图1. 一主一从模式

alt

图2. 一主多从模式 ### 3)SPI信号线。 SPI接口包含四条信号线:
MISO:主机输入,从机输出(数据来自从机);
MOSI:主机输出,从机输入(数据来自主机);
SCLK:串行时钟信号,由主机产生发送给从机;
CS	:片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。

4)SPI通信协议。

SPI通信寻址依靠片选信号CS,无应答机制,在传输过程中所有的控制来自SCLK时钟信号。 主要有三点需要注意,分别是传输流程、数据更新与采集、移位寄存这三点。 ==强调容易混淆的两点:== ①SPI通信只有收发,无读写说法。 ②SPI为全双工,因此数据的接收和发送在MOSI与MISO两个数据线上是同时进行的。

A.传输流程

  • ①主机将片选信号CS拉低,开始数据交换;

  • ②主机发送SCLK时钟信号,告诉从机进行数据交换;

  • ③主从机之间进行数据交互,每次以字节或者字为单位(8bit或者16bit)。后面会讲到为啥是这个单位。

      	1字 	= 	2字节		(1 word = 2 byte	)
      	1字节	=	8位		(1 byte = 8bit		)
    

alt

图3. 数据传输图示
1  :主设备拉低使能信号CS,告诉从设备开始通信;
2-5:主从设备进行数据交互,图示一个字节为单位,每次发送1个bit;
6  :主设备拉高使能信号CS,停止数据交互。

B.数据更新与采集

SPI工作时,除了需要确定时钟频率外,还需要确定时钟线空闲状态,以及数据更新与采集发生在时钟的上升沿还是下降沿。SPI共有四种模式,每种模式中数据更新与采集的时间不同,主从设备的工作模式必须一致,某些特定的设备固定了工作模式,主设备必须去和其保持一致。四种模式由时钟极性(CPOL)和时钟相位(CPHA)决定。 CPOL:时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平。

当CPOL=0时,时钟信号在空闲时为低电平;
当CPOL=1时,时钟信号在空闲时为高电平。

CPHA:时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样。

当CPHA=0时,在串行同步时钟的第一个跳边沿(上升沿或下降沿)数据被采样;
当CPHA=1时,在串行同步时钟的第二个跳边沿(上升沿或下降沿)数据被采样。

这两种信号的变化,组合成了SPI的四种工作模式:

工作模式 状态 描述
模式0 CPOL= 0,CPHA=0 SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿更新
模式1 CPOL= 0,CPHA=1 SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿更新
模式2 CPOL= 1,CPHA=0 SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿更新
模式3 CPOL= 1,CPHA=1 SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿更新

alt

图4. SPI四种工作模式

==再强调一点:== SPI里面经常提到的数据的更新与采样:“更新”是指数据从移位寄存器发送到MOSI与MISO通信线上,此时数据已经更新;“采样”是将MOSI与MISO上的数据读进SPI内部的移位寄存器。具体的移位寄存在下方 “C移位寄存” 详细介绍。

C.移位寄存

前面我们一直提到一个概念,SPI通信是“数据交换”,每此发送一个数据的同时就会读到一个数据。如下图所示,SPI内部有数据缓冲区和移位寄存器。如下图所示,Master 设备和 Slave 设备之间通过用 SDO 和 SDI 管脚产生一个数据链路回环。 alt

图5. SPI典型连接图示

“数据缓冲区”的物理本质是一个FIFO,以 FIFO 的形式保存传输过程中的临时数据,FIFO的位宽一般是8bit或者是16bit,因此主从设备之间的数据单位是8bit或16bit;主(Master)与从(Slave)之间交换的数据都是 SPI 内部移位寄存器SSPSR从 SSPBUF“数据缓冲区”里面拷贝的。 下面简单介绍下数据交换流程。

1),在发送数据之前,先将数据移入到数据缓冲区SSPBUF;(这部分不描述) 2),然后根据 Channel-Width 从数据缓冲区SSPBUF移出到移位寄存器SSPSR; (Channel-Width简单理解为主机与从机之间的数据位宽) 3),Master 设备和 Slave 设备之间通过 SDO 和 SDI 管脚的数据链路回环,一位一位的传输数据; 4),经过Channel-Width次的数据交互后,完成一个单位的数据交换; 5),移位寄存器SSPSR根据数据位宽Channel-Width,将数据移入 数据缓冲区SSPBUF ; 6),将数据缓冲区SSPBUF的数据读出。(这部分不描述) 下图为SPI数据交换的示意图,图片出处找不到了,暂不标注出处。

alt

图6. SPI数据交换图示

2.RS232简介

串口作为常用的三大低速总线(UART、SPI、IIC)之一,UART和SPI、IIC不同的是,它是异步通信接口,异步通信中的接收方并不知道数据什么时候会到达,所以双方收发端都要有各自的时钟,在数据传输过程中是不需要时钟的,发送方发送的时间间隔可以不均匀,接受 方是在数据的起始位和停止位的帮助下实现信息同步的。 ==此内容不是本片关键,后续单独讲解,此处只是引用,后续更新文章连接。== 关键词:异步通信,有起始位和停止位。

3.FLASH简介

Flash芯片,是一种非易失性储存芯片,掉电后数据不会丢失,在FPGA工程的设计中,Flash主要用作外接芯片来存储FPGA程序,使FPGA在上电后可以立 即执行我们想要执行的程序。SPI-Flash芯片就是支持SPI通讯协议的Flash芯片。 ==具体的FLASH信息,后续遇到什么更新什么,不去专门讲解==

未完------ FPGA部分见下节。

#FPGA##FPGA工程师##FPGA学习##SPI#
FPGA学习 文章被收录于专栏

记录、分享与交流FPGA学习问题

全部评论

相关推荐

【华为2012实验室AI推理方向秋季招聘】对AI大模型推理系统加速、应用优化、架构设计等感兴趣且想加入华为的同学欢迎联系我,有一定深度学习基础即可,我们更看重学习能力,一起研究共同进步,推荐丰厚的职业机会。地点:北京、上海、合肥、杭州、深圳联系人:李学长,私聊加微信联系一、AI系统软件工程师岗位职责:1、面向大模型、搜索推荐、自主无人系统等关键行业AI应用场景,负责昇腾平台AI软件系统瓶颈分析以及优化方案的设计开发; 2、负责AI训练/推理系统的优化方案设计和开发,结合AI算法对系统的要求,通过网络、IO、调度等方面优化,提升AI系统性能; 3、构建面向AI的系统性建模、瓶颈分析及仿真能力,持续优化昇腾AI软硬件系统,提高昇腾AI平台的竞争力。岗位要求:1、计算机、软件、自动化、电子、通信、机器人等相关专业; 2、编程基础扎实,熟悉掌握python/C/C++编程语言,有良好的架构设计和编程习惯; 3、具备独立工作能力和解决问题的能力、善于沟通,乐于合作,热衷新技术,善于总结分享,喜欢动手实践; 4、有AI模型训练、模型应用部署相关开发和性能优化经验;5、有AI训练框架、AI推理引擎的开发经验,或算法硬件加相关经验者优先。二、AI推理加速工程师岗位职责:1、面向AIGC类大模型,主流商业场景的CV/NLP/语音/推荐类的AI模型推理场景,负责通用的推理加速和量化压缩算法的设计、开发、落地;2、结合昇腾硬件特性,设计昇腾亲和的推理加速算法,构建昇腾推理算法竞争力;3、面向大模型场景,研发高倍率的模型压缩算法,减少大模型部署成本。4、把握业界和学术界最新研究进展和技术趋势,持续提升算法竞争力。岗位要求:1、熟悉计算机视觉/自然语言处理/搜索推荐等方向主流的AI模型及模型推理加速算法,有丰富的推理加速和模型压缩经验,主导过完整的算法研发、优化及落地;2、熟悉通用的参数类、结构类AI模型压缩与加速算法,包括量化、剪枝、蒸馏、网络结构搜索、图优化等;善于自动组合各类模型压缩算法达到最佳的压缩比和推理性能收益,有Transformer大模型的加速经验为佳。3、熟悉业界常见的推理引擎,如TensorRT、vllm、TGI等,熟悉常用的推理加速技术;4、具备较强的算法研究能力,可快速跟踪洞察业界最前沿AI领域技术,主导算法的持续领先。
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
6
6
分享
牛客网
牛客企业服务