7.5请求和响应的支持
设备使用请求和响应的格式是0x0001。
可以与在设备的SMI接口引脚(MDC和MDIO)上接收到的寄存器操作同时执行无损远程管理请求。同样有,如果SMI接口将其操作限制为非破坏性操作,则可以同时完成任何远程管理请求。破坏性动作是任何更改寄存器数据的请求。寄存器写入属于此类,但刷新命令(如在ATU,MIB等上)以及任何导致由于读取而被清除的寄存器读取也属于此类。注意破坏性的远程管理命令。
设备支持请求代码:
1、0x0000-GetID,7.5.1节
2、0x1000-ATU转储,7.5.2节
3、0x1020-MIB转储,7.5.3节(仅转储)和7.5.4节转储和清除
4、0x2000-读取和写入寄存器7.5.5节
7.5.1GetID(非破坏性的)
该请求的目的是获取所选设备的响应格式和产品/产品版本号。
- 请求格式=0x0000<-注意:0x0000只对GetID。
- Pad=0x0000(对于ProductNum/Rev的回答保留空间)
- 请求代码=0x0000(GetID)
- 请求数据=0x0000
- 响应格式=0x0001(SOHO)
- ProductNum/Rev=[端口0偏移量0x03]
- 响应代码=0x0000(GotID)
- 响应数据=null
7.5.2ATU转储
该请求最多转储在ATU中找到的48个有效MAC条目。要从ATU内存的开头开始,请使用继续代码= 0x0000。如果ATU为空,则第一个条目数据字段中的EntryState将为0x0(第一个八位位组的7:5位)。如果找到的有效MAC条目少于48个,则EntryState = 0x0的第一个条目是列表的末尾。如果ATU中存在超过48个有效MAC条目,则所有48个条目将返回非零EntryState,并且在第48个条目数据之后将显示一个(两个八位位组)继续代码。通过使用从前一个转储ATU返回的继续代码进行转储ATU,可以检索下一个有效的MAC条目。
ATU以线性ATU内存地址顺序转储(即,它们不会以GetNext的递增网络字节顺序),并且仅转储有效条目。
- 请求格式=0x0001(SOHO)
- Pad=0x0000(对于ProductNum/Rev的回答保留空间)
- 请求代码=0x1000(ATU转储)
- 请求数据=[继续代码]2个8位字节的大小(0x0000=从ATU表的开头开始)
NOTE:此ATU转储可能与从SMI引脚接收到的ATU GetNext操作并行发生。建议不要执行此操作多于GetNext,因为GetNext会减慢ATU Dump的响应时间。
7.5.3转储MIBs(非破坏性的)
此请求转储所选设备上单个物理端口的所有当前MIB计数器。要转储的物理端口号在下面定义的“请求数据”字段中传递。
- 请求格式= 0x0001(SOHO)
- 填充= 0x0000(保留用于ProductNum / Rev答复的空间)请求代码= 0x1020(MIB转储)
- 请求数据= 0x000p(p =物理端口号)在此设备中0x0 => p <= 0xA
- 响应=见下图
返回转储的端口(以及Dev Num –来自全局1偏移量0x01C的DeviceNumber),因此软件无需查看帧的Sequence Num即可知道该数据与哪个端口相关联。
在MIB值刚刚开始传送到帧中的瞬间,将时间戳插入到帧中。两个TimeStamp值之间的增量时间可用于对其他MIB数据进行速率计算。
在该设备中,时间戳以每512ns一次的速率递增。以这种速率,时间戳将在大约2,200秒或36分钟内溢出。
7.5.4转储MIB和清除(破坏性的)
此请求转储所选设备上单个物理端口的所有当前MIB计数器,然后清除它们。这样,每个转储MIB&Clear将从上一个端口的最后一个Dump MIB&Clear请求返回MIB计数增量。要转储的物理端口号在下面定义的“请求数据”字段中传递。
- 请求格式= 0x0001(SOHO)
- 填充= 0x0000(保留用于ProductNum / Rev答复的空间)
- 请求代码= 0x1020(MIB转储)
- 请求数据= 0x800p(p =物理端口号–位15 = 1表示读取后清除)在该设备中0x0 => p <= 0xA
- 响应=参见上图
NOTE: 由于“清除”功能,此命令具有破坏性,因此不应与访问MIB的SMI接口并行执行。选择一个接口或其他的。
7.5.5读取/写入寄存器(可能被破坏)
该请求读取或写入单个或多个交换核心或PHY寄存器。
警告:如果使用此命令来发出SWReset,则将不会生成响应帧,因为正在重置MAC和数据路径。其他位设置也可能会出现问题,例如,强制“链接”断开或在用于接收和发送远程管理帧的端口上将端口的PortState设置为“禁用”。
- 请求格式= 0x0001(SOHO)
- Pad = 0x0000(保留用于ProductNum / Rev答复的空间)
- 请求代码= 0x2000(寄存器读或写)
- 紧随其后的是n组4个八位位组寄存器命令,其中0
支持三种类型的寄存器命令:
-
- 直接寄存器读或写
该命令用于向任何设备寄存器读取或写入16位,如下所示:
第一个八位位组 [7:4] = 0x0;
第一个八位位组[3:2] =操作码,其中10 =读,01 =写;
第一个八位位组[1:0] +第二个八位位组[7:5] = SMI设备地址;
第二个八位位组[4:0] = SMI寄存器偏移;
第三个八位位组=数据[15:8](对于读取必须为0x00);第四个八位位组=数据[7:0](对于读取必须为0x00)。
-
- 等待位命令
该命令用于延迟处理帧中的下一个寄存器命令,直到选择的位为所需值为止。这通常用于等待单元清除寄存器的忙位(例如在ATU或MIB中等)。等待位命令的格式如下:
第一个八位位组[7:4] = 0x1;
第一个八位位组[3:2] =操作码,其中00 =等待直到位为0&11 =等待直到位为1;
第一个八位位组[1:0] + 2nd Octet [7:5] = SMI设备地址;
第2个八位位组[4:0] = SMI寄存器偏移;
第3个八位位组[7:4] = 0x0;
第三个八位位组[3:0] =寄存器中等待等待的位(0x0 =位0,0x1 =位1,…,0xF =位15);
第四位八位= 0x00。
-
- 列表结束命令
此命令用于指示帧中没有其他命令。如果一帧具有完整的121条命令,则第121条必须是“列表结尾”。等待位命令的格式如下:
第一个八位位组= 0xFF;
第二个八位位组= 0xFF;
第三个八位位组= 0xFF;
第四个八位位组= 0xFF。
响应=参见下图。
响应帧的响应数据是请求帧的请求数据,其中寄存器读取命令的数据[15:0]部分是从所选寄存器读取的数据(即,请求帧中的0x0000数据被替换为从寄存器读取的数据)。
任何非法的寄存器格式都被认为是列表结尾命令。
如果“等待位”命令等待位处于请求状态的时间超过1秒,则“等待位”命令将终止,在第四个八位位组中返回0xFF的值,并将该指令视为列表结束指示符(也就是说,失败的“等待位”命令之后的任何命令将不被处理)。
读取“读取时清除”寄存器被认为是破坏性的,不应与破坏性的SMI操作并行进行。
写寄存器也被认为是破坏性的。仅应使用一个接口(远程管理接口或SMI接口)来执行破坏性操作(即,导致设备内部发生更改的操作)。
7.5.6错误响应帧(非破坏性)
包含不支持的请求格式或请求代码的任何请求框架都将通过错误响应框架进行响应(因为所有请求都将返回响应)。
- 请求格式= 0x [不支持](即,对于SOHO设备,请求格式不是0x0000或0x0001)
- 填充= 0x0000(保留用于答复ProductNum / Rev的空间)
- 请求代码= 0x [未定义](即请求代码无效)请求数据= 0x [无关]
- 响应=参见下图。
NOTE: 如果软件收到带有对设备有效的接收到的请求代码的错误响应,则请求帧的响应格式必定是错误的,反之亦然。两者都返回。
通过SMI PHY数据和SMI PHY命令寄存器可以访问PHY寄存器。尝试直接访问PHY寄存器是无效的,但不会生成错误响应帧。取而代之的是,将不会写入写入数据,并且将以0xFFFF返回读取数据。
非法寄存器命令将不会生成错误响应帧。它们将被解释为“列表结尾”命令。
如果在寄存器读/写请求帧中出现了121个以上的寄存器命令,则不会生成错误响应帧。仅将处理前121个寄存器命令,然后采用自动列表终止命令。