历史上的今天
返回首页

历史上的今天

今天是:2024年10月07日(星期一)

正在发生

2018年10月07日 | SPI四种工作模式时序图

2018-10-07 来源:eefocus

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方式(实线表示):

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分频的波形为例,分析同步串行时钟、主时钟和从时钟之间的关系。

主从时钟和SCK的关系

图4主从时钟和SCK的关系

  如图4所示,当T<="" p="">从

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

主从时钟和SCK的关系

图5主从时钟和SCK的关系

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

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


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会不会出现较大毛刺影响系统稳定性呢?


推荐阅读

史海拾趣

国芯佳品公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。它作为连接电视机与外部信号源的桥梁,不仅承担着接收数字电视信号并将其转换为适合电视播放格式的基本任务,还通过技术的不断演进,极大丰富了用户的视听体验。

从专业角度来看,机顶盒经历了从模拟到数字的飞跃,涵盖了多种类型,如DVB-S(数字卫星机顶盒)、DVB-C(有线电视数字机顶盒)、IPTV机顶盒等。这些机顶盒通过不同的传输介质(如有线电缆、卫星天线、宽带网络)接收信号,并借助内部高效的解码器,将数字信号转换成高质量的音视频流,实现了高清乃至4K超高清的播放效果。

在科普层面,机顶盒的普及极大地推动了家庭娱乐的多元化。它不仅让用户能够收看更多样化的电视节目,还能通过连接互联网,提供电子节目指南、在线视频、网页浏览、社交媒体互动等增值服务。此外,一些先进的机顶盒还集成了智能语音助手、家庭影院功能,甚至支持存储个人媒体文件,让用户的娱乐体验更加个性化、便捷化。

随着5G、云计算、人工智能等技术的不断发展,机顶盒正朝着更高清、更智能、更互动的方向迈进。它不仅将继续作为电视内容的接收和展示终端,更将成为智能家居生态系统中的重要一环,为用户带来更加丰富、沉浸的娱乐享受。

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们不仅限于接收和转换电视信号,还承载着丰富的娱乐与信息服务功能。

机顶盒的核心功能在于接收并转换来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,将其转换为电视机可识别的视频和音频流。这一转换过程确保了观众能够享受到高清乃至4K超高清的画质和震撼的音效,极大地提升了观看体验。此外,机顶盒还集成了诸如电子节目指南、因特网网页浏览等增值服务,让电视机不再仅仅是单向接收信息的设备,而是成为一个能够与用户进行互动的智能终端。

随着技术的发展,机顶盒的种类日益丰富,按主要功能可分为数字卫星机顶盒、有线电视数字机顶盒、IPTV机顶盒等。这些机顶盒不仅满足了用户多样化的观看需求,还通过连接互联网,提供了在线购物、视频点播、游戏娱乐等多元化服务。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向智能化、多功能化方向发展,为用户提供更加便捷、个性化的使用体验。

总之,机顶盒作为连接电视与互联网的桥梁,在丰富家庭娱乐生活、提升观看体验方面发挥着重要作用。随着技术的不断进步和市场需求的持续增长,机顶盒行业将迎来更加广阔的发展前景。

DURATOOL公司的发展小趣事

人才是企业发展的第一资源。DURATOOL公司一直高度重视人才的培养和引进。公司建立了一套完善的人才选拔和培养机制,通过内部培训、外部招聘等方式不断吸纳优秀人才加入公司。同时,公司还为员工提供了广阔的发展空间和良好的福利待遇,激发了员工的积极性和创造力。这些举措使得DURATOOL公司拥有一支高素质、专业化的员工队伍,为企业的发展提供了有力的人才保障。

ARCOL公司的发展小趣事

为了进一步扩大市场份额,ARCOL公司积极寻求与国内外知名企业的合作机会。通过与合作伙伴建立战略合作关系,ARCOL成功打入国际市场,产品销量大幅提升。同时,公司还积极参加各类国际电子展会和交流活动,与全球客户建立了紧密的合作关系,为公司的全球化发展打下了坚实的基础。

台湾晶豪(ESMT)公司的发展小趣事

晶豪科技一直将研发作为公司的核心竞争力。公司成功建立了各种容量及接口规格的特定型DRAM产品线,包括SDRAM、DDR I/II/III及PSRAM、低耗电的Mobile DRAM等。这些产品广泛应用于各种电子设备和系统,赢得了市场的广泛认可。此外,公司还针对系统级封装(SiP)的需求,成功开发了所需的“良品晶粒”(Known-Good-Die, KGD)产品及多芯片模块封装(MCP)的解决方案,满足了客户的多样化需求。

Ferroxcube公司的发展小趣事

在电子行业中,质量始终是客户最关心的问题之一。Ferroxcube公司深知这一点,因此在生产过程中严格控制产品质量,确保每一个出厂的产品都符合甚至超过客户的期望。

有一次,一个大型电子设备制造商向Ferroxcube下了一笔大额订单,要求提供一批高性能的磁环。然而,在生产过程中,质检部门发现其中一部分磁环的性能指标略低于标准要求。虽然这批产品仍然符合市场上的大部分需求,但Ferroxcube公司决定全部返工,确保每一件产品都达到最高标准。

这一举动虽然增加了公司的生产成本,但却赢得了客户的极高评价。那家大型电子设备制造商对Ferroxcube的严谨态度和专业精神表示赞赏,并将Ferroxcube列为了其首选供应商之一。此后,双方的合作更加紧密,共同开发了许多创新的电子产品。

问答坊 | AI 解惑

AD603完整资料!!!

本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 我这里有AD603的完整资料,和大家分享~~~~  …

查看全部问答>

一个GEL文件引起的故事

有段时间没上了,发个贴 前段时间做了个280x的板,开始用的是2801,然后改为2806。从2801的板子换成2806的时候,RAM调试的0x9000怎么也不能访问,各方寻经都没得到解决。后来得一哥们提示,看Memory Map里面分配情况,这个时候才发现由于开始使用的 ...…

查看全部问答>

拜求MATLAB仿真与DSP的问题

我做电机控制的仿真,在MATLAB的SINULIN中有电机的模块,可是没有DSP的模块,问能不能在simulik用一个DSP的模块和电机的模块搭建起控制系统的仿真模型? 求解答…

查看全部问答>

很有用,有点不舍的 数控电源

数控电源.rar 数控电源全部资料…

查看全部问答>

如何让电动十字滑架移动?

请教各位: 计算机输出信号(偏差量)怎么可以带动电动十字滑架移动?之间需要怎么一个具体的原理,我不懂.需要什么设备,器件请教. 非常感谢! …

查看全部问答>

TMS320F28335 接几M的晶振合适?

PDF提到是20到35M之间,大家用的时候用多少M,然后PLL到150M啊?…

查看全部问答>

秀一秀TI杯奖品!!!!!!!

今天刚到教务处领到去年参加的TI杯省赛的奖品,PHILIPS 的tablet 7 (8G版本)     东西是不错,不过不是喜欢的类型,不过没办法。…

查看全部问答>

win8系统下如何安装eZ430-RF2500驱动?

RT,win8 系统下插上去后不能自动安装,请教如何手动安装? …

查看全部问答>

LPC1500+IAR开发环境之LED灯

本帖最后由 jerrylwb 于 2014-8-20 15:37 编辑      要很好的玩转一块开发板首先要有合适的开发平台,目前用于调试LPC1500开发板的编译主要有LPCxpresso、keil和IAR 。LPCxpresso作为官方推荐的开发环境自然不必说,keil和IA ...…

查看全部问答>