1. 程式人生 > >關於GD32F107的eth、mac、phy的問題

關於GD32F107的eth、mac、phy的問題

  由於專案需要,由STM32F107更換到了GD32F107,傳說中,完全PIN2PIN,程式碼基本不用改,這也是吸引人的地方。於是。。。。。

但是移植到ETH的時候,發現跑不通,資料只進不出,後面發現是DMA傳送不了資料。可是,為什麼DMA會發送不了?於是,就不是簡單的移植了,只能從最基本的下手了,資料怎麼進來?資料怎麼處理?資料怎麼出去?然後利用Wireshark抓包工具來,用STM32F107的舊板,抓取了上電之後,Lwip首先需要發出的資料是一個ARP請求包。GD32F107這個包怎麼都發不出去,後來無意在百度的時候看到一段配置程式碼,COPY下來放到我的程式碼裡,一執行,竟然發出去了,然後細細對比一番,原來是GD32F107不能採用自動協商模式。選定了100M模式後,一切正常,真是折騰死人,三天,整整折騰了三天。GD的工程師如果看到這文章,希望能給出解決辦法,或者如果讀者在自動協商下能正常執行的,歡迎指教指教。下面,我貼出配置程式碼。

/*------------------------   MAC   -----------------------------------*/
//ETH_InitStruct.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable  ;
ETH_InitStruct.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
ETH_InitStruct.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStruct.ETH_Speed = ETH_Speed_100M;
ETH_InitStruct.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
ETH_InitStruct.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
ETH_InitStruct.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
ETH_InitStruct.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
ETH_InitStruct.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
ETH_InitStruct.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStruct.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
ETH_InitStruct.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
#ifdef CHECKSUM_GEN_ICMP
ETH_InitStruct.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
#endif


/*------------------------   DMA   -----------------------------------*/  
  
