1. 程式人生 > >STM32F407和LAN8720除錯記錄(1)

STM32F407和LAN8720除錯記錄(1)

LAN8720測試程式碼的整理

1. 在兩個工程的基礎上修改,分別是正點原子ATK的 “實驗55 網路通訊實驗” 和ST官方的“STSW-STM32070”例程

硬體是原子的explorer和SeerF4kernelV2。

兩個例程的問題在於ATK例程用的外部SRAM,註釋掉外部SRAM後跑不起來。而ST官方例程用的晶片是DP83848,需要手動修改為LAN8720A。

針對ST的例程,網上有對應的文件:STstsw-stm32070的網路例子——將DP83848CVV 修改為 LAN8720A

目前按照這個文件對ST例程進行修改。

2.繼續在ATK的板子上嘗試,關鍵點在於ATK的例程裡自己做了記憶體管理。所以要放棄SRAM的使用的話,先要把記憶體管理去掉,把外部FSMC關掉。

在lwip的mem.c和memp.c中,按照lwip自己的方式,申請了ram_heap和memp_memory。而ATK的例程裡註釋掉了這兩個地方,在lwip_comm.c中,從自己的記憶體池申請了記憶體分配給這兩個單元。因此首先把這兩個地方復原。

3.另一個自行管理的記憶體塊在LAN8720.c中的ETH模組DMA緩衝區。

__align(4) ETH_DMADESCTypeDef *DMARxDscrTab;	//乙太網DMA接收描述符資料結構體指標
__align(4) ETH_DMADESCTypeDef *DMATxDscrTab;	//乙太網DMA傳送描述符資料結構體指標 
__align(4) uint8_t *Rx_Buff; 			//乙太網底層驅動接收buffers指標 
__align(4) uint8_t *Tx_Buff; 			//乙太網底層驅動傳送buffers指標

把這塊內容改成:
__align(4) ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB];	//乙太網DMA接收描述符資料結構體指標
__align(4) ETH_DMADESCTypeDef DMATxDscrTab[ETH_TXBUFNB];	//乙太網DMA傳送描述符資料結構體指標 
__align(4) uint8_t Rx_Buff[ETH_RX_BUF_SIZE*ETH_RXBUFNB]; 	//乙太網底層驅動接收buffers指標 
__align(4) uint8_t Tx_Buff[ETH_TX_BUF_SIZE*ETH_TXBUFNB]; 	//乙太網底層驅動傳送buffers指標
同樣的,LAN8720.h標頭檔案中也要進行還原。

4. 完成了上面的操作後,可以把lwip_comm.c中所有的xxx_malloc()和xxx_free()等函式註釋成空函式。

測試程式,仍然能夠ping通網絡卡。至此已經還原Lwip中所有記憶體管理部分。

5. 在main.c中,將FSMC_SRAM_Init()註釋掉,發現ping不通網絡卡了。

重新把函式放出來。

進入FSMC_SRAM_Init(),註釋掉最後的

//  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置
//  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  // 使能BANK1區域3	
發現仍然能夠ping通,說明問題在上邊。

仔細看發現上面有:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG時鐘

即一些IO時鐘的初始化在FSMC_SRAM_Init()中做了,其他元件在進行操作的時候可能沒有再重新初始化。

把這句單獨拉出來放到main.c中,然後註釋掉FSMC_SRAM_Init(),能夠成功執行。

可以看到,函式之間的耦合會給後期除錯帶來麻煩。

至此,一個獨立的LAN8720的測試程式碼已經整理出來。

====2018/3/2 更新=====

經查詢,在LAN8720.c, LAN8720_Init()函式中,初始化APB1時鐘時,只初始化了GPIOA, GPIOC, GPIOG。

而LAN8720的復位引腳為PD3,沒有被初始化。因此加入GPIOD的時鐘初始化即可。



F4Kernel的除錯

F4Kernel是專案用到的核心板,放棄w5500改用LAN8720。需要對初版PCB進行驗證。1. F4Kernel的原理圖引腳連線與ATK的開發板相同。燒入程式碼後,遇到的第一個問題是初始化ETH時,程式碼卡在了:
u8 ETH_MACDMA_Config(void)
函式中的:
	ETH_DeInit();  				//AHB匯流排重啟乙太網
	ETH_SoftwareReset();  			//軟體重啟網路
	while (ETH_GetSoftwareResetStatus() == SET);//等待軟體重啟網路完成
