好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

SPI总线常见错误.pdf

4页
  • 卖家[上传人]:笛音
  • 文档编号:15990775
  • 上传时间:2017-09-05
  • 文档格式:PDF
  • 文档大小:225.44KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • SPI 总线常见错误1 SPR设定错误在从器件时钟频率小于主器件时钟频率时, 如果 SCK的速率设得太快, 将导致接收到的数据不正确( SPI 接口本身难以判断收到的数据是否正确,要在软件中处理)整个系统的速度受三个因素影响: 主器件时钟 CLK主、 从器件时钟 CLK从和同步串行时钟 SCK,其中 SCK是对 CLK主的分频, CLK从和 CLK主是异步的要使SCK无差错无遗漏地被从器件所检测到,从器件的时钟 CLK从必须要足够快下面以 SCK设置为 CLK主的 4 分频的波形为例, 分析同步串行时钟、 主时钟和从时钟之间的关系图 1 主从时钟和 SCK的关系如图 1 所示,当 T 从

      只要遗漏了一个 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 接口的时序要求外,还需要在软件上作适当的处理。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.