/* When we use the Checksum offload feature, we need to enable the Store and Forward mode: 
the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum, 
if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
ETH_InitStruct.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; 
ETH_InitStruct.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;         
ETH_InitStruct.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;     


ETH_InitStruct.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;       
ETH_InitStruct.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;   
ETH_InitStruct.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;                                                          
ETH_InitStruct.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;      
ETH_InitStruct.ETH_FixedBurst = ETH_FixedBurst_Enable;                
ETH_InitStruct.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;          
ETH_InitStruct.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;                                                                 
ETH_InitStruct.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;

相關推薦

關於GD32F107的ethmacphy的問題

  由於專案需要,由STM32F107更換到了GD32F107,傳說中,完全PIN2PIN,程式碼基本不用改,這也是吸引人的地方。於是。。。。。 但是移植到ETH的時候,發現跑不通,資料只進不出,後面發現是DMA傳送不了資料。可是,為什麼DMA會發送不了?於是,就不是簡單的

SELinuxSEAndroidMACAndorid(AOSP) seplicy 相關資料

config ear font note arch tor ini arc https ?SELinux ?SEAndroid ?SEAndroid1 ?SEAndroid2 ?SELinux Test Suite - setup to run on Fedora or

MinerGate挖礦WindowsMacUbuntuAndroid設定簡單

MinerGate挖礦微軟s、Mac、Ubuntu、Android設定簡單 簡介 自從波蘭I7獨服口試以後,挖羅門幣可謂水深酷熱,這裡給他家紹介MinerGate這個礦池的挖礦方式。提議門羅幣       1、註冊賬號 註冊地址:點這裡 官網:點這裡  

網路基礎概念(IPMAC閘道器子網掩碼)

目錄 IP地址 MAC地址 閘道器 子網掩碼 反子網掩碼 子網掩碼 子網劃分一: 子網劃分二: 子網匯聚 廣播域 衝突域 CSMA/CD IP地址 ip地址是用於標識網路中每臺裝置的標識。目前 IPV4 ,用32位表示。IPV6,用1

Java開發利器:eclipse Java EE LinuxMacWin下載安裝配置美化註釋模板等

點選紅框中的按鈕,接受許可協議,下載對應版本,Linux注意壓縮包字尾 程式開發使用8u191類似奇數為BUG修正並全部通過檢驗的版本,官方強烈推薦使用 偶數版本類似8u192包含了奇數版本所有的內容,以及未被驗證的BUG修復。Oracle官方表示:除非你深受BUG困

Linux下獲取IPMAC掩碼的shell指令碼

Mask:ifconfig |grep inet| sed -n '1p'|awk '{print $4}'|awk -F ':' '{print $2}'IP:ifconfig |grep inet| sed -n '1p'|awk '{print $2}'|awk

解決CentOS克隆虛擬機器無法上網問題(UUIDMACIP)

CentOS虛擬機器克隆後,由於網絡卡資訊不一致,導致不能上網或者執行“sercice network restart”命令失敗 1.檢視網絡卡資訊  ifconfig 只有lookback口,所以不能上網。 2.進入網絡卡配置檔案目錄 cd /etc/sy

關於ARPMACIP欺騙以及TCP劫持

三個多月沒更新部落格,期間也有在學習和總結一些東西,只是或多或少都涉及到公司相關的資訊(業務,JVM,WebServer)所以不便寫出來,有時候寫到一半發現又不太合適然後刪除,很鬱悶。之前一直比較關注web安全層面,如SQL注入、XSS、CSRF等等 ,然後HTTP協議

MACMIIPHY的關係與區別

嗯,實驗室的嵌入式專案需要寫裝置驅動,我分到了網路驅動的活,寫一個適配SylixOS的(這裡誇一句,這個真是國內相當不錯的嵌入式實時作業系統了)MPC8377的網絡卡驅動,說實話原來從來沒接觸過寫驅動的事情,更別說複雜的網絡卡驅動了。所以準備先看看人家寫的東西,明確一下概念

winmac 設置 php上傳文件大小限制

保存 上傳 根據 -- pla 功能 spa limit 最大的 修改php.ini win平臺WAMP修改 步驟 左鍵點擊wamp 選擇php 在彈出的窗口中選擇php.ini 在打開的文件中進行修改(修改步驟如下) 修改完畢,保存並重啟wamp mac

Charles Proxy v4.1.3 MacWin64Win32破解版

app lib 下載 裏的 windows java https contents tar 1. 下載Charles Proxy 4.1.3版本,百度雲盤下載 或 去官網下載 2. 安裝後先打開Charles一次(Windows版可以忽略此步驟) 3. 在這個網站(http

DOSMac 和 Unix 文件格式+ UltraEdit使用

選項 就會 ultra app hex vip view .html unix環境 一、文本格式區別 用UltraEdit打開unix文本文件時總會提示:是否將文件轉換為dos格式。在windows編輯配置文件,然後用ftp上傳到linux主機,發現運行時讀取配置文件有錯

MAC地址(單播廣播組播數據收發)

制造商 局域網 對比 地址 方式 傳輸 eid type 但是 MAC地址 網絡設備的MAC地址是全球唯一的。MAC地址長度為48比特,通常用十六進制表示。MAC地址包含兩部分:前24比特是組織唯一標識符(OUI,OrganizationallyUniqueIdent

Mac OSX系統LinuxWindows命令行教程

命令行Mac OSX系統、Linux、Windows命令行教程Mac OSX系統、Linux、Windows命令行教程一、各系統終端的使用方法二、各系統命令的功能用你的終端做一些事情 (command line, Terminal, PowerShell).一、各系統終端的使用方法Mac OSX在Mac OS

正則表達式 - IP地址Mac地址端口經緯度車牌號碼校驗

size ip地址 端口 font ont round strong [0 -a IP地址驗證: /^(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(\d|[1-9]\d|1\d{2

mac系統下安裝啟動停止mongodb

src lin onf lis with nod 其他 文字 ans 一. 下載nodejs,安裝,一直到 node -v顯示版本號,表示安裝成功。 二. 本文主要講解,安裝包方式安裝 mongodb,至於其他方式不做介紹。 下載Mongodb後,將Mongodb-3.2.

C#/VB.NET 獲取電腦屬性(硬盤ID硬盤容量Cpu序列號MAC地址系統類型)

mic class network pcm .cn bbb alt OS -h 原文:C#/VB.NET 獲取電腦屬性(硬盤ID、硬盤容量、Cpu序列號、MAC地址、系統類型)在開發過程中,經常需要獲取電腦的一些屬性,如獲取硬盤ID/CPU序列號/MAC地址作為來加密字符串

java獲取本機名稱IPMAC地址和網卡名稱

sans mon any flex exc consola 獲取本地ip network log java獲取本機名稱、IP、MAC地址和網卡名稱摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 20

UI設計師需要熟記的45個快捷鍵WindowsMac

aaa 建築 ado 而且 nbsp 所有 uci 色相 gin 大家都知道PS快捷鍵很多,其實沒必要都記住,今天為大家整理了45個比較實用的,別忘了收藏。 圖層 填充圖層 MAC: Alt+Backspace (前景) or Cmd+Backspace

JS獲取客戶端IP地址MAC和主機名的7個方法彙總

這篇文章主要介紹了JS獲取客戶端IP地址、MAC和主機名的7個方法彙總,JS本身是不支援獲取IP地址等資訊的,本文通過其它方法實現,需要的朋友可以參考下 今天在搞JS(javascript)獲取客戶端IP的小程式,上網搜了下,好多在現在的系統和瀏覽器中的都無效,很無奈,在C