目錄
- 寄存器
- 0x00:Basic Control Register(BCR)
- 0x01:Basic Status Register(BSR)
- 連接
- 測試寄存器讀寫
- 測試
- 補充
寄存器
//
0x00:Basic Control Register(BCR)
BIT15:Soft Reset
寫1復位,寫1之后自清除。復位之后的芯片配置源自Mode Configuration寄存器,Mode Configuration寄存器的初始值來自上電之后的strap pin。
BIT14:Loopback
寫1進入環回模式
BIT13:Speed Select
寫1選擇100M,寫0選擇10M
注意:如果自動協商被使能,那么此位設置無效
BIT12:Auto-Negotiation Enable
寫1使能自動協商
寫1之后會覆蓋掉BIT13:Speed Select和BIT8 Duplex Mode的配置
BIT11:Power Down
寫1進入掉電模式
注意:進入掉電模式之前要取消自動協商
BIT10:Isolate
寫1隔離PHY和MII
“PHY隔離模式”用于通過MDIO/MDC接口進行通信,無需MAC的管理。該模式用于檢查PHY自身功能,包括以太網連接和MDIO/MDC管理。
在此模式下,PHY與MII/RMII/RGMII隔離,以便獨立檢測PHY本身,確保其在PHY/MAC系統中使用時無任何問題。此模式主要用于調試階段,通過MDC/MDIO單獨管理PHY,以驗證其是否正常工作。
BIT9:Restart Auto-Negotiate
寫1重啟自動協商,置位之后自清除
BIT8:Duplex Mode
寫1全雙工,寫0半雙工
//
0x01:Basic Status Register(BSR)
BIT15~BIT9:通訊介質能力啟用
通訊介質參考https://blog.csdn.net/yeahpeople/article/details/116430588
LAN8720只能在部分介質類型下工作
BIT8:Extended Status
指示是否在index = 0x0F上有擴展狀態信息
BIT7, BIT6:RESERVED
BIT5: Auto-Negotiate Complete
自動協商完成
BIT4: Remote Fault
網上看到過一個因為電磁輻射導致報Remote Fault和link down的。
BIT3: Auto-Negotiate Ability
是否帶有自動協商能力
BIT2:Link status
網線連接狀態
BIT1:Jabber Detect
jabber幀是指有效長度大于指定最大長幀長度,且CRC校驗錯誤的幀
BIT0:Extended Capabilities
支不支持擴展能力寄存器
連接
測試寄存器讀寫
讀寫之前需要做一次硬件復位
//硬件復位
HAL_GPIO_WritePin(ETH_NRST_GPIO_Port, ETH_NRST_Pin, GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(ETH_NRST_GPIO_Port, ETH_NRST_Pin, GPIO_PIN_SET);
HAL_Delay(5);
做完硬件復位做軟件復位,也是寄存器寫入BCR的示例
static uint8_t ret = 0;
static uint8_t lan8720addr = 0;
//置位BCR-BIT15,Soft Reset
ret = HAL_ETH_WritePHYRegister(&heth, lan8720addr, PHY_BCR,PHY_RESET);
if (ret != HAL_OK) {Error_Handler();
}
HAL_Delay(100);
讀取BSR
ret = HAL_ETH_ReadPHYRegister(&heth, lan8720addr, PHY_BSR, ®value);
if (ret != HAL_OK) {Error_Handler();
}
SEGGER_RTT_printf(0, "%04x\n", regvalue);
測試
接入線纜和不接入線纜的情況下,BSR寄存器的區別
可以看出,拔掉網線之后PHY芯片會重啟自動協商流程
補充
BCR,BSR寄存器是通用的,類似的網卡都會實現這個功能。
部分寄存器是供應商特定的,如下圖
其中31寄存器指示自動協商的結果,如下
ST的HAL庫會關注這個,需要手動修改hal庫內容
怎么修改在后面LWIP移植的章節描述吧,只用8720做鏈路層通訊的話這個在庫里用不到
31號寄存器在網線連接和斷開的情況下寄存器內容如下: