1 SPI总线的特点、工作方式及常见错误解答-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPI总线的特点、工作方式及常见错误解答

FPGA设计论坛 来源:未知 2022-11-15 13:55 次阅读


1.SPI总线简介

SPI(serial peripheral interface,串行外围设备接口总线技术是Motorola公司推出的一种同步串行接口。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一个字节数据传输的实质是两个器件寄存器内容的交换。主SPI的时钟信号(SCK)使传输同步。其典型系统框图如下图所示。

图1 典型系统框图

2.SPI总线的主要特点

· 全双工;

· 可以当作主机或从机工作;

· 提供频率可编程时钟;

· 发送结束中断标志;

· 写冲突保护;

.总线竞争保护等。

3.SPI总线工作方式

SPI总线有四种工作方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):

图2 SPI0和SPI3方式(实线表示)

四种工作方式时序分别为:

图3 四种工作方式时序

时序详解:

CPOL:时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平

CPHA:时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样

工作方式1:

当CPHA=0、CPOL=0时SPI总线工作在方式1。MISO引脚上的数据在第一个SPSCK沿跳变之前已经上线了,而为了保证正确传输,MOSI引脚的MSB位必须与SPSCK的第一个边沿同步,在SPI传输过程中,首先将数据上线,然后在同步时钟信号的上升沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(下降沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。

工作方式2:

当CPHA=0、CPOL=1时SPI总线工作在方式2。与前者唯一不同之处只是在同步时钟信号的下降沿时捕捉位信号,上升沿时下一位数据上线。

工作方式3:

当CPHA=1、CPOL=0时SPI总线工作在方式3。MISO引脚和MOSI引脚上的数据的MSB位必须与SPSCK的第一个边沿同步,在 SPI传输过程中,在同步时钟信号周期开始时(上升沿)数据上线,然后在同步时钟信号的下降沿时,SPI的接收方捕捉位信号,在时钟信号的一个周期结束时(上升沿),下一位数据信号上线,再重复上述过程,直到一个字节的8位信号传输结束。

工作方式4:

当CPHA=1、CPOL=1时SPI总线工作在方式4。与前者唯一不同之处只是在同步时钟信号的上升沿时捕捉位信号,下降沿时下一位数据上线。

4.SPI总线常见错误

4.1 SPR设定错误

在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确,要在软件中处理)。

整个系统的速度受三个因素影响:主器件时钟CLK主、从器件时钟CLK从和同步串行时钟SCK,其中SCK是对CLK主的分频,CLK从和 CLK主是异步的。要使SCK无差错无遗漏地被从器件所检测到,从器件的时钟CLK从必须要足够快。下面以SCK设置为CLK主的4分频的波形为例,分析同步串行时钟、主时钟和从时钟之间的关系。

图4主从时钟和SCK的关系

如图4所示,当T从图5中,当T从≥TSCK/2=2T主时,在clk_s的两个上升沿都检测不到SCK的低电平,这样从器件就会漏掉一个SCK。在某些相位条件下,即使CLK从侥幸能检测到SCK的低电平,也不能保证可以继续检测到下一个SCK。只要遗漏了一个SCK,就相当于串行数据漏掉了一个位,后面继续接收/发送的数据就都是错误的了。

图5主从时钟和SCK的关系

根据以上的分析,SPR和主从时钟比的关系如表1所列。

表1 SPR的设置和主从时钟周期比值之间的关系


在发送数据之前按照表1对SPR进行设置,SPR设定错误可以完全避免。

4.2 模式错误(MODF)

模式错误表示的是主从模式选择的设置和引脚SS的连接不一致。

器件工作在主模式的时候(MSTR=1),它的片选信号SS引脚必须接高电平。在发送数据的过程中,如果它的SS从高电平跳至低电平,在SS的下降沿,SPI模块将检测到模式错误,对MODF位置1,强制器件从主模式转入从模式(即令MSTR=0),清空内部计数器counter,并结束正在进行的数据传输,如图6(a)所示。

对从模式(MSTR=0),在没有数据传送的时候,SS高电平表示从器件未被选中,从器件不工作,MISO输出高阻;在数据传输过程中,片选信号SS必须接低电平,且SS不允许跳变。如果SS从低电平跳到高电平,在SS的上跳沿,SPI模块也将检测到模式错误,清空内部计数器counter,并结束正在进行的数据传输。直到SS恢复为低电平,重新使SPEN=1时,才重新开始工作,如图6(b)所示。

图6模式错误的检测

4.3 溢出错误(OVR

溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。

状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生,而从器件的SPIF有效则只能由收到的第一个SCK的跳变产生,且又由于从器件的SPIF和主器件发出的SCK是异步的,因此从器件的传输标志SPIF从相对于主器件的传输标志SPIF主有一定的滞后。如图7所示,在主器件连续发送两个数据的时候将有可能导致从器件的传输标志和主器件下一个数据的传输标志相重叠(图7中虚线和阴影部分),第一个收到的数据必然被覆盖,第二个数据的收/发也必然出错,产生溢出错误。

图7溢出错误

通过对从器件的波形分析发现,counter=8后的第一个时钟周期,数据最后一位的传输已经完成。在数据已经收/发完毕的情况下,counter=8状态的长短对数据的正确性没有影响,因此可以缩短counter=8的状态,以避免前一个SPIF和后一个SPIF相重叠。这样,从硬件上避免了这一阶段的溢出错误。

但是,如果从器件工作速度不够快或者软件正在处理其他事情,在SPI接口接收到的数据尚未被读取的情况下,又接收到一个新的数据,溢出错误还是会发生的。此时,SPI接口保护前一个数据不被覆盖,舍弃新收到的数据,置溢出标志OVR=1;另外发出中断信号(如果该中断允许),通知从器件及时读取数据。

4.4 偏移错误(OFST)

SPI接口一般要求从器件先工作,然后主器件才开始发送数据。有时在主器件往外发送数据的过程中,从器件才开始工作,或者SCK受到外界干扰,从器件未能准确地接收到8个SCK。如图8所示,从器件接收到的8个SCK其实是属于主器件发送相邻的两个数据的SCK主。这时,主器件的SPIF和从器件的SPIF会发生重叠,数据发生了错位,从器件如果不对此进行纠正的话,数据的接收/发送便一直地错下去。

图8偏移错误

在一个数据的传输过程中,SPR是不允许改变的,即SCK是均匀的,而从图5可以看出,从器件接收到的8个SCK并不均匀,它们是分别属于两个数据的,因此可以计算SCK的占空时间来判断是否发生了偏移错误。经分析,正常时候SCK=1时的时钟周期数n的取值满足如下关系:

但由于主从时钟之间是异步的,并且经过了取整,所以正常时候SCK=1时的时钟周期计数值COUNT应满足:

比如在图5中,COUNT的最大值COUNT(max)=2或者1,都可认为是正常的。但当出现COUNT(max)=8时,可以判定出现了偏移错误。在实际设计中,先记录下第一个COUNT(max)的值,如果后面又出现与记录值相差1以上的COUNT(max)出现,可知有偏移错误OFST 发生。SPI接口在“不均匀”的地方令SPIF=1,然后准备等待下一个数据的第一个SCK。其中COUNT的位数固定为8位,为了避免溢出时重新从 00H开始计数,当计数达到ffH时停止计数。

4.5 其他错误

设定不当,或者受到外界干扰,数据传输难免会发生错误,或者有时软件对错误的种类判断不清,必须要有一种方法强制SPI接口从错误状态中恢复过来。在SPI不工作,即SPEN=0的时候,清除SPI模块内部几乎所有的状态(专用寄存器除外)。如果软件在接收数据的时候,能够发现数据有错误,无论是什么错误,都可以强制停止SPI的工作,重新进行数据传输。例如,在偏移错误(OFST)中,如果SPR2、SPR1和SPR0的设置适当,也可以使 SCK显得比较“均匀”。SPI接口硬件本身不可能检测到有错误,若用户软件能够发现错误,这时就可以强制停止SPI的传输工作,这样就可以避免错误一直持续下去。

在应用中,如果对数据的正确性要求较高,除了要在软件上满足SPI接口的时序要求外,还需要在软件上作适当的处理。

5.设计SPI总线控制器

目前的项目中使用了SPI总线接口的FLASH存储器存储图像数据。FLASH的SPI总线频率高达66M,但MCU的频率较低,晶振频率 7.3728M,SPI最大频率为主频1/2。对于320*240*16的图像读取时间为333ms,而且还忽略了等待SPI传输完成、写显存、地址坐标设定等时间。实际测试约为1s。成为GUI设计的极大瓶颈。由于TFT驱动是自己FPGA设计的,资源尚有余量,决定把SPI控制器(主)及写图像部分逻辑放入FPGA中用硬件完成。

首先接触到的是SPI的SCK时钟频率问题。FPGA的频率是48M,未使用PLL。能否以此频率作为SCK频率呢?要知道所有的MCU提供的 SPI频率最大为主频的1/2!为什么呢?查过一些资料后发现,SPI从机接收数据并不是以SCK为时钟的,而是以主频为时钟对SCK和MISO进行采样,由采样原理得知SCK不能大于1/2主频,也就有了MCU提供最大master频率是1/2主频,最大slaver频率是1/4主频。FPGA在只作为主机时能否实现同主频一样频率的SCK呢??答案貌似是肯定的!但我还是有点担心,用组合逻辑控制SCK会不会出现较大毛刺影响系统稳定性呢?




扫描二维码获取

更多精彩

FPGA设计论坛




欢迎关注至芯科技

至芯官网:www.zxopen.com

至芯科技技术论坛:www.fpgaw.com

至芯科技淘宝网址:

https://zxopen.taobao.com

至芯科技FPGA初级课程(B站):

https://space.bilibili.com/521850676

至芯科技FPGA在线课程(腾讯课堂):

https://zxopenbj.ke.qq.com/

至芯科技-FPGA 交流群(QQ):282124839






精彩推荐



至芯科技12年不忘初心、再度起航11月12日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
FPGA职业生涯的五个层次
FPGA各存储器之间的关系
扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!



点个在看你最好看





原文标题:SPI总线的特点、工作方式及常见错误解答

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602986

原文标题:SPI总线的特点、工作方式及常见错误解答

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于光耦合器的常见误解

    光耦合器以其提供电气隔离的能力而闻名,广泛应用于从电源到通信系统的各种应用。尽管光耦合器非常普遍,但人们对其特性和用途存在一些常见误解。本文将揭穿一些最常见误解,以帮助工程师和爱好
    的头像 发表于 12-06 10:04 63次阅读
    关于光耦合器的<b class='flag-5'>常见</b><b class='flag-5'>误解</b>

    PNP传感器输出信号的特点工作方式

    PNP传感器的输出信号是其工作过程中的关键环节,它决定了传感器如何与外部电路或控制系统进行交互。以下将详细解释PNP传感器的输出信号,包括其特点工作方式、应用场景以及相关的接线和注意事项。
    的头像 发表于 09-13 17:32 1917次阅读

    CAN总线错误状态的种类

    CAN总线错误状态的种类主要包括以下几种,每种状态都反映了CAN总线网络中节点或总线的不同错误情况,以及相应的通信能力和限制。
    的头像 发表于 09-03 14:17 1308次阅读

    SPI总线的定义和特点

    领域得到了广泛的应用,尤其是在微控制器(MCU)与外部设备(如传感器、存储器等)之间的数据传输中扮演着重要角色。以下将详细阐述SPI总线的定义、特点及其工作原理。
    的头像 发表于 09-03 14:05 776次阅读

    串行口的四种工作方式各有什么特点

    ,分别是方式0、方式1、方式2和方式3,每种方式都有其独特的特点和应用场景。以下是对这四种
    的头像 发表于 08-22 17:37 1531次阅读

    放大器的非线性工作方式

    放大器的非线性工作方式是一个复杂而广泛的主题,它涉及到电子学、信号处理以及电路设计等多个领域。在非线性工作方式下,放大器的输出信号不再是输入信号的简单线性放大,而是会引入各种非线性效应,如失真、频率变换、谐波产生等。
    的头像 发表于 08-08 17:32 608次阅读

    定时器的工作方式介绍

    定时器是计算机和嵌入式系统中常见的一种硬件模块,用于实现定时和计数功能。定时器的工作方式通常由一组寄存器来控制,这些寄存器定义了定时器的配置参数和工作状态。 定时器概述 定时器是一种用于测量时间间隔
    的头像 发表于 07-12 10:29 901次阅读

    三相步进电机有哪几种工作方式

          三相步进电机是一种常见的电机类型,广泛应用于各种自动化设备和精密控制系统中。它具有结构简单、控制方便、运行可靠等优点。三相步进电机的工作方式主要有以下几种:       1.全步工作方式
    的头像 发表于 06-23 16:26 903次阅读
    三相步进电机有哪几种<b class='flag-5'>工作方式</b>?

    永磁同步电动机的结构与工作方式

    永磁同步电动机(Permanent Magnet Synchronous Motor,简称PMSM)作为一种高效、节能的电动机类型,在现代工业、交通、家电等领域得到了广泛应用。其独特的结构和工作方式
    的头像 发表于 06-21 11:15 845次阅读

    PLC的CPU工作方式详解

    Processing Unit,中央处理器)作为其核心组件,其工作方式直接影响到PLC的性能和稳定性。本文将详细探讨PLC的CPU工作方式,包括其工作原理、主要模式以及实际应用中的注意事项,以期为相关技术人员提供参考和借鉴。
    的头像 发表于 06-13 18:20 1770次阅读

    三相步进电机有哪几种工作方式

    三相步进电机是一种常见的电机类型,广泛应用于各种自动化设备和精密控制系统中。它具有结构简单、控制方便、运行可靠等优点。三相步进电机的工作方式主要有以下几种: 全步工作方式 全步工作方式
    的头像 发表于 06-12 09:20 1092次阅读

    斩波器的定频调宽工作方式

    斩波器的定频调宽工作方式是一种电力电子控制技术,用于调节输出电压或电流。
    的头像 发表于 05-24 16:12 649次阅读

    DC电源模块的原理及工作方式

    BOSHIDA  DC电源模块的原理及工作方式 DC电源模块是一种将交流电转换为直流电的设备,它将交流电输入端转换为稳定的直流电输出,以供电子设备使用。DC电源模块的工作原理及工作方式如下。  DC
    的头像 发表于 04-24 10:37 718次阅读
    DC电源模块的原理及<b class='flag-5'>工作方式</b>

    PCB设计工作中常见错误有哪些?

    一站式PCBA智造厂家今天为大家讲讲PCB设计工作中常见错误有哪些?PCB设计中最常见到的六个错误。PCB设计是电子产品制造中非常关键的一环。它的质量直接关系到整个产品的性能和稳定性
    的头像 发表于 02-21 09:32 554次阅读
    PCB设计<b class='flag-5'>工作中常见</b>的<b class='flag-5'>错误</b>有哪些?

    常见的直流负载工作方式

    常见的直流负载工作方式  直流负载工作方式是指在直流电路中使用的各种负载方式。直流负载是用于测试和测量直流电源输出能力和能效的设备,可以模拟真实负载条件下的电流和功率需求。本文将详细
    的头像 发表于 01-18 15:12 755次阅读