当前位置:网站首页>88Q2110 access C45 phy address through C22
88Q2110 access C45 phy address through C22
2022-08-11 01:41:00 【Wang Erche】
问题现象
MTK T800平台,内核版本4.19.98,使用两片88Q2110芯片,分别RGMII和SGMII,drive identificationphy id失败:
DTS配置
88Q2110支持C45和C22访问:
phy idThe resistors are not soldered,默认地址0:
C22访问寄存器
Configuration and driver use by defaultC45访问寄存器,但使用C45读phy id失败,改为C22访问寄存器:
使用C22way by accessing external registers13和14读写寄存器:
C45读寄存器:
I don't understand how it works.
static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
u32 *devices_in_package)
{
int phy_reg, reg_addr;
reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS2;
phy_reg = mdiobus_read(bus, addr, reg_addr);
if (phy_reg < 0)
return -EIO;
*devices_in_package = (phy_reg & 0xffff) << 16;
reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS1;
phy_reg = mdiobus_read(bus, addr, reg_addr);
if (phy_reg < 0)
return -EIO;
*devices_in_package |= (phy_reg & 0xffff);
return 0;
}
C22读寄存器:
static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
u32 *devices_in_package)
{
int phy_reg, reg_addr;
mdiobus_write(bus, addr, 0xd, 0x0001);
mdiobus_write(bus, addr, 0xe, 0x0002);
mdiobus_write(bus, addr, 0xd, 0x4001);
phy_reg = mdiobus_read(bus, addr, 0xe);
printk("PHY_REG = %x\n",phy_reg);
if (phy_reg < 0)
return -EIO;
*devices_in_package = (phy_reg & 0xffff) << 16;
mdiobus_write(bus, addr, 0xd, 0x0001);
mdiobus_write(bus, addr, 0xe, 0x0003);
mdiobus_write(bus, addr, 0xd, 0x4001);
phy_reg = mdiobus_read(bus, addr, 0xe);
if (phy_reg < 0)
return -EIO;
*devices_in_package |= (phy_reg & 0xffff);
printk("phy IDDDD = %x\n",*devices_in_package);
return 0;
}
步骤:
mdiobus_write(bus, addr, 0xd, 0x0001);
1、先写寄存器13(0xd),写00到bit[15:14]表示00=Address地址功能,写1到bit[4:0]表示设备地址.
mdiobus_write(bus, addr, 0xe, 0x0002);
2、后写寄存器14(0xe),写0x0002到bit[15:0]表示寄存器地址,Represents a read deviceID
mdiobus_write(bus, addr, 0xd, 0x4001);
3、写寄存器13(0xd),写01到[15:14]Indicates the function of reading and writing data from registers,写1到bit[4:0]表示设备地址.
phy_reg = mdiobus_read(bus, addr, 0xe);
4、读寄存器14(0xe),返回寄存器0x0002的数据.
获取到设备ID数据是0x2B,
0x0003Register read is yes0x0982,10,011000 ,0010,对应0x02,0x18,0x2.The revision number is 2,This is a one-to-one correspondence.
寄存器操作命令
yikeSupport customers to set and read by reading and writing filesPHY寄存器,具体命令格式如下.
(1)Read the register with the following command:
echo 协议类型r 寄存器地址 > /sys/devices/platform/11021000.ethernet/stmmac
例如:通过clause22Protocol read registers0x1:
echo cl22r 1 > /sys/devices/platform/soc/1101a000.eth/stmmac
(2)Write the register by the following command:
echo 协议类型w 寄存器地址 value > /sys/devices/platform/11021000.ethernet/stmmac
例如:通过clause22Protocol write register0x0值为0x5040
echo cl22w 0 0x5040 > /sys/devices/platform/11021000.ethernet/stmmac
以realtek8211F PHY为例,
(1)设置phy为loopback模式:
echo cl22r 0 > /sys/devices/platform/11021000.ethernet/stmmac (读出 PHY register0的值)
echo cl45r 1 0x834 > /sys/devices/platform/11021000.ethernet/stmmac(c45读方式)
echo cl22w 0 xxx > /sys/devices/platform/11021000.ethernet/stmmac (xxx:为上一步register0读出的值,将bit14置1the hexadecimal value after)
echo cl45w 1 0x834 0x8001 > /sys/devices/platform/11021000.ethernet/stmmac
(2)复位phy,进行reset:
echo cl22r 0 > /sys/devices/platform/11021000.ethernet/stmmac (读出 PHY register0的值)
echo cl22w 0 0x9040> /sys/devices/platform/11021000.ethernet/stmmac (xxx:为上一步register0读出的值,将bit15置1the hexadecimal value after)
疑问:为何T800使用C45I can't read itID呢?
边栏推荐
- Elastic scaling of construction resources
- 【微波工程学习记录1】功率分配器和定向耦合器
- 【ASM】字节码操作 ClassWriter COMPUTE_FRAMES 的作用 与 visitMaxs 的关系
- 深度解析:什么是太爱速M抢单模式?
- 21. Aliyun oss
- php 判断数组是否为多维数组
- 【Video】Report Sharing | 2021 Insurance Industry Digital Insights
- SystemVerilog: Verifying knowledge bits and pieces
- Sigma development pays attention to details
- Successfully resolved raise TypeError('Unexpected feature_names type')TypeError: Unexpected feature_names type
猜你喜欢
随机推荐
成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘
还在用 Xshell?你 out 了,推荐一个更现代的终端连接工具,好用到爆!
How to check if the online query suddenly slows down
15 DOM 扩展
络达开发---自定义BLE服务(二):功能实现
SAP ABAP JSON 格式数据处理
两日总结十
The latest domestic power supply manufacturers and pin-to-pin replacement manuals for specific models are released
单片机人机交互--矩阵按键
生信实验记录(part3)--scipy.spatial.distance_matrix
C# WebBrower1控件可编辑模式保存时会提示“该文档已被修改,是否保存修改结果”
版本号大小的判断方法
Pico 4更多参数曝光:Pancake+彩色透视,还有Pro版本
Apache Commons Configuration Remote Code Execution Vulnerability (CVE-2022-33980) Analysis & Reproduction
vim simple save window id
【微波工程学习记录1】功率分配器和定向耦合器
两日总结十一
How to convert url to obj or obj to url
本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统
【21天学习挑战赛】折半插入排序