0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

以太网PHY硬件连接 以太网PHY驱动软件配置介绍

瑞萨嵌入式小百科 来源:瑞萨嵌入式小百科 作者:瑞萨嵌入式小百科 2024-02-20 12:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以太网PHY驱动软件配置

这里以Renesas提供的RZ/T2M工程样例“RZT2M_EtherCAT_RSK_rev0100”为例对PHY驱动的软件配置流程进行说明。此工程样例可以在Renesas提供的开发版上运行和调试。开发套件的使用文件《r20ut4939eg0050-rskrzt2m-usermanual_c.pdf》可以上Renesas官方网站上获取,开发板也可以申请购买或者是借用。

驱动配置的入口

void hal_entry (void)
{
  fsp_err_t err;
  /* TODO: add your own code here */
  /* Initialize EtherCAT SSC Port */
  err = RM_ETHERCAT_SSC_PORT_Open(gp_ethercat_ssc_port->p_ctrl, gp_ethercat_ssc_port->p_cfg);
  if(FSP_SUCCESS != err)
  {
    __BKPT(0); /* Can't continue the stack */
  }
  ...
}

进入RM_ETHERCAT_SSC_PORT_Open(), 这个EtherCAT接口配置函数之后,可以看到EtherCAT Slave Controller的一些初始化配置,其中就包括了PHY的初始化:

/* Open Ether-Phy Driver */
for (i = 0; BSP_FEATURE_ESC_MAX_PORTS > i; i++)
{
  p_ether_PHY_instance = (ether_PHY_instance_t *) p_extend->p_ether_PHY_instance[i];
  if (NULL != p_ether_PHY_instance)
  {
    err = p_ether_PHY_instance->p_api->open(p_ether_PHY_instance->p_ctrl, p_ether_PHY_instance->p_cfg);
  }
  if (FSP_SUCCESS == err)
  {
    opened_PHY[i] = 1;
  }
  else
  {
    break;
  }
}

PHY驱动配置相关数据结构解析

这里初始化的一个PHY实例是:

p_ether_PHY_instance,它是一个ether_PHY_instance_t类型的变量。

typedef struct st_ether_PHY_instance
{
  ether_PHY_ctrl_t   * p_ctrl;  ///< Pointer to the control structure for this instance
    ether_PHY_cfg_t const * p_cfg;     ///< Pointer to the configuration structure for this instance
    ether_PHY_api_t const * p_api;     ///< Pointer to the API structure for this instance
} ether_PHY_instance_t;

其中ether_PHY_ctrl_t是指向PHY实例的控制结构体;

ether_PHY_cfg_t是指向实例配置的结构体指针;

ether_PHY_api_t是实例配置过程中需要调用到的函数方法所组成的结构体指针;

这个PHY的实例是在调用RM_ETHERCAT_SSC_PORT_Open()函数的时候形参传递进来的,也就是gp_ethercat_ssc_port。

ethercat_ssc_port_instance_t const * gp_ethercat_ssc_port = &g_ethercat_ssc_port0;

而gp_ethercat_ssc_port这个ethercat_ssc_port_instance_t类型的全局指针是指向一个常量,也就是下面代码中的g_ethercat_ssc_port0。

/* Instance structure to use this module. */
const ethercat_ssc_port_instance_t g_ethercat_ssc_port0 =
{
  .p_ctrl    = &g_ethercat_ssc_port0_ctrl,
  .p_cfg     = &g_ethercat_ssc_port0_cfg,
  .p_api     = &g_ethercat_ssc_port_on_ethercat_ssc_port
};

可以看到g_ethercat_ssc_port0是一个常量结构体,它的成员变量分别是:

g_ethercat_ssc_port0_ctrl指向ethercat_ssc_port0控制结构体指针;

g_ethercat_ssc_port0_cfg指向ethercat_ssc_port0配置结构体指针;

g_ethercat_ssc_port_on_ethercat_ssc_port指向ethercat_ssc_port0配置方法的结构指针。

看到这里是不是有一种似成相识的感觉?g_ethercat_ssc_port0是对ethercat_ssc_port0这个外设的驱动的描述体,与前面PHY驱运的描述体“p_ether_PHY_instance”结构上很相似,其实工程样例中所有的外设驱动都可以使用类似的结构体去完成相应的初始化。比如说timer驱动描述结构体:

/** This structure encompasses everything that is needed to use an instance of this interface. */
typedef struct st_timer_instance
{
  timer_ctrl_t   * p_ctrl;    ///< Pointer to the control structure for this instance
    timer_cfg_t const * p_cfg;         ///< Pointer to the configuration structure for this instance
    timer_api_t const * p_api;         ///< Pointer to the API structure for this instance
} timer_instance_t;

这种相似的驱动描述体其实就是工程样例驱动代码部分的大致框架所在,撑握了这个脉络即可以方便的看懂其它外设驱动的代码,也可以在以后的驱动开发过程中参考这种框架,提升代的通用性和可读性。

我们知道PHY的驱动是ethercat_ssc_port0外设驱动的子模块。因为要在RZ/T2M这个芯片上使能EtherCAT功能块,除了要完成芯片本身相关外设的初始化之外,还要完成与之对应的PHY的初始化。那么两者是如何关联在一起的呢?我们继续解读g_ethercat_ssc_port0这个全局结构体。可以看到g_ethercat_ssc_port0_cfg所指向的内容是配置ethercat_ssc_port0的描述体,如下所示:

/** Configuration parameters. */
typedef struct st_ethercat_ssc_port_cfg
{
  uint32_t reset_hold_time;                    ///< PHY Reset signal hold time (ms)
    uint32_t reset_wait_time;                                        ///< Wait time after PHY reset relase (us)
    uint32_t offset_address;                                         ///< PHY offset PHYsical address


    IRQn_Type esc_cat_irq;                                           ///< EtherCAT IRQ interrupt number
    uint8_t   esc_cat_ipl;                                           ///< EtherCAT interrupt priority


    IRQn_Type esc_sync0_irq;                                    ///< EtherCAT Sync0 IRQ interrupt number
    uint8_t   esc_sync0_ipl;                                         ///< EtherCAT Sync0 interrupt priority


    IRQn_Type esc_sync1_irq;                                    ///< EtherCAT Sync1 IRQ interrupt number
    uint8_t   esc_sync1_ipl;                                         ///< EtherCAT Sync1 interrupt priority
                                                                          ///< Callback provided when an ISR occurs
    void (* p_callback)(ethercat_ssc_port_callback_args_t * p_args); 


    timer_instance_t const * p_timer_instance;                   ///< Pointer to Timer instance


    /** Placeholder for user data.  Passed to the user callback in ethercat_ssc_port_callback_args_t. */
    void const * p_context;
    void const * p_extend;                                           ///< Placeholder for user extension.
} ethercat_ssc_port_cfg_t;

对PHY的复位信号保持时间有描述,还有对EtherCAT中断有作描述,在此不展开讨论。其中p_extend成员是用户用于扩展控制的占位符。这也正是PHY驱动与ethercat_ssc_port0驱动关联的关键所在。代码赋于这个占位符是一个指向扩展配置的结构体指针。具体可以看看这个结构体的内容如下:

