LAN8720 寄存器概览和STM32 HAL库读写测试
目录
- 寄存器
- 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号寄存器在网线连接和断开的情况下寄存器内容如下: