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设计论坛】欢迎添加关注!文章转载请注明出处。

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

    关注

    1602

    文章

    21320

    浏览量

    593206

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    同步整流和异步整流的工作方式和区别,你知道吗?

    同步整流和异步整流的工作方式和区别,你知道吗? 同步整流和异步整流是电力电子领域中常用的两种整流方式。它们在工作原理、结构设计以及特性等方面存在一定的区别。 一、同步整流工作方式及原理
    的头像 发表于 02-04 10:06 478次阅读

    常见的直流负载工作方式

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

    POE工业交换机的原理和工作方式是什么?

    POE工业交换机是现代工业网络通信中不可或缺的一部分。该工业级交换机的完整名称是“PoweroverEthernet(以太网供电)”,其主要特点是能够通过网络连接线同时传输数据和电力。在这篇文章中,我们将详细讨论一下POE工业交换机的原理和工作方式
    的头像 发表于 12-21 15:50 870次阅读

    三相升压器的原理、工作方式、应用领域

    三相升压器的原理、工作方式、应用领域 三相升压器是一种电力设备,用于将输入的低压三相电流转换为高压三相电流。它是电力输电和配电系统中不可或缺的部分,广泛应用于工业、农业、交通等领域。本文将详细介绍
    的头像 发表于 11-20 14:44 462次阅读

    太阳能离网逆变电源工作方式特点介绍

    太阳能离网逆变电源工作方式特点介绍  太阳能离网逆变电源是一种利用太阳能发电并将其转换为交流电的装置。离网逆变电源不依赖于传统的电网供电,而是通过太阳能板将太阳能转化为直流电,然后经过逆变器
    的头像 发表于 11-16 11:22 365次阅读

    十大WiFi常见误解

    电子发烧友网站提供《十大WiFi常见误解.doc》资料免费下载
    发表于 11-10 16:06 1次下载
    十大WiFi<b class='flag-5'>常见</b><b class='flag-5'>误解</b>

    非隔离型开关电源的三种工作方式

    非隔离型开关电源一般有三种基本工作方式,降压型、升压型、极性反转型三种,而其他的都是这三种形式转换而来,例如反激式、正激式、推挽式、半桥式、全桥式。
    发表于 09-24 11:28 1.2w次阅读
    非隔离型开关电源的三种<b class='flag-5'>工作方式</b>

    非隔离型开关电源的三种工作方式

    非隔离型开关电源的三种工作方式
    的头像 发表于 09-18 15:31 566次阅读
    非隔离型开关电源的三种<b class='flag-5'>工作方式</b>

    认识CAN总线错误 CAN总线错误分析与解决

    认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样才能更容易地理解CAN 总线是如何去发现并解决错误的。
    发表于 08-14 15:18 3614次阅读
    认识CAN<b class='flag-5'>总线</b><b class='flag-5'>错误</b> CAN<b class='flag-5'>总线</b><b class='flag-5'>错误</b>分析与解决

    热阻湿阻测试仪的原理与工作方式

    。本文将详细介绍热阻湿阻测试仪的原理、应用领域、技术特点以及如何选择适合您需求的测试仪器。 一、热阻湿阻测试仪的原理与工作方式 热阻湿阻测试仪基于传导定律和传热原理,通过使用高精度温度传感器测量不同位置的温度
    的头像 发表于 06-29 14:07 1823次阅读
    热阻湿阻测试仪的原理与<b class='flag-5'>工作方式</b>

    RAID 的工作方式

    )磁盘上,借此来提高性能或建立数据冗余以防驱动器发生故障。您可以通过设定设备的 RAID 模式来决定设备以何种方式处理数据。 为更好地了解 RAID 的工作方式,首先应熟悉以下术语: 条带化是指将数据分到多个驱动器上。条带 RAID 阵列通常用于
    的头像 发表于 06-25 14:56 428次阅读
    RAID 的<b class='flag-5'>工作方式</b>

    CDMA系统的原理及工作方式

    CDMA系统的工作方式允许多个用户在同一频率上同时传输,每个用户使用不同的伪随机码进行扩频和解扩。接收方通过匹配相应的伪随机码来提取出特定用户的信号,从而实现了多用户同时通信的目标。
    发表于 06-16 16:40 3173次阅读

    串行通信SPI总线的详解分析

    )、主入从出数据线(MISO)、主出从入数据线(MOSI)和低电平有效的从机选择线(SS);其主要特点包括:可以同时发出和接收船型数据;可以作为主机或从机工作;发送结束中断标志;写冲突保护和总线竞争保护。
    的头像 发表于 05-05 16:40 3122次阅读
    串行通信<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>的详解分析