/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : bsp_eth.h * @brief : 板级支持包以太网(LAN8720)驱动头文件 ****************************************************************************** */ /* USER CODE END Header */ #ifndef BSP_ETH_H #define BSP_ETH_H #include "hal.h" #include "hal_eth.h" /** * @brief LAN8720 PHY 地址定义 */ #define LAN8720_PHY_ADDR 0x00 /** * @brief LAN8720 PHY 寄存器定义 */ #define LAN8720_REG_BSR 0x01 /*!< 基本状态寄存器 */ #define LAN8720_REG_BCR 0x00 /*!< 基本控制寄存器 */ #define LAN8720_REG_PID1 0x02 /*!< PHY 标识符 1 */ #define LAN8720_REG_PID2 0x03 /*!< PHY 标识符 2 */ #define LAN8720_REG_ANAR 0x04 /*!< 自动协商通告寄存器 */ #define LAN8720_REG_ANLPAR 0x05 /*!< 自动协商链路伙伴能力寄存器 */ #define LAN8720_REG_ANER 0x06 /*!< 自动协商扩展寄存器 */ #define LAN8720_REG_DR 0x0E /*!< 设备修订寄存器 */ #define LAN8720_REG_CR 0x10 /*!< 控制寄存器 */ #define LAN8720_REG_SR 0x11 /*!< 状态寄存器 */ /** * @brief LAN8720 BSR 寄存器位定义 */ #define LAN8720_BSR_LINK_STATUS (1 << 2) /*!< 链路状态位 */ #define LAN8720_BSR_AUTO_NEG_COMPLETE (1 << 5) /*!< 自动协商完成 */ #define LAN8720_BSR_100BASE_T4 (1 << 11) /*!< 支持 100BASE-T4 */ #define LAN8720_BSR_100BASE_TX_FD (1 << 12) /*!< 支持 100BASE-TX 全双工 */ #define LAN8720_BSR_100BASE_TX_HD (1 << 13) /*!< 支持 100BASE-TX 半双工 */ #define LAN8720_BSR_10BASE_T_FD (1 << 14) /*!< 支持 10BASE-T 全双工 */ #define LAN8720_BSR_10BASE_T_HD (1 << 15) /*!< 支持 10BASE-T 半双工 */ /** * @brief LAN8720 BCR 寄存器位定义 */ #define LAN8720_BCR_RESET (1 << 15) /*!< 软件复位 */ #define LAN8720_BCR_AUTO_NEG_EN (1 << 12) /*!< 自动协商使能 */ #define LAN8720_BCR_SPEED_SELECT (1 << 13) /*!< 速度选择 (1=100Mbps, 0=10Mbps) */ #define LAN8720_BCR_DUPLEX_MODE (1 << 8) /*!< 双工模式 (1=全双工, 0=半双工) */ #define LAN8720_BCR_RESTART_AN (1 << 9) /*!< 重启自动协商 */ /** * @brief LAN8720 PHY 标识符 */ #define LAN8720_PID1_VALUE 0x0007 #define LAN8720_PID2_VALUE 0xC0F0 /** * @brief 以太网配置结构体 */ typedef struct { uint8_t enable; /*!< 以太网使能标志 */ hal_eth_instance_t instance; /*!< 以太网实例 */ hal_eth_mode_t mode; /*!< 以太网模式 */ hal_eth_speed_t speed; /*!< 以太网速度 */ hal_eth_phy_addr_t phy_addr; /*!< PHY 地址 */ hal_eth_mac_addr_t mac_addr; /*!< MAC 地址 */ uint8_t auto_negotiation; /*!< 自动协商使能标志 */ uint8_t interrupt_enable; /*!< 中断使能标志 */ } bsp_eth_config_t; /** * @brief 以太网状态结构体 */ typedef struct { uint8_t link_up; /*!< 链路状态 */ uint8_t duplex; /*!< 双工模式 (0: 半双工, 1: 全双工) */ uint32_t speed; /*!< 速度 (Mbps) */ uint32_t rx_packets; /*!< 接收数据包计数 */ uint32_t tx_packets; /*!< 发送数据包计数 */ uint32_t rx_errors; /*!< 接收错误计数 */ uint32_t tx_errors; /*!< 发送错误计数 */ uint16_t phy_id1; /*!< PHY 标识符 1 */ uint16_t phy_id2; /*!< PHY 标识符 2 */ } bsp_eth_status_t; /** * @brief 初始化以太网(LAN8720)模块 * @param config: 指向以太网配置结构体的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_init(const bsp_eth_config_t* config); /** * @brief 反初始化以太网(LAN8720)模块 * @retval HAL 状态码 */ hal_ret_t bsp_eth_deinit(void); /** * @brief 获取以太网(LAN8720)状态 * @param status: 指向以太网状态结构体的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_get_status(bsp_eth_status_t* status); /** * @brief 设置以太网 MAC 地址 * @param mac_addr: 指向 MAC 地址结构体的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_set_mac_addr(const hal_eth_mac_addr_t* mac_addr); /** * @brief 获取以太网 MAC 地址 * @param mac_addr: 指向 MAC 地址结构体的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_get_mac_addr(hal_eth_mac_addr_t* mac_addr); /** * @brief 检查以太网链路状态 * @param link_up: 存储链路状态的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_check_link(uint8_t* link_up); /** * @brief 复位以太网 PHY(LAN8720) * @retval HAL 状态码 */ hal_ret_t bsp_eth_reset_phy(void); /** * @brief 读取 LAN8720 PHY 寄存器 * @param reg_addr: 寄存器地址 * @param value: 存储寄存器值的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_read_phy_reg(uint16_t reg_addr, uint16_t* value); /** * @brief 写入 LAN8720 PHY 寄存器 * @param reg_addr: 寄存器地址 * @param value: 寄存器值 * @retval HAL 状态码 */ hal_ret_t bsp_eth_write_phy_reg(uint16_t reg_addr, uint16_t value); /** * @brief 检测 LAN8720 PHY 存在 * @param detected: 存储检测结果的指针 * @retval HAL 状态码 */ hal_ret_t bsp_eth_detect_phy(uint8_t* detected); /** * @brief 配置 LAN8720 PHY * @param mode: 以太网模式 * @param speed: 以太网速度 * @param auto_neg: 自动协商使能 * @retval HAL 状态码 */ hal_ret_t bsp_eth_configure_phy(hal_eth_mode_t mode, hal_eth_speed_t speed, uint8_t auto_neg); #endif /* BSP_ETH_H */