9479|19

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

SPI调试FLASH问题(回贴就送分) [复制链接]

我用SPI对MS25L3205D (FLASH)进行操作时发现同样的配置用阻塞的方法可以正确的通信,可是用中断的方法命令发出去后得到的响应却是错的,有没有哪位大侠了解的?

最新回复

时序问题?  详情 回复 发表于 2010-5-26 09:44
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮你顶

可能中断的优先级问题,导致时序跟不上
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
多谢顶帖
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
个人觉得你的问题描述不够详细。

用中断的方法命令发出去后得到的响应却是错的
->怎么个错法?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
接收和发送共用一个中断吗?
问题说详细点
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
我发送FLASH的读ID命令,理论上应该返回C2 20 16 ,实际上却返回了FF C2 16
接收跟发送有各自的中断
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
自己顶一下,回帖就有送分哦
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
老实讲,我还是没看明白楼主你现况,你可以就你如何用中断方式和FLASH通信,详细说说流程,好让大家都理解下你究竟是什么思路。。。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
就配SPI中断-》总线配置-》片选FLASH-》发送FLASH读ID命令-》接收数据
然后数据是错的
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
我觉得,应该先判断问题所在,究竟是SPI发生出问题了,还是接收出问题了?
有示波器吗?可以查看一下,发送正常不?是不是SPI的时钟配置的不对,有些SPI可以配置第一或者第二个时钟才发数,或者接数的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 peasant_lee 的回复:

我觉得,应该先判断问题所在,究竟是SPI发生出问题了,还是接收出问题了?
有示波器吗?可以查看一下,发送正常不?是不是SPI的时钟配置的不对,有些SPI可以配置第一或者第二个时钟才发数,或者接数的。


严重同意9#的说法。
我们很难明白5#搂说的“理论上应该返回C2 20 16 ,实际上却返回了FF C2 16”到底意味着什么。
LZ自己看看芯片的Spec,仔细分析一下吧。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
几种时钟的配置我都试过了,结果还是失败,倒是我把系统时钟频率提升到72M之后,应答的错误码变成FF C2 20 16,也就是说多了一个FF
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
那会不会你的SPI速度过快,FLASH还没反应过来,,,你的SPI就开始接收数据,或者发送数据。。。你可以尽量的将SPI速度调慢,调慢,不影响功能的,而且慢的话,是什么垃圾设备都可以兼容的 ,假如快,很多东西就支持不了了。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

14
 
不行啊,SPI速度调慢后就变成原来的错误应答了,就是这点很头痛
而且因为配置跟阻塞一样,阻塞的方法可以中断就不行了,这种错误一般该怎么解决
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
想结帖了,回帖送散分啦~~~~
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

16
 
哈哈,楼主你的问题搞定了???恭喜啊!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

17
 
图没复制出来,参考网址:http://www.avrtool.com/avr/jz/200905/1572.html

SPI接口工作的时候,没有应答信号,并且数据在发送的时候无需校验位,所以,要求主从器件的软件必须完全符合SPI的时序要求,否则数据传输很容易出现错误。本文通过MCU中SPI接口模块的设计,分析数据传输的各种出错情况,并针对各种情况,增强SPI接口的错误处理能力。

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

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

图1主从时钟和SCK的关系

 如图1所示,当T从
 图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接口可以检测出来,通过对各种错误状态寄存器进行置位,并做相应的处理解决。但是有些错误由硬件本身造成,是检测不到的。因此,在应用中,如果对数据的正确性要求较高,除了要在软件上满足SPI接口的时序要求外,还需要在软件上作适当的处理。

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

18
 
16楼的资料很好啊,谢谢了!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

19
 
建议LZ把代码附上
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

20
 
时序问题?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表