程式一直卡在while迴圈中。而ATK的板子不會有這個問題。初步懷疑是F407晶片和LAN8720A的引腳連線的問題。因此在例程的IO初始化的程式碼裡
u8 LAN8720_Init(void)
中,講IO初始化的程式碼註釋掉一部分:
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  
	GPIO_Init(GPIOA, &GPIO_InitStructure);
在ATK的板子上模擬連線故障的情況。將程式碼刷入ATK的板子,程式也卡在了while迴圈處。因此可以判斷是同樣的問題。2. 到網上查,卡在reset語句這裡,更多的可能是時鐘或者晶振不對。PHY有個REF CLK,還有個晶振,用示波器測量,果然都沒有波形。仔細觀察可以看到晶振背面並聯的1M電阻被焊成了一個電容。看了下兩個板子都被焊成了電容。被焊接的惠工坑了,趕緊改過來再試試。改過來發現沒有卵用。然後發現晶振的兩個起振電容有點大,不像22pF的。和原理圖對照一下,突然發現原理圖上有個大BUG:
畫原理圖的孟工把晶振的兩個電容標成了104的,然後焊接的惠工也照著焊了。更坑爹的是電容下面還沒有接地。
我去年買了個表啊!!!!!!趕緊把電容換成22pF的,然後飛線接地。上示波器量,晶振波形還是沒出來,但是REFCLK波形已經出來了。然後刷程式碼debug,程式碼不再卡在RESET那個while函數了。而是走到了stm32f4x7_eth.c裡面,2200行:
  do
  {
    timeout++;
    tmpreg = ETH->MACMIIAR;
  } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));

把ATK的板子網線拔掉,debug進行對比,也是走到這一步。即初始化時不插網線的話,就會卡在這裡。說明現象是一致的。3. 把核心板插到白盒子的底板上,插上網線,ping 192.168.192.30, ping通了~ 除錯完成!

相關推薦

STM32F407LAN8720除錯記錄(1)

LAN8720測試程式碼的整理1. 在兩個工程的基礎上修改,分別是正點原子ATK的 “實驗55 網路通訊實驗” 和ST官方的“STSW-STM32070”例程硬體是原子的explorer和SeerF4kernelV2。兩個例程的問題在於ATK例程用的外部SRAM,註釋掉外部S

學習 Microsoft SQL ServerC#技術記錄1:連接數據庫

構造 reat 數據庫 alt 1.0 字符串 src mic 描述 工具:Microsoft SQL Server 2008R2    Microsoft visual studio 2008 學習筆記:連接數據庫 (1) 建立數據庫 USE master; IF DB_

【makefile學習記錄1】認識makemakefile

1、什麼是make?為什麼需要make? make本質是一個應用程式。 用來解析源程式之間的依賴關係        很多原始碼程式的檔案是非常多的,而且那些檔案之間大多是有依賴關係的,make就是可以解析這些依賴的

使用Nios II 10.0sp1 Command Shell [gcc3]合併sofelf檔案——除錯記錄

開發環境: 電腦win7_64;Quartus II 10.0;Nios II 10.0;FPGA:EP4CE10。 1.Nios軟體存在的bug及解決思路: Nios II Flash Programmer 下載後無法從EPCS自舉,具體現象如下: Usin

gdb除錯1):單步執行跟蹤函式呼叫

轉發自:http://songjinshan.com/akabook/zh/gdb.html#id1看下面的程式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18#include <stdio.h> in

菜鳥一起學android4.0.3原始碼之touchscreen配置+除錯記錄

        記得應該是上上週了,終於畢業了,離開了學校,就得面對現實的社會,以前學校實驗室裡,老師給了鑰匙,那電腦隨便用,那元器件隨便玩,什麼51微控制器啊,PIC微控制器啊,FPGA啊,arm11啊什麼的。想著做什麼就直接萬用版+電烙鐵什麼的一起搞定。除錯,寫程式,焊

Android USB Camera(1) : 除錯記錄

1. 前言 前段時間除錯了一個uvc攝像頭,這裡做下記錄。硬體平臺為mt6735,軟體平臺為android 5.0 2. 底層配置 UVC全稱是usb video class,一種usb視訊規範。所有遵循uvc協議的攝像頭都不需要安裝額外的驅動

