`

(转)SPI常见传输错误解答

 
阅读更多

http://www.dzsc.com/data/html/2011-3-25/89304.html

 

1. SPR设定错误

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

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

主从时钟和SCK的关系

图4 主从时钟和SCK的关系

  如图4所示,当T从<Tsck/2,即T从<2T主时,无论主时钟和从时钟之间的相位关系如何,在从器件CLK从的上升沿必然能够检测到SCK的低电平,即SCK=0的范围内至少包含一个CLK从的上升沿。

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

主从时钟和SCK的关系

图5 主从时钟和SCK的关系

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

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


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

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

 

2. 模式错误

  模式错误表示的是主从模式选择的设置和引脚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 模式错误的检测

3. 溢出错误

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

  状态标志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. 偏移错误

  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时停止计数。

 

5. 其他错误

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

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

分享到:
评论

相关推荐

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

    在SPI总线中,存在一些常见错误,主要包括: 1. SPR(SPI波特率寄存器)设定错误:如果从设备的时钟频率小于主设备的时钟频率,但SCK时钟速率设置得太快,从设备可能无法正确捕获数据。主设备的时钟CLK主与从设备的...

    SPI.rar_spi_spi 驱动_spi驱动_spi驱动程序_通信协议

    在www.pudn.com.txt中,可能包含了SPI接口驱动程序的详细设计、使用示例或者常见问题解答。SPI接口驱动程序文件则提供了具体的代码实现,包括初始化、数据传输等功能的C语言源码,用户可以根据自己的硬件平台和需求...

    SPI.rar_SPI总线_spi

    SPI(Serial Peripheral Interface)总线是一种同步串行通信接口,广泛应用于嵌入式系统和微控制器之间,以连接各种外设,如...SPI文档(SPI.doc)将提供更详细的信息,包括具体编程示例和常见问题解答,建议仔细阅读。

    DSC6713_SPI.rar

    2. 应用笔记:提供了SPI通信的最佳实践、常见问题解答以及特定应用的解决方案。 3. 示例代码:可能包含用C或汇编语言编写的SPI通信示例程序,帮助开发者快速理解和应用SPI功能。 4. 调试工具:如SPI通信的仿真工具或...

    faq.rar_quadspi

    5. **FAQ(常见问题解答)**:faq.txt文件很可能包含了用户在使用QuadSPI驱动时可能会遇到的问题及其解决方案,例如配置错误、数据传输问题、兼容性问题等。 6. **性能优化**:讨论如何调整驱动参数以提高数据传输...

    ch341a spi烧录器资料

    这可能是一个更新版本的文档集合,包含了CH341A SPI烧录器的详细信息、操作手册、常见问题解答、固件更新等资源。 **详细知识点:** 1. **CH341A芯片:** CH341A是一种USB转串行接口的通用编程器,广泛应用于微...

    SPI.rar_TMS320LF2407A

    3. **文档**:可能包含SPI接口的使用指南、API参考手册、注意事项和常见问题解答,帮助开发者理解和使用SPI功能。 4. **示例程序**:提供了SPI通信的具体应用实例,便于快速上手和调试。 通过这些资源,开发者可以...

    RTOS_SPINOR_开发指南1

    常见问题解答部分可能会涵盖如何解决常见的错误、性能优化建议、兼容性问题等。 总结,RTOS SPINOR开发指南1是为开发者提供关于如何在实时操作系统中有效利用SPI NOR闪存的详细指导,涵盖了从驱动配置、接口使用到...

    ZLG7290 I2C接口键盘及LED驱动器常见问题解答

    ### ZLG7290 I2C接口键盘及LED驱动器常见问题解答 #### 芯片概述 ZLG7290是一款由广州周立功单片机发展有限公司自主研发的智能显示驱动芯片,它具备I2C串行接口功能,能够同时驱动8位共阴式数码管(或64只独立LED)...

    nRF2401 无线传输模块

    快速手册则为用户提供快速入门的指导,涵盖了基本配置、接口操作和常见问题解答等内容,方便用户快速上手。 五、应用实例与扩展 nRF2401常用于构建点对点或点对多点的无线通信系统。例如,在智能家居中,它可用于...

    STM32常见问题与解析

    STM32是一款基于ARM Cortex-M内核的微控制器,由意法半导体(STMicroelectronics)生产,广泛应用在嵌入式系统、物联网...《STM32常见应用解析》这份文档应该包含了这些主题的详细解答,对于学习和解决问题非常有帮助。

    USB2XXX_Mamu使用说明1

    这部分可能包含确保设备正常运行和避免数据传输错误的建议,例如电源管理、数据速率限制、兼容性问题等。 5、常见问题问答: 常见问题解答章节通常提供了针对用户在使用过程中遇到的问题的解决方案,帮助用户快速...

    9341配套资料

    2. SPI接口详解:SPI协议由主设备(Master)和从设备(Slave)构成,通过四根线进行数据传输:SCLK(时钟信号)、MISO(主设备输入,从设备输出)、MOSI(主设备输出,从设备输入)和SS(片选信号)。在9341应用中,...

    CH341A转I2C的Labview 及应用说明文档-所有版本都可以使用

    4. 实际操作中的注意事项和常见问题解答。 **六、单片机数据采集** 通过CH341A,LabVIEW可以直接与单片机进行数据交互,实现数据采集。例如,你可以用I2C协议读取温度传感器的数据,然后在LabVIEW界面上显示出来,...

    单片机原理与接口技术[习题解答]

    此外,SPI(串行外围接口)、I2C(集成电路间通信)等也是常见的接口协议,它们在现代电子设备中广泛使用。 在《单片机原理与接口技术》的习题解答中,可能涵盖了以下几个方面的知识点: 1. 单片机的指令系统:...

    Lora常见问题

    以下是关于LoRa及SX1278模块的一些常见问题及详细解答: 1.SX1278模块的收发切换问题: SX1278模块中并没有直接引出“PA_RX_OUT”和“PA_TX_OUT”这两个引脚,这两个引脚通常是芯片级别的。在模块层面,收发的切换...

    SD卡模块资料

    测试程序中可能包含的关键部分有SD卡的SPI或DMA传输模式,以及FAT文件系统的支持。 相关资料则可能包含SD卡的协议规范、API接口文档、常见问题解答(FAQ)和应用笔记。SD卡协议规范解释了如何与卡通信,包括命令...

    usb ch372 资料

    在使用过程中,可能会遇到设备无法识别、数据传输错误等问题。这时,可以检查USB接口连接是否稳定、驱动程序是否安装正确、电源供应是否充足等,同时查阅CH372的技术手册和常见问题解答,进行故障排除。 8. 设计...

    MicroBlaze常见问题汇总

    根据外设的特性,如GPIO、SPI、UART等,设置中断向量表,编写中断服务例程以响应外部事件。 ### 5. 系统验证 #### 问题9:如何验证MicroBlaze系统的功能正确性? 答:通过编写测试程序,对每个外设进行功能验证。...

Global site tag (gtag.js) - Google Analytics