我们正在尝试使以太网端口在我们的定制板上工作、并且无法使网络协处理器成功初始化。 我们按照 PSC 用户指南(SPRUGV4C)第2.3.3节中的顺序打开电源域和时钟模块,但 PTSTAT.GOSTAT[X]位永远不会清除:
并发电源域/模块状态转换的过程如下(X 表示电源域编号、Y 表示模块域编号):
1、等待 PTSTAT.GOSTAT[X]清零至0x0。 等待先前启动的任何转换完成、然后再启动新的转换。
2.将 PDCTL[X]设置为打开(0x1)转换的下一个。
3.将 MDCTL[Y].NEXT 设置为启用(0x3)。 请注意、只要相应的电源域处于开启状态、您就可以在此步骤中在多个 MDCTL 下一个字段中设置转换。
4.将 PTCMD.GO[X]置位0x1以启动状态转换。 PSC 将打开该特定域的逻辑/存储器、启动模块时钟、然后使模块复位无效。
5、等待 PTSTAT.GOSTAT[X]清零至0x0。 只有在 PTSTAT.GOSTAT[X]清零后、域才会安全地处于新状态。
我们在电路板和 K2E EVM 上运行了相同的序列。 K2E EVM 完成初始化(PTSTAT.GOSTAT[2]变为0)、但我们的没有完成。 这两个板之间唯一已知的相关差异是、EVM 使用 NETCPCLK 作为 NETCP PLL 的输入时钟、我们使用 CORECLK 以相同的频率。 我们对这种情况的发生是有损失的。 我们对什么可能是问题的想法停滞不前。 请就我们可以采取的步骤提出建议、以找出出错的地方!
收集的数据:
下面粘贴了电路板上配置尝试的注释会话。 故障点以粗体突出显示:
?
***命令***
W -读取32位存储器位置
W -写入32位存储器位置
? -显示菜单
//读取与电源和时钟相关的寄存器以进行 NETCP 控制。
> w
32位十六进制地址:02620358 // NETCPPLLCTL0 - NETCP PLL 控制寄存器0
0x02620358:0x090804C0
> w
32位十六进制地址:0262035c // NETCPPLLCTL1 - NETCP PLL 控制寄存器1.
0x0262035C:0x00002040
> w
32位十六进制地址:02350128 // PTSTAT -转换状态
0x02350128:0x00000000
//打开 NETCP 电源并启用三个时钟
> W
32位十六进制地址:02350308 //设置 PDCTL2的位0 -加电
要写入的32位值:1.
0x02350308:0x00000001
> W
32位十六进制地址:02350a1c //将 MDCTL7的位4:0设置为3 -启用状态
要写入的32位值:103
0x02350A1C:0x00000103
> W
32位十六进制地址:02350a20 //将 MDCTL8的位4:0设置为3 -使能状态
要写入的32位值:1103
0x02350A20:0x00001103
> W
32位十六进制地址:02350a24 //将 MDCTL9的位4:0设置为3 -启用状态
要写入的32位值:103
0x02350A24:0x00000103
> W
32位十六进制地址:02350120 //设置位2以引起 NETCP 命令转换
要写入的32位值:4
0x02350120:0x00000004
> w
32位十六进制地址:02350128 // PTSTAT 应该读取0以完成命令;如果没有完成则读取0x4
0x02350128:0x00000004
//读取与电源和时钟相关的寄存器以进行 NETCP 控制。
> w
32位十六进制地址:235081c // MDSTAT7 - PA 时钟状态-位5:0应为0x3
0x0235081C:0x00000A18
> w
32位十六进制地址:2350820 // MDSTAT8 -以太网 SGMIIs 时钟状态-位5:0应为0x3
0x02350820:0x00000A18
> w
32位十六进制地址:2350824 // MDSTAT9 - SA 时钟状态-位5:0应为0x3
0x02350824:0x00000A18
> w
32位十六进制地址:2350208 // PDSTAT2 - NETCP 电源状态-位0应为1
0x02350208:0x00000301
下面粘贴了 K2E EVM 板上类似配置尝试的注释会话。 电路板上出现故障的同样一点以粗体突出显示、但它在 EVM 上通过。 请注意,EVM 的以太网端口无法启动,我们采取了一些步骤,在运行上述初始化序列之前关闭电源域和时钟模块,以将其重新打开:
U-Boot 2013.01 (2015年6月11日- 10:06:42)
I2C: 就绪
SPD 总和正常;在 SPD 中:33 CC;计算出00000033 CC
DDR3A 速度将配置为1600工作模式。
检测到 SO-DIMM [18KSF51272HZ-1G6K2]
DDR3速度1600
DRAM:4 GiB
将整个 DDR3内存重置为0...
DRAM:2GiB
NAND:512 MiB
网络: K2E_EMAC0、K2E_EMAC1、K2E_EMAC2、K2E_EMAC3、K2E_EMAC4、 K2E_EMAC5、K2E_EMAC6、K2E_EMAC7
按任意键停止自动引导:3 2 0
K2E EVM # ping 147.24.130.42
使用 K2E_EMAC0器件
主机147.24.130.42处于活动状态
//读取 ID 寄存器以查看基地址是否正常。
K2E EVM # MD.l 0x2350000 1 // PID 寄存器0x4482 (高16位、低未知)
02350000:44827200 .R.D
//读取与电源和时钟相关的所有寄存器以进行 NETCP 控制。
K2E EVM # MD.l 0x2350120 // PTCMD -命令转换
02350120:00000000 …
K2E EVM # MD.l 0x2350128 // PTSTAT -转换状态
02350128:00000000 …
K2E EVM # MD.l 0x2350208 // PDSTAT2 - NETCP 电源状态
02350208:00000301 …
K2E EVM # MD.l 0x2350308 // PDCTL2 - NETCP 电源命令
02350308:00000001 …
K2E EVM # MD.l 0x235081c // MDSTAT7 - PA 时钟状态
0235081c:00001f03 …
K2E EVM # MD.l 0x2350820 // MDSTAT8 -以太网 SGMII 时钟状态
02350820:00001f03 …
K2E EVM # MD.l 0x2350824 // MDSTAT9 - SA 时钟状态
02350824:00001f03 …
K2E EVM # MD.l 0x2350a1c // MDCTL7 - PA 时钟命令
02350a1c:00000103 …
K2E EVM # MD.l 0x2350a20 // MDCTL8 -以太网 SGMIIs 时钟命令
02350a20:00001103
K2E EVM # MD.l 0x2350a24 // MDCTL9 - SA 时钟命令
02350a24:00000103 …
K2E EVM # MD.l 0x2620358 // NETCPPLLCTL0 - NETCP PLL 控制寄存器0
02620358:090804c0....
K2E EVM # MD.l 0x262035c // NETCPPLLCTL1 - NETCP PLL 控制寄存器1.
0262035c:00002040 @
//关闭三个 NETCP 时钟,然后打开电源
K2E EVM # MD.l 0x2350128 // PTSTAT 应该读取为0才能启动
02350128:00000000 …
K2E EVM # mw.l 0x2350a1c 0x100 1 //清除 MDCTL7的位4:0 - SwRstDisable 状态
K2E EVM # mw.l 0x2350a24 0x100 1 //清除 MDCTL7的位4:0 - SwRstDisable 状态
K2E EVM # mw.l 0x2350a20 0x1100 1 //清除 MDCTL8的位4:0 - SwRstDisable 状态
K2E EVM # mw.l 0x2350308 0x0 1 //清除 PDCTL2的位0 -关闭电源
K2E EVM # mw.l 0x2350120 0x4 1 //设置位2以导致 NETCP 命令转换
K2E EVM # MD.l 0x2350128 // PTSTAT 应该读取为0以完成命令;如果没有完成则读取为0x4
02350128:00000000 …
//读取与电源和时钟相关的所有寄存器以进行 NETCP 控制。
K2E EVM # MD.l 0x2350120 // PTCMD -命令转换
02350120:00000000 …
K2E EVM # MD.l 0x2350128 // PTSTAT -转换状态
02350128:00000000 …
K2E EVM # MD.l 0x2350208 // PDSTAT2 - NETCP 电源状态-位0应为0
02350208:00000200....
K2E EVM # MD.l 0x2350308 // PDCTL2 - NETCP 电源命令
02350308:00000000 …
K2E EVM # MD.l 0x235081c // MDSTAT7 - PA 时钟状态-位5:0应为0
0235081c:00000a00....
K2E EVM # MD.l 0x2350820 // MDSTAT8 -以太网 SGMIIs 时钟状态-位5:0应为0
02350820:00000a00....
K2E EVM # MD.l 0x2350824 // MDSTAT9 - SA 时钟状态-位5:0应为0
02350824:00000a00 …
K2E EVM # MD.l 0x2350a1c // MDCTL7 - PA 时钟命令
02350a1c:00000100 …
K2E EVM # MD.l 0x2350a20 // MDCTL8 -以太网 SGMIIs 时钟命令
02350a20:00001100 …
K2E EVM # MD.l 0x2350a24 // MDCTL9 - SA 时钟命令
02350a24:00000100 …
K2E EVM # MD.l 0x2620358 // NETCPPLLCTL0 - NETCP PLL 控制寄存器0
02620358:090804c0....
K2E EVM # MD.l 0x262035c // NETCPPLLCTL1 - NETCP PLL 控制寄存器1.
0262035c:00002040 @
//打开 NETCP 电源并启用三个时钟
K2E EVM # MD.l 0x2350128 // PTSTAT 应该读取为0才能启动
02350128:00000000 …
K2E EVM # mw.l 0x2350308 0x1 //设置 PDCTL2的位0 -上电
K2E EVM # mw.l 0x2350a1c 0x103 //将 MDCTL7的位4:0设置为3 -启用状态
K2E EVM # mw.l 0x2350a20 0x1103 //将 MDCTL8的位4:0设置为3 -启用状态
K2E EVM # mw.l 0x2350a24 0x103 //将 MDCTL9的位4:0设置为3 -启用状态
K2E EVM # mw.l 0x2350120 0x4 //设置位2以引起 NETCP 命令转换
K2E EVM # MD.l 0x2350128 // PTSTAT 应该读取为0以完成命令;如果没有完成则读取为0x4
02350128:00000000 …
//读取与电源和时钟相关的所有寄存器以进行 NETCP 控制。
//此时,希望寄存器返回到原来的状态
//最初。
K2E EVM # MD.l 0x2350120 // PTCMD -命令转换
02350120:00000000 …
K2E EVM # MD.l 0x2350128 // PTSTAT -转换状态
02350128:00000000 …
K2E EVM # MD.l 0x2350208 // PDSTAT2 - NETCP 电源状态-位0应为1
02350208:00000301 …
K2E EVM # MD.l 0x2350308 // PDCTL2 - NETCP 电源命令
02350308:00000001 …
K2E EVM # MD.l 0x235081c // MDSTAT7 - PA 时钟状态-位5:0应为0x3
0235081c:00001f03 …
K2E EVM # MD.l 0x2350820 // MDSTAT8 -以太网 SGMIIs 时钟状态-位5:0应为0x3
02350820:00001f03 …
K2E EVM # MD.l 0x2350824 // MDSTAT9 - SA 时钟状态-位5:0应为0x3
02350824:00001f03 …
K2E EVM # MD.l 0x2350a1c // MDCTL7 - PA 时钟命令
02350a1c:00000103 …
K2E EVM # MD.l 0x2350a20 // MDCTL8 -以太网 SGMIIs 时钟命令
02350a20:00001103
K2E EVM # MD.l 0x2350a24 // MDCTL9 - SA 时钟命令
02350a24:00000103 …
K2E EVM # MD.l 0x2620358 // NETCPPLLCTL0 - NETCP PLL 控制寄存器0
02620358:090804c0....
K2E EVM # MD.l 0x262035c // NETCPPLLCTL1 - NETCP PLL 控制寄存器1.
0262035c:00002040 @