记录一下FPGA学习过程中学到的一些接口协议
一、SPI
SPI是 串行外设接口(Serial Peripheral Interface) 的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议
1.1 SPI协议
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDI – SerialData In,串行数据输入;
(2)SDO – SerialDataOut,串行数据输出;
(3)SCLK – Serial Clock,时钟信号,由主设备产生;
(4)CS – Chip Select,从设备使能信号,由主设备控制。
CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。
SCLK信号线只由主设备控制,从设备不能控制信号线
数据输出通过 SDO 线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取
因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出(全双工)
SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
1.2 SPI接口
SPI(Serial Peripheral Interface–串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS。
SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、LCD显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。
SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。
特点:信号线少,协议简单,相对数据速率高。
(1)MOSI – 主器件数据输出,从器件数据输入
(2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK –时钟信号,由主器件产生,最大为fPCLK/2,从模式频率最大为fCPU/2
(4)NSS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)
SPI接口主要优点:
● 支持全双工操作
● 操作简单
● 数据传输速率较高
SPI接口主要缺点:
● 需要占用主机较多的线(每个从机都需要一条片选线)
● 只支持单个主机
● 没有指定的流控制
● 没有应答机制确认是否接收到数据
二、UART
UART是通用异步收发器(Universal Asynchronous Receiver/Transmitter)
UART是单主单从的全双工通信协议,只有两台设备直接相连,其实UART也没有主从的区别,两台设备都可以接收数据和发送数据。在TX发送数据的同时,RX也可以接收数据,并且收发可以以不同的波特率收发数据。
常见的串行通信协议中,IIC是半双工多主多从通信协议,SPI是全双工的单主多从的通信协议。
UART和IIC与SPI最主要的却别在于,后两者是同步通信协议,主线上存在同步时钟线。而UART是异步串行通信协议
异步指的是发送端和接收端没有同步时钟线相连,发送端按某种速率恒定地发送数据,接收端也按照某种恒定的速率接收数据。所以接收端和发送端要按照相同的速率收发数据,否则数据就会乱掉。
波特率
波特率表示每秒钟传送的码元符号的个数,它是对码元传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特即指每秒传输1个码元。在数字传输过程中码元是最基础的单位,如果每个码元只有两个状态,即0或1,则1码元和1bit相同,1波特率等于1比特率。常用的波特率有600,1200,2400,4800,9600,19200和38400,在UART中理解为时钟周期即可。
数据传输格式:
UART是异步通信,没有同步时钟,虽然可以通过相同的波特率来接收,但是收发模块内的波特率也会有相位差,那么就需要一个在传输数据中有start和stop标志来做波特率的同步,然后再在中间发送需要发送的数据。数据位可以为5,6,7,8,9位,常用的形式还是一个byte-8bit数据位。值得主义的是,UART协议中的数据位是LSB模式,即低位先发,高位后发,这与IIC与SPI是不同的,在编写代码的时候要注意。
起始位、停止位
TX线在无数据传输的时候,始终为高电平,有数据要传的时候,把TX拉低,即产生了start标志,结束位为高电平。结束位和开始位都可以做同步指示,有些时候结束位可以为1.5或2个周期的高电平,可以更有效地做波特率同步,但会降低传输速率。
校验位
数据位之后的1bit为校验位,校验位有五种模式:无校验、奇校验、偶校验、始终为0、始终为1。
奇偶校验是数据通信中常用的校验模式,可以简便地校验数据是否出错,但是只知道数据是否出错,却不能纠正数据。
奇校验指的是,加上校验位,共有奇数个1,偶校验指的是,加上校验位共有偶数个1。可以把所有数据位加起来,观察结果是奇数还是偶数来确定数据中1的个数,也可以用按位异或的方法快速判断。文章来源:https://www.toymoban.com/news/detail-741332.html
具体的Verilog代码可见FPGA-UART串口发送数据文章来源地址https://www.toymoban.com/news/detail-741332.html
到了这里,关于FPGA接口小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!