STM系列(5)--STM32 以太网硬件设计—PHY
0赞
融创芯城邀请注册享好礼,2万元奖金等你来瓜分,排行榜奖金活动将持续至2月28日,最后几天,抓紧拉人注册,享受做小股东的乐趣吧!!
OSI的7层基准模型中PHY属于第一层——物理层。PHY是数据链路层的媒体访问控制部分和媒体的接口。PHY对所有传输的数据只是进行编码转化,没有对有效数据信号进行任何分析或改变,但是MAC所有的数据传输都必须经过PHY发送和接收才能传输到目标MAC。
PHY还可以完成连接判断,自动协商以及冲突检测。MAC可以通过修改PHY的寄存器完成对自动协商的监控,当然也可以读取PHY的寄存器来判断PHY的状态。
一.PHY寄存器
IEEE802.3标准中定义了PHY的基本寄存器,寄存器偏移00h~0fh。其中最重要的就是BCR(BasicControlRegister,offset:00h),BSR(BasicStatusRegister,offset:01h)。
MAC通过SMI接口访问BCR来控制PHY的工作模式,也可以通过访问BSR来得知PHY的工作状态。需要注意的是,有时PHY的工作速率和工作模式不一定是通过访问BSR来得到的,因此在使用STM32MAC外设与不同的PHY通讯时,可能需要修改寄存器定义。以下是ST所提供的驱动中关于PHY寄存器的定义(节选自stm32f4xx_hal_conf.h)。
/* Section 3: Common PHY Registers */ #define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ #define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ #define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ #define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ #define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiationfunction */ #define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ #define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed*/ |
/* Section 4: Extended PHY Registers */ #define PHY_SR ((uint16_t)0x10) /*!< PHY status register Offset */ #define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ #define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ #define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ |
二.PHYAutoStrapping
现在的多数PHY都具有AutoStrapping功能,即可以在硬件设计时,通过上下拉电阻设定某些引脚的电平,PHY复位后自动将引脚电平读入指定的寄存器标志位,以相应的方式工作。需要注意的有以下几项:
1.PHY寄存器地址
SMI接口访问PHY时除了需要PHY的寄存器偏移,也需要PHY的地址,这个地址是在AutoStrapping中指定的。当然,随后也可以通过SMI接口软件修改PHY的寄存器地址。
/** * @brief Reads a PHY register * @param heth: pointer to a ETH_HandleTypeDef structure that contains * the configuration information for ETHERNET module * @param PHYReg: PHY register address, is the index of one of the 32 PHY register. * This parameter can be one of the following values: * PHY_BCR: Transceiver Basic Control Register, * PHY_BSR: Transceiver Basic Status Register. * More PHY register could be read depending on the used PHY * @param RegValue: PHY register value * @retval HAL status */ HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue) |
2.工作模式
工作模式首先需要注意的是是否使能自动协商功能,自动协商遵循的原则就是双方寻找最快的方式。也可以在不使能自动协商的情况下直接指定PHY的工作模式(例如半双工10Mbits/s)。在ST的驱动中,为了准确的获得此信息,通过SMI接口读取寄存器标志位。
3.LED接口
PHY中一般都包括指示LED,用来指示链接状态和Activity情况。这些也是可以在此项中设置的。
4.其它
此外,PHY的AutoStrapping中一般还具有Loopback等功能。
三.总结
MAC和PHY并不困难,在应用时,硬件工程师应该阅读PHY的参考手册,并在原理图中标明所选定的工作方式以方便软件工程师编写驱动程序。
文章来源:微信公众号 融创芯城(一站式电子元器件、PCB、PCBA购买服务平台,项目众包平台,方案共享平台)