【Hi3566V100】AUTO-PHY 调试

关键字 :HisiliconAutoNXP

一、前言

       最近在调试 Defensor 项目的 AUTO-PHY,发现在 Hi3566V100 这个平台的 PHY 调试有点特别,在这里给大家分享 Hi3566V100 平台上 PHY 的调试过程,使用的 SDK 版本是 Hi3562V100_MobileCam_SDK_V2.0.0.2。

 

 

二、硬件平台环境

2.1 原理图

       我们用的 AUTO-PHY 型号是 NXP 的 TJA1101,连接方式如下面的 Defensor 方案框图,通信接口为 MDIO,数据接口为 RMII:

图 2.1 Defensor 框图

       对接 TJA1101 的原理图如下图所示,使用的是 25M 外部晶振,3.3V 独立电源供电:



图 2.2 TJA1101 对接原理图

      

2.2 晶振波形

       测量晶振的波形如下:

图2.3 晶振波形

     

       从图中可以看出晶振的频率是 25M 左右,振幅是 1.8V 左右 ,都符合预期结果,可以确认晶振输出的波形正常无误,接下来进行软件驱动的配置。

      

 

三、TJA1101 驱动移植

3.1 在 Kernel 配置 .config

       打开 CONFIG_HISI_FEMAC 和 CONFIG_ETHERNET 的定义:

图 3.1 配置 .config

       把 TJA1101 的驱动放到 ./driver/net/phy/ 目录下,在 Makefile 中添加 TJA1101 驱动的编译,然后在 Kconfig 中添加 CONFIG_TJA1101_PHY 定义,

重新编译即可在 Kernel 的 menuconfig 中找到 CONFIG_TJA1101_PHY 这个定义,打开该定义即可安装驱动:

图 3.2 安装驱动

 

3.2 修改设备地址

       一开始说过,Hi3566 这个平台调 PHY 有点特别,就是因为识别设备的时候就要先把设备的地址写对,不然是无法识别到 PHY 设备的,因为 Hi3566 平台的 MDIO 总线只会根据你输入的地址发一次读设备寄存器的命令,而 Kernel 的 MDIO 总线驱动是会在 0-31 这 32 个地址里面循环读寄存器。

因此我们马上就需要修改 PHY 的地址,我们硬件上把 PHYAD2 和 PHYAD1 设为了 01,根据 TJA1101 的规格书,其他地址位都默认为 0,所以 PHY 的地址可以确定为 2。然后在 dts 文件中修改 PHY 的 reg 为2 即可。

图 3.3 设置 PHY 地址

 

3.3 查看 MDIO 信号

     接下来测量一下 MDIO 发出的信号正不正确,在这之前,我们需要先了解 MDIO 的通信协议,如下图:


图 3.4 MDIO 读数据时序图



图 3.5 MDIO 写数据时序图

MDIO 的时序可以拆分为以下几部分:

  • Preamble+Start32bits的前导码以及2bit的开始位。
  • OP 2bits 的操作码,10 表示读,01 表示写。
  • PHYAD5bits 的 PHY 地址,一般 PHY 地址从 0 开始顺序编号。
  • REGAD5bits 的寄存器地址,即要读或写的寄存器。
  • Turn Around2bits 的 TA,在读命令中,MDIO 在此时由 MAC 驱动改为 PHY 驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要 MDIO 方向发生变化,则只是等待两个时钟周期准备写入数据。
  • Data16bits 数据,在读命令中,PHY 芯片将读到的对应 PHYAD 的 REGAD 寄存器的数据写到 Data 中,在写命令中,MAC 将要写入对应 PHYAD 的 REGAD 寄存器的值写入 Data 中。
  • Idle空闲状态,此时 MDIO 无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平,上拉电阻一般为 1.5K。

了解了 MDIO 的时序后,再来测量 MDIO 初始化时的波形,首先来看看如果我们不将设备地址改为 2 会得到怎样的波形:

图 3.6 读设备地址1 的波形图

       由波形结合 MDIO 通信协议可以看出,SOC 端首先发送了一个读地址为 1 的设备的第二个寄存器的命令,然后就一直在等待数据回传,没有再去扫描其他地址的设备,这就是为什么一定要把设备地址先设置正确的原因。接下来把设备地址设为 2 后再来看看波形是怎样的:



图 3.7 MDIO 波形

     

       由波形结合 MDIO 通信协议可以看出,SOC 端首先发送了一个读地址为 2 的设备的第二个寄存器的命令,隔了 2bits 的 TA 后,也看到有数据返回了,TJA1101 的设备 ID 存放在寄存器 2 和 3 里,所以经验证该命令是准确无误的,后面还会紧接着发送一个读寄存器 3 的命令。

 

四、结果验证

MDIO 波形已经发送无误,接下来测试一下能否在系统中检测到 PHY 设备:

图 4.1 检测 PHY 设备

 

       可以看出,TJA1101 已经挂载到 MDIO 总线上,设备 ID 也成功读取出来,接下来把两块 Defensor 的网口接起来,把其中一块板设置为 Master,一块设置为 Slave,并配置好两块板的 IP 地址,尝试互 ping:

图 4.2 互相 ping 通

       从图中可以看出,其中一块 Defensor 成功 ping 通了另一块,TJA1101 的调试顺利完成。



五、附件

如有需要 TJA1101 驱动的朋友可以到以下链接自取:https://pan.baidu.com/s/1QL05Vzct4RVMDS6R0Ff5UA

提取码:mawg

 

参考资料:

【1】《外围设备驱动操作指南.doc》

【2】《ds444001 - Preliminary data sheet TJA1101 (0.1).pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★博文作者未开放评论功能