Marvell以太网交换芯片-88E6390x-调试过程
作者:互联网
1 引言
下载Marvell的器件资料,需要公司与其签订NDA保密协议。Marvell 用户访客登陆网址:https://marvell-customers.okta.com/login/login.htm
找到相应的器件,下载相关的资料。
2 硬件环境准备
仿真器:USB2SMI
用途:用于交换芯片eeprom 镜像烧写,交换芯片从eeprom读取镜像进行启动和配置
相关使用文档:《MV-S400452-00_USB2SMI-Module-DC201-Adapter-User-Guide.pdf》
3 软件环境准备
-
安装CodeBlocks
CodeBlocks 用于编写代码,编译后生成的 .ihx文件用于烧写eeprom.
参考文档:
《Creating-EEPROM-images-for-Amethyst-Peridot-and-Topaz_02_01_2019.pdf》 -
安装 IMPGUI 工具
该工具用于eeprom 镜像文件的格式转换和eeprom烧写;
参考文档:
《Creating-EEPROM-images-for-Amethyst-Peridot-and-Topaz_02_01_2019.pdf》 -
安装SwitchGUI 工具
该工具用于读写交换芯片各端口寄存器;
该工具可以将已配置好的寄存器值 dump 出来,形成regloader code,可以放到 CodeBloaks中编辑。
4 实际应用
由于公司与Marvell签了保密协议,手册中的部分截图无法贴出来,网友们见谅啦!
我们使用的场景如下,使用MPU的一个MAC+PHY与交换芯片的Port9端口通过SGMII连接。交换的Port1作为级联口接外部网络,Port2-Port7连接背板,Port8预留暂没有使用。
交换芯片使用的是No CPU模式,即上电后从eeprom读取配置文件。
交换芯片上需做的修改:
交换芯片需要做3个地方的修改:
(1) 设置 C_MODE
参考:《fs_88E6390X_88E6390_88E6290_88E6190X_88E6190-Switch-Functional-Specification-Draft-Rev0-04.pdf》
Page-182
设置Port9和Port10的C_MODE =0x9,让其工作模式为1000BASE-X
(2)设置 VLAN
参考:《fs_88E6390X_88E6390_88E6290_88E6190X_88E6190-Switch-Functional-Specification-Draft-Rev0-04.pdf》
Page-200
设置各端口的Frame Mode为Normal Network
(3)设置各端口的PHY - Fiber Transceiver Registers全部关闭自协商,强制1000M/FULL
参考:《88E6390X_88E6390_88E6190X_88E6190-PHY-and-SERDES-Functional-Specification-and-Registers.pdf》
Page-112
CodeBlock编辑的代码如下:
#include <stdio.h>
#include <Peridot.h>
int main ()
{
/****************************************************
* set C_MODE - Switch - Page182
****************************************************/
/* P9 - 1000BASE-X ; P2\P3\P4 - AutoMedia */
WriteReg(0x9,0x0,0xde09);
/* P10 - 1000BASE-X ; P5\P6\P7 - AutoMedia */
WriteReg(0xa,0x0,0xde09);
/****************************************************
* set VLAN - Frame Mode - Switch - Page200
****************************************************/
/* P1-P10 */
WriteReg(0x1,0x4,0x7f);
WriteReg(0x2,0x4,0x7f);
WriteReg(0x3,0x4,0x7f);
WriteReg(0x4,0x4,0x7f);
WriteReg(0x5,0x4,0x7f);
WriteReg(0x6,0x4,0x7f);
WriteReg(0x7,0x4,0x7f);
WriteReg(0x8,0x4,0x7f);
WriteReg(0x9,0x4,0x7f);
WriteReg(0xa,0x4,0x7f);
/********************************************************
* Close AutoNegotitaion, force 1000M/FULL - PHY - Page112
********************************************************/
/* P9-P10 */
//C45RegWrite(0x9,0x4,0x2000,0x140,0);
//C45RegWrite(0xa,0x4,0x2000,0x140,0);
/* P2-P7 */
C45RegWrite(0x12,0x4,0x2000,0x140,0);
C45RegWrite(0x13,0x4,0x2000,0x140,0);
C45RegWrite(0x14,0x4,0x2000,0x140,0);
C45RegWrite(0x15,0x4,0x2000,0x140,0);
C45RegWrite(0x16,0x4,0x2000,0x140,0);
C45RegWrite(0x17,0x4,0x2000,0x140,0);
return 0;
}
另外,交换芯片的复位时序也要特别注意!
标签:Marvell,88E6390x,C45RegWrite,0x7f,0x140,WriteReg,0x2000,0x4,以太网 来源: https://blog.csdn.net/weixin_40407893/article/details/116756947