關於ThinkPHP5.1+的Log無法記錄SQL除錯記錄的小經歷

    專案開發階段,除了基本編碼外,效能也需要實時關注與優化。之前我的大部分專案都是使用ThinkPHP5.

web惡意請求探測掃描記錄

黑客 惡意請求 惡意掃描 探測101.201.208.37 EBENEBFACACACACACACACACACACACACA\x00 "-"

轉載----編寫高質量代碼:改善Java程序的151個建議(第1章:JAVA開發中通用的方法準則___建議1~5)

ase 重載方法 name 原理 .get tin stat eas 容易 閱讀目錄 建議1:不要在常量和變量中出現易混淆的字母 建議2:莫讓常量蛻變成變量    建議3:三元操作符的類型務必一致   建議4:避免帶有變長參數的方法重載 建議5:別讓null值和空值威

4. 數組排序算法1

bottom ora ul li text tom file 數據 menu hit 1. 數組的定義 一組相關變量的集合 一個數組實際上就是一連串的變量 數組中的變量必須是相同的數據類型 數組可以分為一維數組、二維數組和多維數組 例如:numbers[100]來代替直接聲

《UNIX環境高級編程》讀書筆記之系統數據文件信息(1

返回 -m 獲取 高級編程 記得 clas oid data- size 1.UNIX系統口令文件包括了下圖所看到的的各字段,這些字段包括在<pwd.h>中定義的passwd結構體中 POSIX定義了兩個獲取口令文件項的函數。在給出用戶登錄名或用戶ID後

Centos7.3 Docker安裝部署學習記錄1

docker一、Docker基礎環境的安裝1. 環境說明本機采用操作系統如下: CentOS-7.3-X86-64,內核3.10 x64位,docker 1.12.x版本。 建議采用CentOS7版本或ubuntu版本,本文采用CentOS7即CentOS-7-x86_64-DVD-1611.iso版本最

第6章 靜態路由動態路由(1)_靜態路由

align 將在 跟蹤 添加 測試 字母 ppp協議 必須 缺少 1. 路由——網絡層實現的功能 1.1 路由功能 (1)網絡層的功能:給傳輸層協議提供簡單靈活的、無連接的、盡最大努力交付的數據包服務。 (2)路由器為每一個數據包單獨地選擇轉發路徑,網絡層並不提供服務質量的

算法筆記--關於求前綴前的O(1)詢問更新

初始 ems target blank -- 所有 href lan 復雜 所有元素初始值為0才能這麽做。 ①l--r全加1 a[l]++; a[r]--; 求一遍前綴和為元素本身。 求兩遍前綴和為元素前綴和。 例題:http://codeforces.com/proble

python入門學習-列表元組(1

索引 個人 .so .cn pytho 入門 main 範圍 mage 數據結構是通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合。這些數據元素可以是數字或者字符,甚至可以是其他數據結構。 在python中,最基本的數據結構是序列(seque

C# 《四》表達式運算符(1

center key 操作 mes string src ring mage ons 1、表達式 1、將變量和字面值(在使用運算符時,它們都稱作操作數)與運算符組合起來就得到了表達式,它是計算的基本構件。 2、簡單的操作包括所有的基本數學操作,如加減乘除;還有專門用於處理布

數據結構算法學習——1 預備知識

mar 算法學習 cin inf 知識 get www 數據 dxf 泌願d捅儐頻9BRH3http://www.docin.com/cosld296 N5TR幢搪73美51等M嚎http://www.docin.com/app/user/userinfo?userid=1

vm12pro 安裝winxp過程 記錄1(涵個人問題)

amp so文件 com htm baidu bsp blog 過程 iso 1.百度的xp資源 選好iso文件後出現如下情景: 2.百度以後是要在一開始的首次界面就選擇從哪個盤開始 3.選擇了“Windowgs PE”選項…加載出界面後選擇了ghost xp…現在…黑屏

localhost 127.0.0.1

server 5.6 不清楚 ket file root 防火墻 ssl toc 轉自:http://ordinarysky.cn/?p=431localhost與127.0.0.1的區別是什麽?相信有人會說是本地ip,曾有人說,用127.0.0.1比localhost好,