/** Extended configuration */
typedef struct s_ethercat_ssc_port_extend_cfg
{
  ethercat_ssc_port_eeprom_size_t eeprom_size;             ///< EEPROM memory size
    ethercat_ssc_port_txc_delay_t   txc0;                                         ///< Port 0 TXC delay time
    ethercat_ssc_port_txc_delay_t   txc1;                                         ///< Port 1 TXC delay time
    ethercat_ssc_port_txc_delay_t   txc2;                                         ///< Port 2 TXC delay time


    ether_PHY_instance_t const * p_ether_PHY_instance[BSP_FEATURE_ESC_MAX_PORTS]; 
///< Pointer to ETHER_PHY instance
} ethercat_ssc_port_extend_cfg_t;
const ethercat_ssc_port_extend_cfg_t g_ethercat_ssc_port0_ext_cfg =
{
    .eeprom_size             = ETHERCAT_SSC_PORT_EEPROM_SIZE_UNDER_32KBIT,
    .txc0                    = ETHERCAT_SSC_PORT_TXC_DELAY_00NS,
    .txc1                    = ETHERCAT_SSC_PORT_TXC_DELAY_00NS,
    .txc2                    = ETHERCAT_SSC_PORT_TXC_DELAY_00NS,
    .p_ether_PHY_instance[0] =
#define FSP_NOT_DEFINED (1)
#if (FSP_NOT_DEFINED == g_ether_PHY0)
                    NULL,
#else
                    &g_ether_PHY0,
#endif
    .p_ether_PHY_instance[1] =
#if (FSP_NOT_DEFINED == g_ether_PHY1)
                    NULL,
#else
                    &g_ether_PHY1,
#endif
    .p_ether_PHY_instance[2] =
#if (FSP_NOT_DEFINED == FSP_NOT_DEFINED)
                    NULL,
#else
                    &FSP_NOT_DEFINED,
#endif
};

里面就对应有ether_PHY_instance_t类体的初始化值,这值的类型正好是PHY实例所对应的描体结构体如下代码所示,所以关联就产生了。

typedef struct st_ether_PHY_instance
{
  ether_PHY_ctrl_t   * p_ctrl;  ///< Pointer to the control structure for this instance
    ether_PHY_cfg_t const * p_cfg;     ///< Pointer to the configuration structure for this instance
    ether_PHY_api_t const * p_api;     ///< Pointer to the API structure for this instance
} wh wether_PHY_instance_t;





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    54

    文章

    9012

    浏览量

    153349
  • PHY
    PHY
    +关注

    关注

    2

    文章

    331

    浏览量

    53794
  • 工业以太网
    +关注

    关注

    10

    文章

    666

    浏览量

    43642
  • ssc
    ssc
    +关注

    关注

    0

    文章

    26

    浏览量

    11759
  • ethercat
    +关注

    关注

    19

    文章

    1373

    浏览量

    43359
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    移植网络PHY芯片驱动,如何融入 rt-thread 的网络体系,并添加新的以太网类型的报文?

    PHY 芯片最底层收发以太网报文,有可能组成 VLAN 网络); 我要实现一个新的以太网类型报文(HPGP报文,以太网报文类型为 0x88E1),要求能在应用层收发该
    发表于 09-22 06:11

    ‌基于DP83TC812-Q1的汽车以太网PHY技术解析

    Texas Instruments DP83TC812-Q1 100BASE-T1汽车以太网PHY是一款符合IEEE 802.3bw标准的汽车PHYTER™以太网物理层收发器,可搭配非屏蔽双绞线电缆
    的头像 发表于 09-19 11:45 644次阅读
    ‌基于DP83TC812-Q1的汽车<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>技术解析

    Texas Instruments DP83867-EVM-AM以太网PHY附加板数据手册

    设计。DP83867-EVM-AM搭载TI DP83867IR低延迟10/100/1000-Mbps PHY,配备RGMII接口和标准RJ45以太网网络连接器。DP83867-EVM-AM可用于具有以太网扩展
    的头像 发表于 07-04 11:28 576次阅读
    Texas Instruments DP83867-EVM-AM<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>附加板数据手册

    Analog Devices Inc. ADIN1110低功耗10BASE-T1L以太网MAC-PHY数据手册

    Analog Devices Inc. ADIN1110低功耗10BASE-T1L以太网MAC-PHY集成了以太网PHY内核、MAC、所有相关模拟电路、输入和输出时钟缓冲。ADIN11
    的头像 发表于 07-02 11:20 1285次阅读
    Analog Devices Inc. ADIN1110低功耗10BASE-T1L<b class='flag-5'>以太网</b>MAC-<b class='flag-5'>PHY</b>数据手册

    Microchip LAN9211-ABZJ 集成 10/100 以太网 PHY以太网控制器

    Microchip LAN9211-ABZJ 集成 10/100 以太网 PHY以太网控制器
    的头像 发表于 06-04 14:56 809次阅读
    Microchip LAN9211-ABZJ 集成 10/100 <b class='flag-5'>以太网</b> <b class='flag-5'>PHY</b>的<b class='flag-5'>以太网</b>控制器

    ADIN1300低延迟和低功耗10 Mbps、100 Mbps和1 Gbps以太网PHY技术手册

    ADIN1300是一款具有低延迟特性的低功耗、单端口、千兆以太网收发器,主要设计用于工业以太网应用。 此设计集成了高能效以太网(EEE)物理层器件(PHY)内核以及所有相关的通用
    的头像 发表于 05-15 14:02 1044次阅读
    ADIN1300低延迟和低功耗10 Mbps、100 Mbps和1 Gbps<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>技术手册

    ADIN1200可靠的工业低功耗10 Mbps和100 Mbps以太网PHY技术手册

    ADIN1200是一款具有低延迟特性的低功耗、单端口、10 Mbps和100 Mbps以太网收发器,设计用于工业以太网应用 此设计集成了高能效以太网(EEE)物理层器件(PHY)
    的头像 发表于 05-15 13:57 818次阅读
    ADIN1200可靠的工业低功耗10 Mbps和100 Mbps<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>技术手册

    ADIN1100稳健型、低功耗10BASE-T1L工业以太网PHY技术手册

    )。ADIN1100将以太网PHY核心与所有相关的模拟电路、输入和输出时钟缓冲、管理接口控制寄存器和子系统寄存器以及MAC接口和控制逻辑集成在一起,以管理复位、时钟控制和引脚配置
    的头像 发表于 05-15 13:51 1112次阅读
    ADIN1100稳健型、低功耗10BASE-T1L工业<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>技术手册

    爱普生SG2520CAA有源晶振赋能车身以太网 PHY

    随着汽车智能化与网联化加速,车身以太网逐步取代传统CAN总线,成为车内高速通信的核心技术。以太网物理层接口芯片(PHY)作为数据传输的底层核心,对时钟信号的精度和稳定性提出了严苛要求。爱普生推出
    的头像 发表于 03-27 13:55 701次阅读
    爱普生SG2520CAA有源晶振赋能车身<b class='flag-5'>以太网</b> <b class='flag-5'>PHY</b>

    国产芯片替代方案:解析沁恒以太网PHY芯片

    沁恒国产以太网PHY芯片:高性能替代方案助力国产化升级
    的头像 发表于 03-12 10:40 3218次阅读

    请问MAC回环或以太网PHY芯片回环怎么实现?

    MAC回环或以太网PHY芯片回环怎么实现?
    发表于 03-12 06:05

    请问两个以太网PHY中间不用网络变压器能直接互联吗?

    我在电路板上使用以太网PHY芯片DP83867和microchip公司的以太网交换芯片KSZ9477S(集成PHY)中间没有用网络变压器直接连接
    发表于 02-27 07:51

    交换机与以太网怎么连接

    在现代网络通信中,交换机和以太网作为构建局域(LAN)的核心组件,其连接方式和配置对于网络的性能和稳定性至关重要。本文旨在深入探讨交换机与以太网
    的头像 发表于 02-02 16:44 2140次阅读

    AN4754-将Microchip桥接控制器与外部以太网PHY搭配使用

    电子发烧友网站提供《AN4754-将Microchip桥接控制器与外部以太网PHY搭配使用.pdf》资料免费下载
    发表于 01-21 13:54 0次下载
    AN4754-将Microchip桥接控制器与外部<b class='flag-5'>以太网</b><b class='flag-5'>PHY</b>搭配使用

    EE-315:更改Blackfin处理器以太网驱动程序中的PHY

    电子发烧友网站提供《EE-315:更改Blackfin处理器以太网驱动程序中的PHY.pdf》资料免费下载
    发表于 01-07 14:15 0次下载
    EE-315:更改Blackfin处理器<b class='flag-5'>以太网</b><b class='flag-5'>驱动</b>程序中的<b class='flag-5'>PHY</b>