This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] [FAQ]以太网 PHY 的扩展寄存器空间访问

Guru**** 1135610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1271487/faq-extended-register-space-access-for-ethernet-phys

我们的以太网 PHY 具有一组标准寄存器0x0-0x1F、您可以直接访问这些寄存器。 0x1F 以上的寄存器需要不同的访问方法。  

本常见问题解答旨在提供一些有关如何读取/写入这些寄存器的示例。 不同寄存器空间的更多细节可在以太网 PHY 的数据表中找到。  

使用两个寄存器访问扩展寄存器组:0xD (REGCR)和0xE (ADDAR)。 下面简要概述了如何使用这些寄存器。

REGCR[15:14]

功能

00

对寄存器 ADDAR 的访问、修改扩展寄存器‘s的'设置地址'寄存器。 要访问扩展寄存器组中的任何寄存器、该地址寄存器必须始终处于初始化状态。

 

01

访问寄存器 ADDAR 访问由地址寄存器中值所选择的扩展寄存器组中的寄存器。

10

访问寄存器 ADDAR 访问由地址寄存器中值所选择的扩展寄存器组中的寄存器。 访问完成后、读取和写入操作都会使地址寄存器中的值递增。

11

访问寄存器 ADDAR 访问由地址寄存器中值所选择的扩展寄存器组中的寄存器。 访问完成后、仅写入访问会使地址寄存器中的值递增。 对于读取访问、地址寄存器的值保持不变。

读取(无后增量)操作

如需读取扩展寄存器组中的寄存器:

 

指令

示例:读取0x0170

1.将值0x001F (地址函数字段= 00、DEVAD = 31)写入寄存器 REGCR。

 

将寄存器0x0D 写入值0x001F

 

2.将所需的寄存器地址写入寄存器 ADDAR。

 

将寄存器0x0E 写入值0x0170

3.将值0x401F (数据、无后增量函数字段= 01、DEVAD = 31)写入寄存器 REGCR。

 

将寄存器0x0D 写入值0x401F

4.将所需扩展寄存器组寄存器的内容读取到寄存器 ADDAR。

 

读取寄存器0x0E

 

随后从寄存器 ADDAR (第4步)继续读取由地址寄存器中值所选择的寄存器。

注: 如果之前已配置地址寄存器、则可跳过步骤(1)和(2)。

 

写入(无后增量)操作

如需在扩展寄存器组中写入寄存器:

 

指令

示例:设置寄存器0x0170 = 0C50

1.将值0x001F (地址函数字段= 00、DEVAD = 31)写入寄存器 REGCR (0x0D)。

 

将寄存器0x0D 写入值0x001F

2.将所需的寄存器地址写入寄存器 ADDAR (0x0E)。

 

将寄存器0x0E 写入值0x0170

3.将值0x401F (数据、无后增量函数字段= 01、DEVAD = 31)写入寄存器 REGCR。

 

将寄存器0x0D 写入值0x401F

4.将所需扩展寄存器组寄存器的内容写入寄存器 ADDAR。

将寄存器0x0E 写入值0x0C50

 

 

随后写入寄存器 ADDAR (第4步)、继续重写由地址寄存器中值所选择的寄存器。

注: 如果之前已配置地址寄存器、则可跳过步骤(1)和(2)。

 

读取(有后增量)操作

 

在读取操作之后、若要读取扩展寄存器组中的寄存器并自动将地址寄存器递增到下一更高值:

 

指令

示例:读取寄存器0x0170和0x0171

1.将值0x001F (地址函数字段= 00、DEVAD = 31)写入寄存器 REGCR。

 

将寄存器0x0D 写入值0x001F

 

2.将所需的寄存器地址写入寄存器 ADDAR。

 

将寄存器0x0E 写入值0x0170

3.将值0x801F (数据、读取和写入时的后增量函数字段= 10、DEVAD = 31)写入寄存器 REGCR。

将寄存器0x0D 写入值0x801F

4.将所需扩展寄存器组寄存器的内容读取到寄存器 ADDAR。

读取寄存器0x0E

5.随后读取寄存器 ADDAR (第4步)、读取由地址寄存器值所选择下一个更高地址的数据寄存器;每次访问之后、地址寄存器都会递增。

读取寄存器0x0E

 

第4步读取寄存器0x0170、由于启用了后增量、因此第5步读取寄存器0x0171。

写入(有后增量)操作

 

在写入操作之后、若要在扩展寄存器组中写入寄存器并自动将地址寄存器递增到下一更高值:

 

指令

示例:设置寄存器0x0170 = 0C50和寄存器0x0171 = 0x0011

1.将值0x001F (地址函数字段= 00、DEVAD = 31)写入寄存器 REGCR。

 

将寄存器0x0D 写入值0x001F

2.从寄存器 ADDAR 写入寄存器地址。

 

将寄存器0x0E 写入值0x0170

3.写入值0x801F (数据、读写后增量函数字段= 10、DEVAD = 31)或值0xC01F (数据、写操作后增量函数字段= 11)。 DEVAD = 31)添加到寄存器 REGCR。

将寄存器0x0D 写入值0x401F

4.将所需扩展寄存器组寄存器的内容写入寄存器 ADDAR。

将寄存器0x0E 写入值0x0C50

 

5.随后写入寄存器 ADDAR (第4步)、写入由地址寄存器值所选择下一个更高地址的数据寄存器;每次访问之后、地址寄存器都会递增。

将寄存器0x0E 写入值0x0011

 

第4步将寄存器0x0170写入0x0C50、由于启用了后增量、第5步将寄存器0x0171写入0x0011。