1、      硬件调试

(1)switch芯片地址方式

确定switch在板子上是多芯片还是单芯片方案(即多址与单址),通过P10_ADDR[0~4]判断:[0~4]: 0b00000:为单芯片方案;其他为多芯片方案,最大支持31个switch级联。单芯片与多芯片在寄存器访问上有很大的区别,多芯片要复杂些。一般采用单芯片方案,hi3520a上的switch就是采用单芯片模式。

(2)switch端口模式

port10口连接CPU,hi3520a支持RGMII模式,因此需要在硬件上将该端口配置为RGMII模式!通过P10_MODE[0~2]判断:[0~2]:0b001为RGMII模式,0b000:GMI模式等,不同模式决定了时钟引脚不一样。

port9口也可以通过p9_MODE[0~2]来设置模式,此处连接光口,因此设置为[0~2]:0b101为1000BASE-X千兆模式

port8口只有一个引脚P8_MODE来设置模式,高电平为1000BASE-X模式,此处设置为该模式!

注:以上(1)(2)值是在复位时上升沿锁存进芯片内!曾有类似问题:复位引脚有电容导致复位上升沿时间变长则有可能地址发生变化。

(3)switch工作模式

通过引脚SW_MODE[0:1], 0b00:CPU mode, 0b01:reserved, 0b10: test mode, 0b11:EEPROM mode。CPU模式:需要通过软件配置switch;test模式:使用默认参数;EEPROM mode模式:从EEPROM中读取参数配置switch,当没有EEPROM时使用默认参数。一般使用test模式!

以上(1)(2)(3)三点是硬件上实现swtich必须要注意的,否则有可能导致switch无法正常工作,或者CPU无法访问switch!以下(4)(5)两点不一定会遇到,只是本项目使用光口遇到:

(4)光口电压控制

光口电压通过GPIO控制,电口则直接连接3.3V。电口测试没有问题,但是光口就是ping不同,一开始怀疑是光模块有问题,换了之后还是不行;然后怀疑是光纤有问题,换了之后还是不行,然后以为是电压没有控制好,未接光模块的情况下测量光口电压也是有3.3V的,但是接了光模块后电压就变为1V左右,最后发现是硬件的磁珠问题,把该器件去掉就好了!

(5)光模块丢帧

同样的测试环境电口不会有丢帧现象,而光口则丢帧比较严重!刚开始怀疑是测试环境导致(原先放在测试中心测试),而后发现自己位置上简单测试也会发生同样的丢帧。接着对比电口和光口的寄存器值,将两类不一样的寄存器值都读出来进行比较,发现基本是一样的,不一样的地方也不会有影响!然后去读取CPU的MAC寄存器,也未出现丢帧,错误帧等值!由于对switch不是很熟悉,一开始未注意到switch每个端口都可以统计进出网络包!统计各个口的接收数据包后发现光口进来的,到CPU出去的P10口,数据包增加的数值是相等的,然后查看发送另外一台设备发送的数据包,发现接收到的比发送的少!因此确定设备switch之间发生数据丢失,最终定位到是switch之间光检测模块导致!原因如下:光模块检测芯片的LOS检测信号引脚一面连接到CPU的GPIO上,另一面连接到switch的检测引脚上!LOS是输出引脚,由于CPU的GPIO未进行配置默认VOU1120_DATA的功能,从而影响了光模块检测芯片!最后将该引脚配置成GPIO输入即可!

2、      软件调试

(1)UBOOT修改

swtich有两种ID,一种是phy id,另外一种是product id。每个端口都有上述两类ID(M6097中port0~port10对应的phy地址为0~A,port0~port10对应的寄存器地址0x10~0x1A),phy地址获取phy id, port寄存器地址获取product id!此处使用product id作为switch id。如果使用phy id作为switch id则需要禁止M6097 PPU,否则无法正确读取phy id。另外如果禁止M6097的ppu就无法对switch外接的PHY进行操作。修改代码如下:

在uboot驱动的mdio.c中:get_phy_device()接口进行修改,禁止PPU,对phy id进行过滤,当获取到protduct ID时使能switch同CPU的端口port10,由于使用GRMII模式,还需要设置swtich的GRMII时序(重要)。

Uboot中网络驱动是针对phy进行读写的,通过读phy状态来配置CPU MAC控制器,PHY状态根据网线接入的网络不通而有所变化!但是switch同CPU始终相连接,不与PHY相连接,因此根据同CPU连接的switch端口属性强制配置CPU MAC控制器!此处设置:强制连接状态、配置成全双工,1000BASE-TX、使用RGMII接口!修改代码如下:

在stmmac.c中:stmmac_net_adjust_link()接口对各个属性接口里根据switch地址进行强制switch设置,最后设置RGMII模式。

(2)kernel修改

