你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 以太网硬件设计——PHY

[复制链接]
STMCU小助手 发布时间:2022-2-11 21:59
OSI 的 7 层基准模型中 PHY 属于第一层 ——物理层。PHY 是数据链路层的媒体访问控制部分和媒体的接口。PHY 对所有传输的数据只是进行编码转化,没有对有效数据信号进行任何分析或改变,但是MAC 所有的数据传输都必须经过 PHY 发送和接收才能传输到目标 MAC。PHY 还可以完成连接判断,自动协商以及冲突检测。MAC 可以通过修改 PHY 的寄存器完成对自动协商的监控,当然也可以读取 PHY 的寄存器来判断 PHY 的状态。
6 m. \) u9 C2 I8 y* c8 v一. PHY 寄存器
5 T) _8 ?) i3 ?IEEE802.3 标准中定义了 PHY 的基本寄存器,寄存器偏移 00h ~ 0fh。其中最重要的就是 BCR(BasicControl Register, offset: 00h),BSR(Basic Status Register, offset: 01h)。MAC 通过 SMI 接口访问 BCR 来控制 PHY 的工作模式,也可以通过访问 BSR 来得知 PHY 的工作状态。需要注意的是,有时 PHY 的工作速率和工作模式不一定是通过访问 BSR 来得到的,因此在使用STM32 MAC 外设与不同的 PHY 通讯时,可能需要修改寄存器定义。以下是 ST 所提供的驱动中关于PHY 寄存器的定义(节选自 stm32f4xx_hal_conf.h)。
1 b3 w* Q' e: }
: s, \" X5 m: {* f' L! q
  1. /* Section 3: Common PHY Registers */
    ( [9 b9 X6 v$ [3 @
  2. #define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */
    " E* P% ?! X. u* C4 J# t( z5 e
  3. #define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register *// ~0 K( I0 l7 ^7 y9 p+ x
  4. #define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */
    & K5 `* B0 U0 G3 q* o- l; [
  5. #define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */9 s4 t5 l& g  b' W* u' z6 ~/ M
  6. #define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation
    0 f3 H. W9 J2 ?: k. n
  7. function */
    ; ?5 j# w9 L$ f
  8. #define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */$ j% w9 S3 m7 |7 _" L
  9. #define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process3 R" l( v* t- E8 X; ^; S1 g
  10. completed */6 S' L- ?. \; E. M4 u7 P
复制代码
二.PHY AutoStrapping
! f2 e7 Y, `* {0 S, U现在的多数 PHY 都具有 AutoStrapping 功能,即可以在硬件设计时,通过上下拉电阻设定某些引脚的电平,PHY 复位后自动将引脚电平读入指定的寄存器标志位,以相应的方式工作。需要注意的有以下几项:
6 C6 R7 x- g0 M$ ?5 L1. PHY 寄存器地址9 O6 i! M; `$ s: `+ ]
SMI 接口访问 PHY 时除了需要 PHY 的寄存器偏移,也需要 PHY 的地址,这个地址是在AutoStrapping 中指定的。当然,随后也可以通过 SMI 接口软件修改 PHY 的寄存器地址。
  1. /**4 l# H7 W: c5 p: {) w
  2. * @brief Reads a PHY register: q- }8 L0 G  X" U; L
  3. * @param heth: pointer to a ETH_HandleTypeDef structure that contains
    ( O4 L3 Q/ S4 q
  4. * the configuration information for ETHERNET module/ c, h7 s5 ^6 h% `1 Y, {
  5. * @param PHYReg: PHY register address, is the index of one of the 32 PHY$ m) C1 n( y* `
  6. register.
    * z; k2 G5 b. {1 g/ h( q
  7. * This parameter can be one of the following values:
    5 I1 s2 D7 G# M
  8. * PHY_BCR: Transceiver Basic Control Register,3 I! ?+ [+ L& ~
  9. * PHY_BSR: Transceiver Basic Status Register.. z# }8 p  q; n: ], d
  10. * More PHY register could be read depending on the used PHY9 Z' `1 z) Y# d( v2 K" I/ k
  11. * @param RegValue: PHY register value3 w+ T  W% P0 q7 V, ~( i, J+ U
  12. * @retval HAL status
    * A8 i% L) m! K/ q" Y* i$ L
  13. */' n$ j0 \. R1 Z. |' {( s( P
  14. HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg,2 C% f, H* \  ~( o1 H
  15. uint32_t *RegValue)
复制代码
, C0 [; X8 |2 h5 x: `2 ~5 Z# @/ d
2. 工作模式
- a+ N! Q7 a+ Q& @/ E0 I4 f8 w工作模式首先需要注意的是是否使能自动协商功能,自动协商遵循的原则就是双方寻找最快的方式。也可以在不使能自动协商的情况下直接指定 PHY 的工作模式(例如半双工 10Mbits/s)。在 ST 的驱动中,为了准确的获得此信息,通过 SMI 接口读取寄存器标志位。
: T+ N7 {) N8 [) K4 s7 x1 L* B8 x
- [+ a9 F" A$ x7 ?3. LED 接口
5 o5 I" r! V/ }  z% F- tPHY 中一般都包括指示 LED,用来指示链接状态和 Activity 情况。这些也是可以在此项中设置的。4. 其它此外,PHY 的 AutoStrapping 中一般还具有 Loopback 等功能。
/ ?4 b! n" a2 \1 L, a
3 @. o+ A/ i+ a( I三. 总结
) H) e5 d3 _! U* ?6 EMAC 和 PHY 并不困难,在应用时,硬件工程师应该阅读 PHY 的参考手册,并在原理图中标明所选定的工作方式以方便软件工程师编写驱动程序。
! `! [# D5 r" t: Y/ p. @( T1 c' m) Z! c) K) r" m. m' e2 D# I

+ q: ]* V8 f, k% e* Q' w9 F5 |0 b7 w$ x5 W/ C* _7 z; b6 x; x! O
赞 收藏 评论0 发布时间:2022-2-11 21:59

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版