huangxiaolpbany 发表于 2014-4-23 20:31:57

求助:MEGA16的SPI总线不稳定

使用SPI总线读取AD芯片TLC2543的数值,有时可以工作,有时不能工作。
另外一块不同的板子使用SPI很稳定,当然线的距离也比较短。
有问题的板子有两个SPI器件,走线也比较长,怕干扰把另外一个SPI器件拿下来了。

尝试降低SPI的频率也没有改善。
请教如何处理

huangxiaolpbany 发表于 2014-4-23 21:31:49

从逻辑分析仪来看,MEGA16的SPI总线数据没有发出来。脉冲和数据都没有

huangxiaolpbany 发表于 2014-4-23 21:38:38

有JTGA刚写进去程序可能是好的,断电再上电就不行了

huangxiaolpbany 发表于 2014-4-23 22:11:07

没人帮我

huangxiaolpbany 发表于 2014-4-23 22:46:34

可能找到问题了,初始化SPI时SPSR应设为0X00,否则会出问题。

Free_Bird 发表于 2014-4-23 23:32:26

再有就是SS脚一定要设为输出,不然也会不稳定;

huangxiaolpbany 发表于 2014-4-24 08:52:21

楼上说的很对,因为SS设置为输入同样会造成SPI中断

一心2013 发表于 2014-4-24 09:14:49

印象中记得数据手册上SS如果设置为输入

当有低电平(好像是低电平,太久忘了)输入,SPI会自动从主机模式降为从机模式,

而SPI的从机机制就会使你的SPI是中断现象,其实是变为了从机。

一心2013 发表于 2014-4-24 09:16:01

刚查了下,给楼主看下

当SPI 配置为主机时(MSTR 的SPCR 置位),用户可以决定SS 引脚的方向。
若SS 配置为输出,则此引脚可以用作普通的I/O 口而不影响SPI 系统。典型应用是用来
驱动从机的SS 引脚。
如果SS 配置为输入,必须保持为高以保证SPI 的正常工作。若系统配置为主机, SS 为
输入,但被外设拉低,则SPI 系统会将此低电平解释为有一个外部主机将自己选择为从
机。为了防止总线冲突, SPI 系统将实现如下动作:
1. 清零SPCR 的MSTR 位,使SPI 成为从机,从而MOSI 和SCK 变为输入。
2. SPSR 的SPIF 置位。若SPI 中断和全局中断开放,则中断服务程序将得到执行。
因此,使用中断方式处理SPI 主机的数据传输,并且存在SS 被拉低的可能性时,中断服
务程序应该检查MSTR 是否为"1”。若被清零,用户必须将其置位,以重新使能SPI 主机
模式。

huangxiaolpbany 发表于 2014-4-24 14:05:22

谢谢楼上的。给后来人提个醒,初始化SPI的时候,要把SPSR也清零,否则也有可能出错。
再次谢谢楼上的朋友。
页: [1]
查看完整版本: 求助:MEGA16的SPI总线不稳定