内核对switch的配置同uboot基本配置原理是一样的,只是驱动代码位置不一样而已!具体修改如下:

phy_device.c中get_phy_device接口对phy id进行过滤。

marvell.c中原来就已经修改该驱动,在修改的基础上mv6097_config_init接口中禁止PPU、强制设置swtich配置,设置swtich的GRMII时序(重要)! switch_read_status接口中强制CPU连接状态、配置成全双工,1000BASE-TX。

总之就是同时配置switch和CPU MAC控制器,使两者保持一致的模式。

基于M6097 switch的STP协议调试方法相关推荐

  1. Java基于socket服务实现UDP协议的方法

    转载自 Java基于socket服务实现UDP协议的方法 这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧, ...

  2. SOM-TL138F基于GDB和GDBServer的远程调试方法

    1前言 表 1 开发板型号 是否支持本实验 TL437x-EVM 支持 TL437x-EasyEVM 支持 TL437x-IDK 支持 TL437xF-EVM 支持 操作环境: Ubuntu 14. ...

  3. 基于汽车CAN总线专有协议OBD接口的调试方法及经验

    ? 来源:网络收藏? 时间:2016-12-15 就汽车协议调试来说,行业里的人,不会去做,只有个人爱好者去做,某宝上就有.因为车厂指令不同,硬件产品都不一样.有调试方法,把OBD总线上的数据抓下来, ...

  4. 采用MATLAB的DSP调试方法

    本文结合具体例证,介绍基于MATLAB 的DSP 应用程序调试方法. MATLAB 具有强大的分析.计算和可视化功能,利用MATLAB 提供的数十个专业工具箱,可以方便.灵活地实现对自动控制.信号处理 ...

  5. android的反调试方法,Android平台融合多特征的APP反调试方法与流程

    本发明涉及Android平台融合多特征的APP反调试方法,属于计算机与信息科学技术领域. 背景技术: 应用程序本身并不具备反调试的功能,但是动态调试是动态分析应用逻辑.动态脱壳等攻击方式所采取的必要手 ...

  6. linux系统c 如何使用教程,基于Linux操作系统的C语言编译和调试方法解析

    摘 要:文章先介绍了GCC编译器相关内容,包括GCC编译程序和GCC编译选项,随后介绍了GDB调试程序相关内容,包括GDB具体操作和GDB基础命令,最后介绍了C语言编写中的注意事项,希望能给相关人士提 ...

  7. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  8. 一种基于STM32F4的字库及图片下载方法

    一 .概述 目前,越来越多的应用需要扩展外部的Flash来满足存储需求,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作.在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数 ...

  9. Linux内核调试方法总结

    [转]Linux内核调试方法总结 目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG ...

  10. LLDP协议、STP协议 笔记

    参考: 数据链路层学习之LLDP 生成树协议 LLDP协议.STP协议 笔记 LLDP 提出背景: 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加 ...

最新文章

  1. 关于60枚一分两分五分硬币凑成一块钱的解决方法
  2. 我的Android进阶之旅------gt;Android中通过adb shell input来模拟滑动、按键、点击事件...
  3. 不会自动更新了_手机老是自动更新系统?不想频繁更新,不同手机怎么设置好?...
  4. ActiveMQ点对点消息通信demo
  5. N使用exus2打造企业maven仓库(三)
  6. grads 相关系数_教程合集 | Grads数据处理基础
  7. .NET Core Love gRPC
  8. django:资源网站汇总
  9. pageResponse - 让H5适配移动设备全家(移动端适配)
  10. MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记
  11. php 安装mysql扩展注意事项
  12. Django框架(三)-- orm增删改查、Django生命周期
  13. 【看动漫学编程】程序员在异世界生个娃 第3篇:搞不好我就是个王者
  14. java对文件进行md5加密,对文件进行 MD5 加密
  15. 软件测试PC端web通用测试用例
  16. 打破次元壁,让游戏角色在指尖跳舞,简易的 AR 教程
  17. 《Beyond Part Models: Person Retrieval with Refined Part Pooling 》PCB论文解读
  18. Packet Tracer - 在 WLC 上配置基本的 WLAN
  19. chrome、Firefox、IE浏览器和驱动下载地址
  20. 生信工作流框架搭建 | 从零开始入门指南 - 00工作流之华山论剑

热门文章

  1. bzoj 1861 treap
  2. 【C#】Skip和Tack方法实现分页
  3. 二维数组按某个键值排序 FOR PHP
  4. 火狐中jq的attr出现的bug问题用prop代替
  5. void指针(void*)用法
  6. spring容器启动的加载过程(三)
  7. java 按字节读文件_JAVA按字节读取文件的简单实例
  8. 四种插入数据的MySQL语句比较
  9. Zen Cart 如何添加地址栏上的小图标
  10. Linux文件传输与mysql数据库安装