ARM-FPGA杜邦線之片間傳輸--高速數(shù)據(jù)串擾
片間傳輸--高速數(shù)據(jù)串擾
這幾天調(diào)試一個東東,STM32的FSMC傳輸數(shù)據(jù)給Bingo自制的VGA控制器,由于沒有直接打板,板間用了杜邦線連接。FMSC傳輸模式為最快的速度,F(xiàn)SMC寫時序如下圖所示,最快達到了72M(HCLK)的速度。但是我用了杜邦線,,沒辦法。。。神奇的事情不斷地發(fā)生,幽靈一直在身邊,以此分享給大家點滴心得,雖然我也只是知道皮毛。
下圖是我項目中STM32與FPGA間,杜邦線連接的圖,杜邦線20cm,F(xiàn)SMC 最高HCLK=72MHz。從右到左分別為D0-D15,CS,RS,WR,RD
先貼一下貴人相助時的聊天記錄,眾人經(jīng)驗總結(jié),精華部分,值得分享:
高速偏見傳輸,總結(jié)如下:
(1)杜邦線不能太長
(2)干擾大了,可以加電容,來避免數(shù)據(jù)的串擾
(3)供電需要穩(wěn)定,加退耦電容
(4)電磁干擾
(5)跳變巨大的時候,會有干擾,將數(shù)據(jù)線與信號線隔離或者分開
(6)異步數(shù)據(jù),首先要D觸發(fā)器鎖存
(7)Ffff到0000跳板太大了,干擾太大了
解決方案:
開始相信是STM32代碼的問題,我測試代碼,以下是我寫入的測試代碼,1024*768個數(shù)據(jù)。
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的時候掛掉,最后發(fā)現(xiàn),2/3屏幕的時候,DATA=512*1024-1=ffff,下一個數(shù)據(jù)位0000,問題正在這里,因為跳變,干擾太大了,正如聊天記錄說的那樣,于是我將WR與RS分離連接到功能相同的邊上的引腳(幸虧邊上IO也預(yù)留了FSCM的IO)。這樣眼睜睜的分離了信號線與數(shù)據(jù)線,奇怪的是,這樣竟然真的圖像傳輸完整,數(shù)據(jù)沒有缺失了。如下圖所示,黃色為更改為之后的WR與RS信號線。
記得以前在實驗室畫板子的時候,高速的通信,以太網(wǎng),RFID等,信號線都要用GND來隔離,杜邦線是最可惡的東西。記得當年那個900M的射頻板子,那真的是吃過虧的。