SylixOS网络开发(一)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2020年12月26日19:43:25 评论 1,560

1. 网络硬件组成一览

1.1总体概览

网络硬件上主要有以下几部分组成:

SylixOS网络开发(一)

  • CPU:为MAC控制器提供描述符,以及负责在网络协议栈和网络驱动之间传送数据
  • MAC:通过描述符来控制DMA发送和接收数据
  • DMA:用来在缓存区和MAC之间搬送数据,一般是MAC控制器内部的DMA,而不是SOC上的通用DMA
  • PHY:用于将数据编码发送或者接收数据的器件
  • RJ45:网络接口,比如常见的电口或者光口

1.2 MAC和PHY

MAC和PHY之间通过专用的MII类接口连接,MII类接口功能大致分为两个部分:数据和控制。数据类引脚用于传输数据,控制类引脚用于MAC控制PHY,比如设置PHY寄存器,获取PHY工作状态等等。

SylixOS网络开发(一)

1.3 PHY地址

一个PHY硬件可以通过引脚设置成不同的地址,MAC要想和PHY通信的话,必须要知道PHY正确的地址。一般PHY的地址为0~31,在MAC控制器上有寄存器是用来设置想要通信的PHY的地址,如下所示。

SylixOS网络开发(一)

如果不知道PHY硬件上设置成了什么地址的话,可以通过遍历读取0~31号地址上PHY的硬件ID来判断哪些地址上是有PHY,然后选择具体的PHY进行通信。

2. PHY寄存器

PHY是 IEEE802.3 中定义的一个标准模块,PHY 寄存器的地址空间为 5 位,因此寄存器范围是0 到31 ,最多有 32 个寄存器。IEEE802.3 定义了地址为0-15 这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义。但现在芯片功能很强大,32个寄存器远远不到,于是有的厂家就想出办法,使用page的方式来扩展。在看手册过程中发现,即使是0-15这类的寄存器,不同厂家在实现还是有点差异,所以,IEEE标准定义的寄存器只是在大的方面上说是“标准”的,细节方面如同一寄存器不同的位,功能也不一样,所以最好以厂商的datasheet为准。PHY寄存器描述如下:

SylixOS网络开发(一)

其中2和3号寄存器记录了一个PHY的ID号,一般在网卡驱动中需要通过PHY地址和PHY的ID这两个信息来确定MAC要和哪个PHY进行通信。

3. 网卡驱动中PHY的初始化

由于大部分PHY只需要通过前16个寄存器进行初始化,而前16个寄存器的定义对于大部分PHY都是相同的,所以SylixOS提供了一个标准的接口给驱动,用于简化初始化PHY的步骤。在SylixOS网络驱动中,一个通用的PHY初始化步骤如下:

  • 定义一个struct phy_dev类型变量,然后初始化好其中的一些成员
  • 调用API_MiiPhyInit接口对PHY进行初始化
  • 调用API_MiiPhyMonitorStart接口使能对PHY状态变化检测功能,其实就是创建一个独立的线程每隔固定的时间对PHY状态进行检测

注意这些都是对一般通用的PHY的初始化步骤,对于某些PHY,还需要操作厂商自定义的扩展寄存器进行一些设置,这时就需要参考PHY的datasheet或者厂商提供的参考例程。

gewenbin
  • 本文由 发表于 2020年12月26日19:43:25
  • 转载请务必保留本文链接:http://www.databusworld.cn/9832.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: