SPI总线常见错误

1 SPR设定错误
 在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确,要在软件中处理)。
 整个系统的速度受三个因素影响:主器件时钟CLK主、从器件时钟CLK从和同步串行时钟SCK,其中SCK是对CLK主的分频,CLK从和CLK主是异步的。要使SCK无差错无遗漏地被从器件所检测到,从器件的时钟CLK从必须要足够快。下面以SCK设置为CLK主的4分频的波形为例,分析同步串行时钟、主时钟和从时钟之间的关系。

图1主从时钟和SCK的关系
 如图1所示,当T从<Tsck/2,即T从<2T主时,无论主时钟和从时钟之间的相位关系如何,在从器件CLK从的上升沿必然能够检测到SCK的低电平,即SCK=0的范围内至少包含一个CLK从的上升沿。
 图2中,当T从≥TSCK/2=2T主时,在clk_s的两个上升沿都检测不到SCK的低电平,这样从器件就会漏掉一个SCK。在某些相位条件下,即使CLK从侥幸能检测到SCK的低电平,也不能保证可以继续检测到下一个SCK。只要遗漏了一个SCK,就相当于串行数据漏掉了一个位,后面继续接收/发送的数据就都是错误的了。

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

表1 SPR的设置和主从时钟周期比值之间的关系
 在发送数据之前按照表1对SPR进行设置,SPR设定错误可以完全避免。
2 模式错误(MODF)
 模式错误表示的是主从模式选择的设置和引脚SS的连接不一致。
 器件工作在主模式的时候(MSTR=1),它的片选信号SS引脚必须接高电平。在发送数据的过程中,如果它的SS从高电平跳至低电平,在SS的下降沿,SPI模块将检测到模式错误,对MODF位置1,强制器件从主模式转入从模式(即令MSTR=0),清空内部计数器counter,并结束正在进行的数据传输,如图3(a)所示。
 对从模式(MSTR=0),在没有数据传送的时候,SS高电平表示从器件未被选中,从器件不工作,MISO输出高阻;在数据传输过程中,片选信号SS必须接低电平,且SS不允许跳变。如果SS从低电平跳到高电平,在SS的上跳沿,SPI模块也将检测到模式错误,清空内部计数器counter,并结束正在进行的数据传输。直到SS恢复为低电平,重新使SPEN=1时,才重新开始工作,如图3(b)所示。

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

图4溢出错误
  通过对从器件的波形分析发现,counter=8后的第一个时钟周期,数据最后一位的传输已经完成。在数据已经收/发完毕的情况下,counter=8状态的长短对数据的正确性没有影响,因此可以缩短counter=8的状态,以避免前一个SPIF和后一个SPIF相重叠。这样,从硬件上避免了这一阶段的溢出错误。
  但是,如果从器件工作速度不够快或者软件正在处理其他事情,在SPI接口接收到的数据尚未被读取的情况下,又接收到一个新的数据,溢出错误还是会发生的。此时,SPI接口保护前一个数据不被覆盖,舍弃新收到的数据,置溢出标志OVR=1;另外发出中断信号(如果该中断允许),通知从器件及时读取数据。
4 偏移错误(OFST)
  SPI接口一般要求从器件先工作,然后主器件才开始发送数据。有时在主器件往外发送数据的过程中,从器件才开始工作,或者SCK受到外界干扰,从器件未能准确地接收到8个SCK。如图5所示,从器件接收到的8个SCK其实是属于主器件发送相邻的两个数据的SCK主。这时,主器件的SPIF和从器件的SPIF会发生重叠,数据发生了错位,从器件如果不对此进行纠正的话,数据的接收/发送便一直地错下去。

图5偏移错误
 在一个数据的传输过程中,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总线接口的FLASH存储器存储图像数据。FLASH的SPI总线频率高达66M,但MCU的频率较低,晶振频率7.3728M,SPI最大频率为主频1/2。对于32024016的图像读取时间为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会不会出现较大毛刺影响系统稳定性呢?一切的一切待我完成再来解答好了~

所以,关于SPI频率具体设置好多,要分2种情况

  1. MCU作为主设备
    (只发数据,不收数据):f_SCK你可以设置成和SLK主同频;
    (既要收数据,也要发数据):f_SCK <=f_SLK主/2(收数据时候,是以主频对SCK采样)
  2. MCU作为从设备
    可接受的最大f_SCK和作为主设备一样f_SCK<=f_SLK从/2

综上!MCU提供最大master频率是1/2主频,最大slaver频率是1/4主频

针对3288的SPI,其挂在在APB总线下,SPI_CLK为48Mhz。

根据如上标准,提供最大MASTER频率为 SPI_CLK/2 = 24MHZ, 最大SLAVER频率为 SPI_CLK/4= 12MHZ

这个结果似乎和参考手册上有些出入!
A summary of the frequency ratio restrictions between the bit-rate clock (sclk_out / sclk_in)
and the SPI peripheral clock (spi_clk) are described as,
When SPI Controller works as master, the F spi_clk >= 2 × (maximum F sclk_out )
When SPI Controller works as slave, the F spi_clk >= 6 × (maximum F sclk_in )

我理解为,这是SPI作位从设备的时候,可接受的最大SCK(F sclk_in),为SPI_CLK/6=8M,作为主设备,可输出最大SCK( F sck_out),为SPI_CLK/2=24M

【SPI总线常见错误】相关推荐

  1. SPI总线的特点、工作方式及常见错误解答重点是SCK时钟频率时间

    4.1 SPR设定错误 在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确,要在软件中处理). 整个系统的速度受三个因素 ...

  2. 干货总结:SPI总线详细要点

    [导读] 前面总结了UART/I2C的技术要点,SPI相对I2C而言,比较简单.本文来总结一下SPI总线个人认为比较重要的一些技术要点. 什么是SPI? SPI(Serial Peripheral I ...

  3. 【STM32F429开发板用户手册】第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第33章       STM32F429的SPI总线应用之驱动DA ...

  4. 【STM32H7教程】第74章 STM32H7的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第74章       STM32H7的SPI总线应用之驱动DA ...

  5. SPI协议、MCP2515裸机驱动详解----主流SPI总线接口原理

    最近看到一个介绍SPI接口原理的帖子,看完觉得甚好.特来分析给大家一起学习. SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC6 ...

  6. 了解SPI总线CAN控制器 MCP2515配置 一文即可

    1.引言 最近工作中遇到需要6路CAN通信的情况,单片机自带的4路已不满足实际需求,故采用了SPI总线的CAN控制器芯片MCP2515,通过SPI通信的CAN扩展芯片最高可实现1Mbps的遵循CAN ...

  7. stm32 常见错误及原因【持续更新】

    stm32 开发中,经常会出现一些错误,下面总结一些常见错误及可能原因: 1,Default_Handler 出一这个错误 最常见的原因是 开启了中断,但没有对应的中断响应函数 2,HardFault ...

  8. spi四种工作模式时序图_还没学会SPI总线协议?干货都在这里

    SPI总线基本概念 SPI是一种高速.全双工.同步的串行通信总线,全称是Serial Peripheral Interface,使用时在芯片的管脚上只占用三根或者四根线(如果单向传输的话只需三根线就可 ...

  9. SPI总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

最新文章

  1. (译)360全景视频制作专题-介绍
  2. 云上主机SSH秘钥对连接linux注意事项
  3. Android system server之WindowManagerService按键消息传播流程
  4. kaggle机器学习 入门
  5. 最大子序列求和_最大连续子序列和
  6. android ios base64编码,IOS Base64编码/解码
  7. oracle mysql odbc驱动程序_oracle odbc驱动下载
  8. Zipkin jar 下载地址
  9. 英文单词打字练习与学习
  10. D365 窗体的 Lookup写法
  11. MySQL主从同步(一主一从、一主多从、主从从)等结构的概述与配置
  12. 数字化赋能三农 农行、邮储如何保“质”更保“智”?
  13. python的运行方式有哪两种 有何区别_python程序的两种运行方式是什么
  14. 使用tensorflow:LSTM神经网络预测股票(三)
  15. 专题分纲目录 形式逻辑
  16. 相较于传统视频,短视频开发主要有哪些特点
  17. 回文判断 【问题描述】 回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子,判断其是否是回文。 【输入形式】 输入一个最大长度不超过50个字符的句子 【输出形式】 Yes/No
  18. NBA篮球图文直播室之数据排行榜
  19. 条码标签打印机可能遇到哪些问题
  20. linux 查看磁盘使用情况或清空回收站命令

热门文章

  1. Requests模块设置Header的User-Agent
  2. 指定“Vary: Accept-Encoding”标头 --压缩
  3. sonarQube扫描代码生成pdf
  4. TK-StringVar
  5. 读 L. S. Stavrianos 之 《全球通史:从史前到21世纪》
  6. Word2007 无法复制粘贴的原因以及正确加载mathtype
  7. 云米美国上市雷军系持股40% 陈小平:重新定义家的未来
  8. matlab使照片卡通化,怎么样用matlab设计动画直接画出奥运五环
  9. 工业4glte路由器
  10. 网易魔兽怀旧服服务器型号,《魔兽世界》经典怀旧服服务器大盘点