本文章主要记录 基于BSTA1000B Soc平台,开发调试Marvell 88Q5192 switch的过程
背景:自动驾驶行业,车载通信使用的是车载以太网,而且由于各种传感器,如激光雷达、雷达、IBOX、IECU等,另外,ADCU控制器,内部可能需要多颗soc,soc通soc之间,也需要接入以太网,那么就需要多路车载以太网的支持,基本最少需要10几路的车载以太网,所以基于此,在黑芝麻BSTA1000B平台上,进行marvell88Q5192的调试工作!
拿到此任务后,对于以太网这块,之前也没有相关调试经验,首先面对复杂的网络拓扑,先进行梳理,数据链路以及控制链路;
一、 数据链路 & 控制链路:
首先 5192通过一个口的RGMII信号,连接到BSTA1000B的GMAC0,这个是数据链路,控制通道是通过SMI或者SPI方式控制5192,现在常规做法,可能是switch直接通过switch的固件直接进行配置,或者switch接到mcu(如TC397)上进行初始化,但是我们这边连接到了soc进行控制,所以针对此数据通路、控制通路,需要考虑使用的是 MAC-MAC的方式,还是MAC-PHY的方式,
自我理解,MAC-MAC的方式,就是 不需要 SMI或者SPI等控制去初始化switch(同soc连接的),然后gmac控制器驱动,会自动创建网卡,然后就可以直接通信了,如果是mac-phy的方式的话,需要soc通过smi对switch进行配置,需要phy驱动支持
二、 marvell 88Q5192调试:
marvell 5192可以理解为是两个5152,即marvell的说法,两个die,die0,die1,又可以理解为两个cpu,5192有两个硬件的工具,可以不用写代码,直接去调试5192,JTAG工具、SMI工具
截图如下:
SMI工具,SMI通过SDIO总线,访问marvell5192,JTAG工具,通过JTAG接口访问5192,目前,JTAG工具,功能比较强的,marvell支持的比较好,有专门的工具(windows下)可以烧录marvell5192的固件,可以查看marvell5192内部的所有寄存器
工具入下:
通过飞线,将上述的jtag小板,连接到5192的jtag口,5根线(TXD、RXD,TMS、TCK、GND),然后通过usb线,连接到电脑上后,执行 jtag_rat.exe 后,即可进入到jtag调试命令行界面,如下:
可以使用的命令:参考同目录下的 jtag_rat.txt
这里常用到的命令如下:
showPorts,可以查看每个端口的状态,如当前的模式,detect状态,speed,link的状态等,非常有用;
showBooStrap:查看硬件管脚初始化状态;
showMIB ALL 1
查看Port1的数据收发情况,用于定位,对用端口上,有无数据
ESURead、ESUWrite:用来读写寄存器
如:ESURead Port_0 0x0 ,读取Port0的0寄存器
PhyWrite45,用于读取phy寄存器
phywrite45 i 1 2 0xF0AD 0x0
此处的i,代表的是internel,内部的寄存器
此处的1,代表的是哪个端口,如Port0,就是0,Port1就是1
此处的2,代表的是哪个设备,即device或者class
此处的0xF0AD表示的是哪个寄存器
此处的0表示的是写入的值
SMI工具界面如下:
调试过程中遇到的问题总结:
1. BSTA1000B Gmac驱动初始化失败问题,出现
bstgmaceth 30000000.ethernet eth0 : bstgmac_hw_setup : DMA engine initialization failed
bstgmaceth 30000000.ethernet eth0 : bstgmac_open: Hw setup failed
此问题,是bsta1000b控制器内部的gmac控制器,初始化时,需要RGMII上有RXCLK信号(针对soc来讲是RXCLK),由于5192需要拉reset后,才会有txclk,所以此问题,需要确保5192有RGMII TXCLK输出,否则会出现gmac驱动初始化失败问题,在测量此信号时,需要注意,要提高采样率,才能捕捉到此信号
2. marvell5192端口配置为百兆后,showPorts可以观察到,然后要测试,需要使用车载以太网转工业以太网转接盒,才能进行测试,此转接盒,需要注意,master、slave模式,谁做主,谁做从的问题,测试新项目时,最好先在现有已测试ok的项目上,测试以下以太网转接盒,是否好使,然后确保测试用的车载转工业以太网的转接盒是ok的,然后使用这个转接盒测试5192才会更有意义,否则不通的话,无法排除是转接盒的问题
3. 千兆以太网测试,需要注意,使用的一定是千兆的转接盒,注意master、slave模式,注意 N/P的线序(不确定的话,可以交叉试下);
4. 截至到2022、7、16号,5192的die1,需要通过die0进行使能,die1才能进行工作;
5. soc 的RGMII同Switch的RGMII连接后,发现发送的包全是bad的,ShowMIB ALL 7可以查看,
然后需要 配置 5192的 TX、RX delay,jtag配置命令如下:
ESUwrite Port_7 0x1 0xe03e,
6. die1的RGMII功能,需要通过配置命令开启:
ESUwrite 0x1b 0x1b 0x13fa
ESUwrite 0x1b 0x1a 0x8000
ESUwrite 0x1b 0x19 0xfce0
ESUwrite 0x7 0x00 0x0e07
且同样需要配置RGMII的tx/rx delay
ESUwrite Port_7 0x1 0xe03e,
7. marvell 88Q5192 的die0,通过spi访问,ReleaseNote中明确说明了 ,不支持Mode2、3
所以,同硬件确认,最好使用 spi mode0进行操作
操作时序,参考 Functional 的pdf文档 SPI Slave章节
8. 通过SMI 访问die1,需要同硬件确认 配置的是single mode还是multi mode,single mode 的话,5192内部的端口会被 开放到SMI总线上,作为smi devcie来操作
附:
jtag工具需要安装驱动,驱动文件《(11条消息) marvell88q519288q611388q5050jtag驱动文件-Linux文档类资源-CSDN文库》