CrazyBingo

ARM-FPGA杜邦线之片间传输--高速数据串扰

0
阅读(10227)

有人问起我这问题。。。。我又找不到当年的博客了。。。。只能再发一次。。。。。。。。。。。。。。。。。。。

 

ARM和FPGA之间用批量数据传输,慎用杜邦线啊!!!

 

 

片间传输--高速数据串扰

这几天调试一个东东,STM32的FSMC传输数据给Bingo自制的VGA控制器,由于没有直接打板,板间用了杜邦线连接。FMSC传输模式为最快的速度,FSMC写时序如下图所示,最快达到了72M(HCLK)的速度。但是我用了杜邦线,,没办法。。。神奇的事情不断地发生,幽灵一直在身边,以此分享给大家点滴心得,虽然我也只是知道皮毛。

下图是我项目中STM32与FPGA间,杜邦线连接的图,杜邦线20cm,FSMC 最高HCLK=72MHz。从右到左分别为D0-D15,CS,RS,WR,RD

clip_image002

先贴一下贵人相助时的聊天记录,众人经验总结,精华部分,值得分享:

clip_image003

clip_image004

clip_image005

clip_image006

clip_image007

clip_image008

clip_image009

clip_image010

clip_image011

clip_image012

高速偏见传输,总结如下:

(1)杜邦线不能太长

(2)干扰大了,可以加电容,来避免数据的串扰

(3)供电需要稳定,加退耦电容

(4)电磁干扰

(5)跳变巨大的时候,会有干扰,将数据线与信号线隔离或者分开

(6)异步数据,首先要D触发器锁存

(7)Ffff到0000跳板太大了,干扰太大了

解决方案:

开始相信是STM32代码的问题,我测试代码,以下是我写入的测试代码,1024*768个数据。

void LCD_ColorTest2(void)

{

u16 i,j;

LCD_Write_Address(0,0); //reset ram addr

LCD_WriteData_Begin(); //Begin to Write data

for(i=0; i<768; i++)

{

for(j=0;j<1024;j++)

LCD_WriteData(i*j);

}

LCD_WriteData_End();

}

每次都会在屏幕2/3的时候挂掉,最后发现,2/3屏幕的时候,DATA=512*1024-1=ffff,下一个数据位0000,问题正在这里,因为跳变,干扰太大了,正如聊天记录说的那样,于是我将WR与RS分离连接到功能相同的边上的引脚(幸亏边上IO也预留了FSCM的IO)。这样眼睁睁的分离了信号线与数据线,奇怪的是,这样竟然真的图像传输完整,数据没有缺失了。如下图所示,黄色为更改为之后的WR与RS信号线。

clip_image013

记得以前在实验室画板子的时候,高速的通信,以太网,RFID等,信号线都要用GND来隔离,杜邦线是最可恶的东西。记得当年那个900M的射频板子,那真的是吃过亏的。

哎,分享经验,神马串扰,总结错误,理论太缺乏理论……