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

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










高速偏见传输,总结如下:
(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信号线。

记得以前在实验室画板子的时候,高速的通信,以太网,RFID等,信号线都要用GND来隔离,杜邦线是最可恶的东西。记得当年那个900M的射频板子,那真的是吃过亏的。
哎,分享经验,神马串扰,总结错误,理论太缺乏理论……