存档2022年3月30日

飞腾平台Can总线验证方法

介绍飞腾平台下如何验证与使用can总线的方法

验证环境:D2000平台、 CAN协议分析仪

1 安装can命令

apt-get update && apt-get install git   

cd /tmp   

git clone https://github.com/linux-can/can-utils.git   

cd can-utils/   

make   

make install

2 can 接口验证方法

1. 先配置复用寄存器为CAN0CAN1CAN2总线功能

 

2. 设置总线波特率,并开启CAN总线

 

3. 飞腾CAN0接收数据,CAN分析仪CAN1发送数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

4. 飞腾CAN0发送数据,CAN分析仪CAN1接收数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

 

 

1. 飞腾CAN0发送数据,CAN分析仪CAN1接收数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

飞腾平台下访问GMAC-PHY的方法

linux 系统下操作PHY读写方式

本文简单介绍使用源码编译,通过mdio方式操作PHY寄存器

1 获取源码

代码已经上传,可自行下载,另外可以下载我已经编译好的文件直接使用。

2 编译源码

编译命令:gcc mdio.c -o mdio

3赋予权限

chmod a+x mdio

4 查看网口

通过ifconfig -a命令查看你想要操作的网口,保存网口名,在后续会使用到

5读取phy ID示例

./mdio

mdio:

read operation: mdio reg_addr

write operation: mdio reg_addr value

For example:

mdio eth0 1

mdio eth0 0 0x12

例如要查看phy id 

 ./mdio enaphyt4i0 3

将会返回获取的值

 

介绍操作裕泰PHY的方法:

首先读取查看phy手册,可以指导PHY访问有多种方式

YT PHY 内部有三种类型的寄存器:MII 寄存器(MII register,以下简写为 mii_reg),扩展寄存器(extended register,以下简写为 ext_reg)和 MMD 寄存器(简写为 mmd_reg
mii_reg: 寄存器地址为 0~0x1f,遵从 802.3 clause 22 的标准定义方式进行访问。其 MDC/MDIO 协议如下:

ext_reg: 由于 mii_reg 只有 0~0x1f,即 32 个。不能满足产品对寄存器数目的要求,就通过访问两个 mii_reg 0x1e, 0x1f 来扩展了更多的寄存器。访问方式为:
将要访问的 ext_reg 地址,写入 mii_reg 0x1e.
mii_reg 0x1f 得到值,即为 ext_reg 内的值. 写值到 mii_reg 0x1f,即将 ext_reg 寄存器内容改为写入的值.
例如:读取 ext_reg0x1000 的值:write mii_reg0x1e 0x1000;
read mii_reg0x1f;
ext_reg0x1000 的值为 0x3456
write mii_reg0x1e 0x1000;
write mii_reg0x1f 0x3456; 

mmd_reg: 为了扩展更多的寄存器,以适应更高速率的以太网。MMD 寄存器被创造出来。遵从 802.3 clause
45 的标准定义方式进行访问。MMD 寄存器有两种访问方式:间接访问和直接访问。
直接访问:其协议与 MII 访问不同,它是通过两条指令实现 MMD 寄存器的读或写,即先发 address 指令,
再发 Write Read 指令实现,具体协议如下:
间接访问:即通过 MII 寄存器(mii_reg 0xd, mii_reg 0xe,其具体含义见下表)来访问 MMD 寄存器。比如:
MMD 3 0x5 寄存器,其指令为:
write mii_reg 0xd 0x3; write mii_reg 0xe 0x5; write mii_reg 0xd 0x4003; read mii_reg 0xe
MMD 7 0x3c 寄存器值为 0x6,其指令为:
write mii_reg 0xd 0x7; write mii_reg 0xe 0x3c; write mii_reg 0xd 0x4007; write mii_reg 0xe 0x6
以上文档从官方手册中摘取
接下来要实现对PHY配置 主要验证phy Template(电口指标)配置
初始化:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x41 to 0x4
write_utp_ext_reg0x42 to 0x8
write_utp_ext_reg0x43 to 0xc
write_utp_ext_reg0x44 to 0x10
write_utp_ext_reg0x45 to 0x10
write_utp_ext_reg0x46 to 0x10
write_utp_ext_reg0x47 to 0x10
write_utp_ext_reg0x4a to 0x1180
1000BT:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x27: 0x2026
write_utp_mii_reg0x10: 0x2
write_utp_mii_ reg0x0: 0x8140
Test Mode 1Transmit waveform test
write_utp_mii_reg0x9: 0x2200
write_utp_mii_reg0x0: 0x8140
Test Mode 2Transmit Jitter test (master mode)
write_utp_mii_reg0x9: 0x5a00
write_utp_mii_reg0x0: 0x8140
Test Mode 3Transmit Jitter test (slave mode)
write_utp_mii_reg0x9: 0x7200
write_utp_mii_ reg0x0: 0x8140
Test Mode 4Transmit distortion test
write_utp_mii_reg0x9: 0x8200
write_utp_mii_ reg0x0: 0x8140 

将访问方式通过间接访问操作 ext寄存器。
写了一个脚本 

#!/bin/bash
#参考此处进行配置 举例配置了PHY 0x41 值为2 并再次把值都出来。
echo 初始化
./mdio enaphyt4i0 0x1e 0xa000
./mdio enaphyt4i0 0x1f 0x0
./mdio enaphyt4i0 0x1e 0x41
./mdio enaphyt4i0 0x1f 0x4
./mdio enaphyt4i0 0x1e 0x42
./mdio enaphyt4i0 0x1f 0x8
./mdio enaphyt4i0 0x1e 0x43
./mdio enaphyt4i0 0x1f 0xc
./mdio enaphyt4i0 0x1e 0x44
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x45
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x46
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x47
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x4a
./mdio enaphyt4i0 0x1f 0x1180
echo 1000bt
#1000BT
./mdio enaphyt4i0 0x1e 0x27
./mdio enaphyt4i0 0x1f 0x2026
echo test mode1
    #test mode1
./mdio enaphyt4i0 0x10 0x2
./mdio enaphyt4i0 0x0 0x8140
./mdio enaphyt4i0 0x9 0x2200
./mdio enaphyt4i0 0x0  0x8140
echo test end