这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 8515,SPI,bug 小心,8515的SPI可能有bug,希望老耿能帮我

共2条 1/1 1 跳转至

8515,SPI,bug 小心,8515的SPI可能有bug,希望老耿能帮我

院士
2006-09-17 18:14:16     打赏
8515,SPI,bug 小心,8515的SPI可能有bug,希望老耿能帮我



关键词: 小心     可能有     希望     老耿     帮我    

院士
2006-12-22 22:43:00     打赏
2楼
问 情况说明比较长:我用一片8515通过SPI带4片其它的AVR单片机,设置应该没问题,主机SPCR=0xDC,从机SPCR=0xCC,其他设置我不列举了,在进行SPI通信时,发现大部分数据是对的,一个循环要传送120个数据,但是误码率很高,每次错误都是最高位由0变1,开始我以为是设置问题,经排除不是,又以为是布线问题,经查SPI的4根线周围无任何其它线,应该排除干扰问题,后经用逻辑分析仪观察,发现数据线与clk线时序有问题,根据我们的设置,正常的数据电平变化应该是在clk的下降沿,在clk的上升沿传送数据,大部分的数据都遵循此时序,但竟然有些数据传送的最高位为0时(无数据传送时,数据线始终为高),按理在第一个clk的下降沿数据线就应该由高变低,但是经观察却是在下降沿来以后很长时间才变低,如果在clk上升沿来之前变化传送到还正确,关键是有些竟然在上升沿的时候才变化,这时候鬼知道传送的是0还是1呢?各位高手有没有发现这个问题。难道我的设置和布线有问题? 1: 补充说明只有在数据的最高位才发现这种异常情况,数据的其它位传送时未发现此情况。这里不能贴图,我示意一下:假设发送的数据为0x66,正常波形为(两个__代表1个位):

data: ̄ ̄ ̄|_ _| ̄  ̄  ̄  ̄|_ _  _ _ ̄ ̄  ̄ ̄  _ _ ̄
clk : ̄ ̄ ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄
实际观察到的是:注意第一个clk的下降沿时的数据线
data:  ̄ ̄ ̄ ̄|_| ̄  ̄  ̄  ̄|_ _  _ _ ̄ ̄  ̄ ̄  _ _
clk : ̄ ̄ ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄
2: 先把数据线上的所有负载断开再测试 3: 数据线上没有什么负载啊,就是一对一连的 4: 我没有仪器测,但好像AVRSPI可能确实有问题,因为我仔细地看过了DataSheet和其典型应用,一步步按其说的来的,但结果还是不行,看了顶楼的分析,说不定就是SPI本身的问题。 5: 提供几个建议:1、把与主机的MOSI所有的连接都去掉,再测试。
2、主机的SS是如何处理的?一般都接高电平或作为输出。
3、MOSI的方向在何处设置,应该在程序初始化时设置。
4、把SPI时钟频率降低,换成fcl/128试试。
5、如有可能将有关的程序贴出来。 6: 对,我用的8515 7: 对,我用的8515SPI好像也有问题!我用8515SPI来和A/D和at45db021a来进行数据处理。我接受A/D数据的时候,一切正常。但是我再用来往at45中发命令时,只有时钟信号,没有数据。我用记忆示波器看的。\SS接为输出。此时A/D的片选已经拉高。据我所知,还有两个朋友的SPI也遇到了类似的问题。我们在网上交流过。假如不是仿真器的毛病,那楼主的话就可信了。我昨天在这里贴的帖子难道被人给删了?
8: 我贴过程序,但是没有人理。。。 9: 遇到问题首先要怀疑自己!我的原则:遇到问题首先要怀疑自己,其次还是还是怀疑自己,然后还是要怀疑自己……
“按理在第一个clk的下降沿数据线就应该由高变低,但是经观察却是在下降沿来以后很长时间才变低,如果在clk上升沿来之前变化传送到还正确,关键是有些竟然在上升沿的时候才变化,这时候鬼知道传送的是0还是1呢?”
看到你的这段描述,是不是可以这样认为,数据的最高位发生变化的时刻是随机的,有时候在CLK上升沿的左边,有时候在右边。因此造成数据的不正确。因为单片机内部发送SPI数据是一个移位寄存器结构,原则上不会出现以上问题,是不是因为负载的问题。因此最好把负载去掉,如果还有问题。那么在SPI做主的时候,MOSI是可以定义的,是不是在程序别的地方修改过该引脚的方向?至于说是单片机的BUG,我认为可能性非常之小!
woodvase的程序也可以再次贴一下,因为有时候大家可能会忙一些,所以对于程序,可能来不及看。或者有的没有试验环境等。不过相信问题最终都会解决的!
10: Z斑竹说得对 11: 谢谢版主我再试试,我也认为这种大公司的单片机一般不会出现如此bug,我还准备将芯片换成工业级的试试,我纳闷的是,如果是负载问题,但我上面没有什么负载啊,只是带了4片从机,几根线是一对一连的,再说如果是负载原因,波形一般不会是那样的,现在错误的波形跟正常的是一样的,只是数据最高位而且只是为0时到来延迟了一段时间,波形也是变化很陡的,为何其它位就没有问题呢,MOSI我也只是在初始化部分定义了,其它地方没任何更改,如果那样,数据线其它位也应该出现问题。1主带4从应该没问题把,我准备单独试试两片之间的通信。有什么问题,再来请教版主。 12: 我的程序已经面目全非了,还是不行。 13: 斑竹,我的程序在有关at45db021a中贴出 14: 我用8515从来没有碰到过,不管是AD,DA或是多机通讯。再试试 15: 还有一个现象啊!我在用SPI的0 mode时,数据不对,需要左移一位才是,但是我换到3 mode,数据就对了,这算不算bug呢?不算的话,这是什么问题呢?我想不清楚

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]