Frank

板间SPI通讯,想说爱你不容易

0
阅读(11722)

一、板间SPI通讯,想说爱你不容易

问题是针对导航系统中控制计算机板与导航计算机板的板间SPI通讯的问题,尽管经过了两天的痛苦折磨,但是最终还是把问题解决了,写一个调试文档记录一下这苦逼的两天,斌哥说,不总结的人生等于白活,学会总结,trytrytry

系统描述:控制计算机板主要是DSP28335,在板间SPI通讯过程中作为从机,导航计算机板主要是DSP6747,在板间SPI通讯过程中为主机。SPI信号从DSP6747SPI主机)出来经过1642463.3V转换为5V),经过30cm左右的杜邦线与控制计算机板的接口相连,经过1642465V转换为3.3V)进入DSP28335SPI从机),首先测试主机向从机发送数据。

问题描述1:主机发送没有问题,时钟信号、数据信号均没有问题,但是经过两个电压变换信号后,数据信号变得不干净,有毛刺,而且高电平达到了3.3VDSP28335完全接受不到信号。

分析阶段1:用示波器测试主机出来信号,依然有,没有问题,但是经过电压变换,信号OK,经过杜邦线,OK,经过另一电压变换芯片,数据信号没有,但是时钟信号有,将两个通道换一下,结果数据信号有了,问题已浮出水面,进入从机的电压变换芯片通道坏掉了,话没多说果断换掉。

问题描述2:将芯片换掉后,信号、时钟一切OK,从机收到了数据,但是完全不对,主机发送的是固定值,上位机收到的数据是各种变化。

分析阶段2:收到了数据,但是数据不对,用示波器测量,信号都没有问题,但是数据仍然有杂波,不管丫的毛刺了,首先定位为软件问题,将主机、从机的模式检查了一遍:

主机: 配置为主模式;每次收、发数据位数为16bit;首先发送数据的高位;波特率26.6M;时钟极性CLOCK POLARITY =0,时钟相位CLOCK PHASE = 0,即数据在SPICLK上升沿发送数据,在SPICLK下降沿锁存输入数据。

从机: 配置为从模式;每次收、发数据位数为16bit;首先收到数据的高位,因此为右对齐;时钟极性CLOCK POLARITY =0,时钟相位CLOCK PHASE = 0,即数据在SPICLK上升沿发送数据,在SPICLK下降沿锁存输入数据;时钟由主机产生。

检查了一遍,首先将时钟极性配置为一致,继续测试,主机是定时器发送的,从机通过查询标志位进行读取,此时定时器仍然是错误的,但是收到的数据错误的比较有规律,发生了错位,后来上网上查询,说需要清除接收标志位,网址如下

http://blog.sina.com.cn/s/blog_56e19aa70101a33q.html

Datasheet上明确写着清除接收标志位的方法,

1)、复位SPI

2)、读取接收寄存器中的数据

初始化的时候已经复位将标志位清除,并且每次读取接收数据寄存器,按照datasheet上的说明肯定没有问题,但是问题就出在这,每次读取完寄存器中的值,然后软件将SPI复位,然后退出复位,上电,测试,结果,结果,结果尼玛大部分数据对了,还是有一些数据是错的,必须声明一下,现在发送的数据是0x0102,有将近1/3是错的,而且依然是错位,到现在,我不解,不解,还是不解,明明datasheet说的读取接收寄存器中的数据也能清楚标志位,为毛只有复位才行,难道尼玛TI公司顾得清洁工写的datasheet,而且还是有错位的数据,拿示波器一测,依然有毛刺,而且幅值依然较高。

山重水复疑无路,柳暗花明又一村,没想到,没想到,没想到的是当我们把发送的数据改为0xABCD,结果数据没有一个错误的,数据齐刷刷的摆在眼前,没有一个错误的,测试7FFF,没错,测试0x0203,依然有错;用双通道示波器测试从机电压变换前后的数据,奇迹出现了,哥告诉你,奇迹出现了,数据的毛刺杂波没有了,而且齐刷刷的数据,就连0x0102,0x0203都没有任何错误,到现在为止,问题再一次浮出水面,发送程序、接收程序肯定没有问题,不然发送0xABCD时不会成功,问题就出在毛刺这,0xABCD7FFF数据之所以正确,就是因为这两个数据有一共同点,就是基本都为高电平,0x0102,0x0203信号之所以正确,就是因为信号基本为低电平,低电平容易受到扰动,信号在主机出来时没有毛刺,但是经过了杜邦线,数据出现了毛刺,突然想起了特权同学的EPCS芯片的信号完整性、以及斌哥总结杜邦线出现的问题,综合考虑,是出现了信号完整性问题,尼玛,听说过,没见过,信号完整性n年前就听说过了,但是只闻其声不见其人,今天终于见到了真面目,既高兴又感到幸运,高兴的是第一次遇到信号完整性问题,幸运的是我看过了斌哥和特权同学的经验,很快的锁定了问题,并有了解决方法,特权同学原文这样说道:

示波器探头客串了“终端匹配者”的角色,示波器通常由一定的寄生电容,相当于在被测试端并联了一个10pF左右的电容。

手头没有10pF,在数据线与地之间并联了一100pF的电容,上电,测试,激动人心的时刻到了,困扰了一天半的问题马上得到解决,运行程序,OKOK了,一切OK,数据的波形不在有毛刺,从机的数据接收全部正确。

总结一下经验:

1、保证主机、从机的时钟极性一致。

2、从机接收数据软件复位才靠谱,接收完一次复位一下,这才是王道啊。

3、杜邦线,请慎用,尤其是在高速电路上。

二、电容滤毛刺原理

电容、顾名思义,是电的容器。

以直流电源滤波为例:在直流电源滤波电路中,电容的两个极并接在需要滤波的电路上,当电源电压向上波动而高于电容两端电压时,就会对电容充电(或叫电容吸收电流),使向上的电压不再升高或升高缓慢;当电源电压向下波动而低于电容两端电压时,电容就会对电路放电使电路电压不再向下波动或波动减慢。 这一充一放就铲平高的填平低的,使电源输出平滑的直流电。

无论高频低频的滤波原理都一样,只是用的电容量容量不同而已。滤高频,用小电容,因为电容越小,充放(充满和放完)电时间就越短,对变化极慢的低频来说根本就不起作用。 滤低频,用大电容,因为电容越大,充放(充满和放完)电时间就越长,对变化极快的高频信号来不及反应

Baidu
map