用FPGA實現UDP通訊

調試基於FPGA的UDP通訊可以說是一波三折,滿眼都是淚。

1,首先根據網上的AN8211開發板原理圖,做自己的開發板;

調試硬件的過程中,由於焊接或者其他的原因,導致晶振不起振;首先懷疑是自己的板子設計問題,仔細比較原理圖,PCB圖,查找數據手冊,管腳信息…………考慮是否是匹配電容問題,查找各種數據手冊,計算匹配電容,更換爲30pF電容,發現還是無法起振。腦袋炸了!

靈光一閃,換塊板子試一下。示波器測試,哈哈,起振了!

2,然後開始調試FPGA驅動程序;

根據網上例程,改寫驅動程序;

怎麼都無法連上電腦,什麼問題???分析代碼,一行一行的比較,查看,沒有問題啊?

然後逼着自己又看了UDP傳輸協議,IP包頭格式,以太網幀格式,UDP包頭格式……,沒有問題;

後來不知道怎麼搞的,把計算機網絡設置中更改了一下,呵呵o(* ̄︶ ̄*)o,網路端的燈閃爍了。高興啊!

3,開始調試FPGA程序,先自己模擬數據發送給計算機端,通過wireshark能抓到FPGA發送的數據包了。這是以爲網絡通訊已經成功了。哎,年輕啊?

4,計算機端編寫Qt程序,接收FPGA通過UDP傳過來的數據包,wireshark可以收到,但是Qt程序接收不到;

懷疑Qt程序問題;通過網絡查找,編寫最簡單的Qt接收UDP包程序,connect(uSocket,SIGNAL(readyRead()),this,SLOT(recvData()));就是無法觸發readyRead()。啊啊啊!!!!!!

通過一週的查找,調試,看FPGA端代碼,看Qt端代碼,計算機防火牆關閉,無果,崩潰,淚奔,無法言語形容……腦袋裏始終在想到底是什麼原因導致的?

一個偶然的機會,看到一篇文章,說windows10系統的防火牆的防護機制,仔細拜讀完,然後試一下,果然通了。

添加編寫的程序進入到“允許的程序和功能”中,纔可以,不然防火牆把數據包攔截了。wireshark默認開啓了網卡的混亂模式,但是計算機沒有開啓,把程序添加進“允許的程序和功能”中就可以了。

 

前後經歷了1個多月,終於把UDP的通訊搞定了,目前可以把我的FPGA板子接收相機傳輸過來的數據,通過UDP上傳給計算機,進行通訊了。可以實現了UDP的發送數據和接收數據。

下面把我自己整理的UDP包格式貼出來,

//---------------------------------------------------------------------------------------------------
// 整體報文:
//                用戶數據:                                              |-----------------------------------|
//                                                                          |        hello word!                      |
//                                                                         |-----------------------------------|
//                UDP 層                                    |--------                                                |
//                                                            |UDP包頭 |           數據段                   |
//                                                            |--------------------------------------------|
//                IP 層                        |-----------                                                            |
//                                            |IP包頭        |                        數據段                                |
//                                            |--------------------------------------------------------|---------|
//                MAC 層    |-----------|                                                                            |             |
//                            |MAC幀頭        |                            數據段                                            |  FCS校驗 |
//                            |--------------------------------------------------------------------|---------|
//
//    注:最後的mac層就是要傳給phy芯片的數據。FCS採用crc32,注意計算的時序,MAC幀頭爲7個0x55和一個0xD5
//
//
// 所以在網絡上發送的數據爲前導碼:7個0x55,和一個0xD5 ;
//        然後發送MAC幀頭:目的MAC地址,源MAC地址,以及上一層使用的協議類型
//        然後發送的是IP層的IP包頭:版本號:4,包頭長度5:標識4*5=20個字節長度;UDP長度
//                                        包序列號,以及片偏移量
//                                        生存時間,協議類型,首部校驗和
//                                        源IP地址
//                                        目的IP地址
//                                        選項:(此處沒有)
//
//     然後是UDP包頭:
//                    源端口號,目的端口號
//                    數據包長度,檢查校驗和
//
//    然後就是實際的數據了;
//
//
//-------------------------------------------------------------------------------------------------------

// 百兆以太網UDP發送;
// 此處使用的時鐘爲25MHZ;
//
 

總結,基本功能實現,下一步開始調試相機到FPGA開發板的傳輸,儘可能提高傳輸的速度和穩定性;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章