当前位置: 首页 > news >正文

ZYNQ RTL8211F 网口调试

网口调试报错:

-----lwIP Socket Mode Echo server Demo Application ------
Board IP: 192.168.1.10
Netmask : 255.255.255.0
Gateway : 192.168.1.1
Start PHY autonegotiation
Waiting for PHY to complete autonegotiation.

[10:23:38.828]收←◆autonegotiation complete
Phy setup error
Assert due to phy setup failure

在代码get_IEEE_phy_speed里添加如下:

u16 phy_id1, phy_id2; /* 添加PHY ID读取和打印 */ XEmacPs_PhyRead(xemacpsp, phy_addr, 2, &phy_id1); XEmacPs_PhyRead(xemacpsp, phy_addr, 3, &phy_id2); xil_printf("[DEBUG] PHY ID1: 0x%04X, ID2: 0x%04X, Addr: %d\r\n", phy_id1, phy_id2, phy_addr);

打印ID结果为:

[DEBUG] PHY ID1: 0x001C, ID2: 0xC916, Addr: 0

证实网口phy芯片为Realtek工业级,和工业级的寄存器地址不一样,所以需要更改驱动,详细信息可以参考如下博客:https://blog.csdn.net/weixin_43260537/article/details/144540367

使用代码如下后,工作正常:

static u32_t get_Realtek_phy_speed(XEmacPs *xemacpsp, u32_t phy_addr) { u16_t control; u16_t status; u16_t status_speed; u32_t timeout_counter = 0; u32_t temp_speed; u16_t phy_identity; u32_t RetStatus; u32_t RTL_SPECIFIC_STATUS_REG; u32_t RTL_LINK_STATUS_MASK; u32_t RTL_SPEED_MASK; u32_t RTL_SPEED_1000; u32_t RTL_SPEED_100; //此处判断是RTL8211F或RTL8211E,根据型号重定义寄存器地址和掩码 XEmacPs_PhyRead(xemacpsp, phy_addr, PHY_IDENTIFIER_2_REG, &phy_identity); if (phy_identity == 0XC916) { xil_printf("Start PHY:RTL8211F autonegotiation\r\n"); RTL_SPECIFIC_STATUS_REG = 0X1A; RTL_LINK_STATUS_MASK = 0x04; RTL_SPEED_MASK = 0x30; RTL_SPEED_1000 = 0x20; RTL_SPEED_100 = 0x10; } else if (phy_identity == 0XC915) { xil_printf("Start PHY:RTL8211E autonegotiation\r\n"); RTL_SPECIFIC_STATUS_REG = 0X0011; RTL_LINK_STATUS_MASK = 0x0400; RTL_SPEED_MASK = 0xC000; RTL_SPEED_1000 = 0x8000; RTL_SPEED_100 = 0x4000; } XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, &control); control |= IEEE_ASYMMETRIC_PAUSE_MASK; control |= IEEE_PAUSE_MASK; control |= ADVERTISE_100; control |= ADVERTISE_10; XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, control); XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET, &control); control |= ADVERTISE_1000; XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET, control); XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control); control |= IEEE_CTRL_AUTONEGOTIATE_ENABLE; control |= IEEE_STAT_AUTONEGOTIATE_RESTART; XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control); XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control); control |= IEEE_CTRL_RESET_MASK; XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control); while (1) { XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control); if (control & IEEE_CTRL_RESET_MASK) continue; else break; } XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status); xil_printf("Waiting for PHY to complete autonegotiation.\r\n"); while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) { sleep(1); timeout_counter++; if (timeout_counter == 5) { xil_printf("Auto negotiation error \r\n"); return XST_FAILURE; } XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status); } xil_printf("autonegotiation complete \r\n"); //此处使用重定义的寄存器地址和掩码 XEmacPs_PhyRead(xemacpsp, phy_addr,RTL_SPECIFIC_STATUS_REG, &status_speed); if (status_speed & RTL_LINK_STATUS_MASK) { temp_speed = status_speed & RTL_SPEED_MASK; if (temp_speed == RTL_SPEED_1000) return 1000; else if(temp_speed == RTL_SPEED_100) return 100; else return 10; } return XST_FAILURE; }

http://www.cnnetsun.cn/news/1270113.html

相关文章:

  • ASA推广可靠的供应商
  • 正则化:给模型加上“紧箍咒“-小白也能学会的AI概念
  • AIGlasses OS Pro优化技巧:提升FPS的实用方法,视频流处理更流畅
  • WeKnora安全审计:基于RBAC的权限管理系统
  • 使用LangChain构建HY-Motion 1.0智能动作编排系统
  • Finereport 帆软报表中高效创建多级目录文件夹的实用指南
  • Z-Image-Turbo-辉夜巫女商业探索:非商用同人展会周边设计素材AI辅助生成
  • 42多时段含DG的配电网时序无功优化程序——基于改进遗传算法的中压配电网电压调控优化主程序
  • CentOS 7 部署ChatTTS实战:从环境配置到性能调优
  • FireRedASR Pro跨平台开发实战:.NET桌面应用集成
  • Hunyuan-MT-7B翻译模型实战应用:快速搭建多语言文档翻译工具
  • MySQL 批量删除海量数据的几种方法
  • QWEN-AUDIO声学细节展示:停顿、重音、语调拐点等韵律特征还原
  • 大厂量产充电桩模块全套资料:原理图、PCB、源代码及三相PFC程序参数详解
  • CAN总线入门:手把手教你解析数据帧和远程帧(含DLC段详解)
  • JAVA实习生问:为什么项目不用VO?
  • 基于YOLOv26与EL成像的光伏板隐裂无人机巡检系统
  • MCP协议真比REST快3.8倍?揭秘TCP层优化、二进制序列化与服务发现协同机制:一线大厂高并发场景实证分析
  • CompressO:革命性智能压缩工具,让视频文件体积锐减93%的开源解决方案
  • 革新性Markdown浏览器工具:如何无缝提升文档处理效率
  • 基于PHP的GEO排名优化系统源码,适合快速开发应用
  • Realistic Vision V5.1在市场调研中的应用:消费者原型写实形象构建
  • 深入解析Synopsys DW_apb_i2c的I2C协议与多模式通信机制
  • 【数据可视化-168】2025年山东GDP大比拼 - 可视化大屏分析
  • 避开这些坑!用C#发送邮件验证码的5个常见错误及解决方案
  • COMSOL频域仿真进阶:超声相控阵动态聚焦与参数化扫描实战
  • ROS1老项目迁移必备:5分钟搞定ROS2环境下的bag包转换(附常见报错解决方案)
  • Qwen3-ASR-1.7B在客服场景中的应用:智能语音助手落地案例
  • 春联生成模型-中文-base效果展示:十组关键词生成惊艳对联案例
  • pip 安装编译时调用其他编译器(如mingw64),无需安装MSVC