一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

以太網(wǎng)PHY硬件連接 以太網(wǎng)PHY驅(qū)動(dòng)軟件配置介紹

瑞薩MCU小百科 ? 來(lái)源:瑞薩嵌入式小百科 ? 作者:瑞薩嵌入式小百科 ? 2024-02-20 12:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以太網(wǎng)PHY驅(qū)動(dòng)軟件配置

這里以Renesas提供的RZ/T2M工程樣例“RZT2M_EtherCAT_RSK_rev0100”為例對(duì)PHY驅(qū)動(dòng)的軟件配置流程進(jìn)行說明。此工程樣例可以在Renesas提供的開發(fā)版上運(yùn)行和調(diào)試。開發(fā)套件的使用文件《r20ut4939eg0050-rskrzt2m-usermanual_c.pdf》可以上Renesas官方網(wǎng)站上獲取,開發(fā)板也可以申請(qǐng)購(gòu)買或者是借用。

驅(qū)動(dòng)配置的入口

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 */
  }
  ...
}

進(jìn)入RM_ETHERCAT_SSC_PORT_Open(), 這個(gè)EtherCAT接口配置函數(shù)之后,可以看到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驅(qū)動(dòng)配置相關(guān)數(shù)據(jù)結(jié)構(gòu)解析

這里初始化的一個(gè)PHY實(shí)例是:

p_ether_PHY_instance,它是一個(gè)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實(shí)例的控制結(jié)構(gòu)體;

ether_PHY_cfg_t是指向?qū)嵗渲玫慕Y(jié)構(gòu)體指針;

ether_PHY_api_t是實(shí)例配置過程中需要調(diào)用到的函數(shù)方法所組成的結(jié)構(gòu)體指針;

這個(gè)PHY的實(shí)例是在調(diào)用RM_ETHERCAT_SSC_PORT_Open()函數(shù)的時(shí)候形參傳遞進(jìn)來(lái)的,也就是gp_ethercat_ssc_port。

ethercat_ssc_port_instance_t const * gp_ethercat_ssc_port = &g_ethercat_ssc_port0;

而gp_ethercat_ssc_port這個(gè)ethercat_ssc_port_instance_t類型的全局指針是指向一個(gè)常量,也就是下面代碼中的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è)常量結(jié)構(gòu)體,它的成員變量分別是:

g_ethercat_ssc_port0_ctrl指向ethercat_ssc_port0控制結(jié)構(gòu)體指針;

g_ethercat_ssc_port0_cfg指向ethercat_ssc_port0配置結(jié)構(gòu)體指針;

g_ethercat_ssc_port_on_ethercat_ssc_port指向ethercat_ssc_port0配置方法的結(jié)構(gòu)指針。

看到這里是不是有一種似成相識(shí)的感覺?g_ethercat_ssc_port0是對(duì)ethercat_ssc_port0這個(gè)外設(shè)的驅(qū)動(dòng)的描述體,與前面PHY驅(qū)運(yùn)的描述體“p_ether_PHY_instance”結(jié)構(gòu)上很相似,其實(shí)工程樣例中所有的外設(shè)驅(qū)動(dòng)都可以使用類似的結(jié)構(gòu)體去完成相應(yīng)的初始化。比如說timer驅(qū)動(dòng)描述結(jié)構(gòu)體:

/** 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;

這種相似的驅(qū)動(dòng)描述體其實(shí)就是工程樣例驅(qū)動(dòng)代碼部分的大致框架所在,撐握了這個(gè)脈絡(luò)即可以方便的看懂其它外設(shè)驅(qū)動(dòng)的代碼,也可以在以后的驅(qū)動(dòng)開發(fā)過程中參考這種框架,提升代的通用性和可讀性。

我們知道PHY的驅(qū)動(dòng)是ethercat_ssc_port0外設(shè)驅(qū)動(dòng)的子模塊。因?yàn)橐赗Z/T2M這個(gè)芯片上使能EtherCAT功能塊,除了要完成芯片本身相關(guān)外設(shè)的初始化之外,還要完成與之對(duì)應(yīng)的PHY的初始化。那么兩者是如何關(guān)聯(lián)在一起的呢?我們繼續(xù)解讀g_ethercat_ssc_port0這個(gè)全局結(jié)構(gòu)體??梢钥吹絞_ethercat_ssc_port0_cfg所指向的內(nèi)容是配置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;

對(duì)PHY的復(fù)位信號(hào)保持時(shí)間有描述,還有對(duì)EtherCAT中斷有作描述,在此不展開討論。其中p_extend成員是用戶用于擴(kuò)展控制的占位符。這也正是PHY驅(qū)動(dòng)與ethercat_ssc_port0驅(qū)動(dòng)關(guān)聯(lián)的關(guān)鍵所在。代碼賦于這個(gè)占位符是一個(gè)指向擴(kuò)展配置的結(jié)構(gòu)體指針。具體可以看看這個(gè)結(jié)構(gòu)體的內(nèi)容如下:

/** 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
};

里面就對(duì)應(yīng)有ether_PHY_instance_t類體的初始化值,這值的類型正好是PHY實(shí)例所對(duì)應(yīng)的描體結(jié)構(gòu)體如下代碼所示,所以關(guān)聯(lián)就產(chǎn)生了。

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;





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)器
    +關(guān)注

    關(guān)注

    54

    文章

    8654

    瀏覽量

    149468
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    317

    瀏覽量

    52644
  • 工業(yè)以太網(wǎng)

    關(guān)注

    10

    文章

    656

    瀏覽量

    42957
  • ssc
    ssc
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    11474
  • ethercat
    +關(guān)注

    關(guān)注

    19

    文章

    1079

    瀏覽量

    39788

原文標(biāo)題:工業(yè)以太網(wǎng)PHY驅(qū)動(dòng)適配參考文檔(4)

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Microchip LAN9211-ABZJ 集成 10/100 以太網(wǎng) PHY以太網(wǎng)控制器

    Microchip LAN9211-ABZJ 集成 10/100 以太網(wǎng) PHY以太網(wǎng)控制器
    的頭像 發(fā)表于 06-04 14:56 ?308次閱讀
    Microchip LAN9211-ABZJ 集成 10/100 <b class='flag-5'>以太網(wǎng)</b> <b class='flag-5'>PHY</b>的<b class='flag-5'>以太網(wǎng)</b>控制器

    ADIN1300低延遲和低功耗10 Mbps、100 Mbps和1 Gbps以太網(wǎng)PHY技術(shù)手冊(cè)

    ADIN1300是一款具有低延遲特性的低功耗、單端口、千兆以太網(wǎng)收發(fā)器,主要設(shè)計(jì)用于工業(yè)以太網(wǎng)應(yīng)用。 此設(shè)計(jì)集成了高能效以太網(wǎng)(EEE)物理層器件(PHY)內(nèi)核以及所有相關(guān)的通用
    的頭像 發(fā)表于 05-15 14:02 ?265次閱讀
    ADIN1300低延遲和低功耗10 Mbps、100 Mbps和1 Gbps<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b>技術(shù)手冊(cè)

    愛普生SG2520CAA有源晶振賦能車身以太網(wǎng) PHY

    隨著汽車智能化與網(wǎng)聯(lián)化加速,車身以太網(wǎng)逐步取代傳統(tǒng)CAN總線,成為車內(nèi)高速通信的核心技術(shù)。以太網(wǎng)物理層接口芯片(PHY)作為數(shù)據(jù)傳輸?shù)牡讓雍诵?,?duì)時(shí)鐘信號(hào)的精度和穩(wěn)定性提出了嚴(yán)苛要求。愛普生推出
    的頭像 發(fā)表于 03-27 13:55 ?328次閱讀
    愛普生SG2520CAA有源晶振賦能車身<b class='flag-5'>以太網(wǎng)</b> <b class='flag-5'>PHY</b>

    國(guó)產(chǎn)芯片替代方案:解析沁恒以太網(wǎng)PHY芯片

    沁恒國(guó)產(chǎn)以太網(wǎng)PHY芯片:高性能替代方案助力國(guó)產(chǎn)化升級(jí)
    的頭像 發(fā)表于 03-12 10:40 ?1688次閱讀

    AN4754-將Microchip橋接控制器與外部以太網(wǎng)PHY搭配使用

    電子發(fā)燒友網(wǎng)站提供《AN4754-將Microchip橋接控制器與外部以太網(wǎng)PHY搭配使用.pdf》資料免費(fèi)下載
    發(fā)表于 01-21 13:54 ?0次下載
    AN4754-將Microchip橋接控制器與外部<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b>搭配使用

    EE-315:更改Blackfin處理器以太網(wǎng)驅(qū)動(dòng)程序中的PHY

    電子發(fā)燒友網(wǎng)站提供《EE-315:更改Blackfin處理器以太網(wǎng)驅(qū)動(dòng)程序中的PHY.pdf》資料免費(fèi)下載
    發(fā)表于 01-07 14:15 ?0次下載
    EE-315:更改Blackfin處理器<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>驅(qū)動(dòng)</b>程序中的<b class='flag-5'>PHY</b>

    用于汽車以太網(wǎng)PHY附加板的AM2x評(píng)估模塊用戶指南

    電子發(fā)燒友網(wǎng)站提供《用于汽車以太網(wǎng)PHY附加板的AM2x評(píng)估模塊用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-05 09:23 ?0次下載
    用于汽車<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b>附加板的AM2x評(píng)估模塊用戶指南

    用于工業(yè)以太網(wǎng)PHY的AM2x評(píng)估模塊附加板用戶指南

    電子發(fā)燒友網(wǎng)站提供《用于工業(yè)以太網(wǎng)PHY的AM2x評(píng)估模塊附加板用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-05 09:20 ?0次下載
    用于工業(yè)<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b>的AM2x評(píng)估模塊附加板用戶指南

    以太網(wǎng)PHY PCB設(shè)計(jì)布局檢查清單

    電子發(fā)燒友網(wǎng)站提供《以太網(wǎng)PHY PCB設(shè)計(jì)布局檢查清單.pdf》資料免費(fèi)下載
    發(fā)表于 09-24 11:09 ?2次下載
    <b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b> PCB設(shè)計(jì)布局檢查清單

    適用于工業(yè)應(yīng)用的使用MDIO的以太網(wǎng)PHY配置

    電子發(fā)燒友網(wǎng)站提供《適用于工業(yè)應(yīng)用的使用MDIO的以太網(wǎng)PHY配置.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 10:24 ?0次下載
    適用于工業(yè)應(yīng)用的使用MDIO的<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b><b class='flag-5'>配置</b>

    利用DP83TC812-Q1以太網(wǎng)物理層 (PHY) 的完整汽車以太網(wǎng)系統(tǒng)中的設(shè)置和測(cè)量

    電子發(fā)燒友網(wǎng)站提供《利用DP83TC812-Q1以太網(wǎng)物理層 (PHY) 的完整汽車以太網(wǎng)系統(tǒng)中的設(shè)置和測(cè)量.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 09:28 ?1次下載
    利用DP83TC812-Q1<b class='flag-5'>以太網(wǎng)</b>物理層 (<b class='flag-5'>PHY</b>) 的完整汽車<b class='flag-5'>以太網(wǎng)</b>系統(tǒng)中的設(shè)置和測(cè)量

    使用C2000 EtherCAT從站控制器的SMI進(jìn)行以太網(wǎng)PHY配置

    電子發(fā)燒友網(wǎng)站提供《使用C2000 EtherCAT從站控制器的SMI進(jìn)行以太網(wǎng)PHY配置.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 10:37 ?0次下載
    使用C2000 EtherCAT從站控制器的SMI進(jìn)行<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b><b class='flag-5'>配置</b>

    如何以及何時(shí)在PROFINET系統(tǒng)中使用以太網(wǎng)PHY

    電子發(fā)燒友網(wǎng)站提供《如何以及何時(shí)在PROFINET系統(tǒng)中使用以太網(wǎng)PHY.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 10:15 ?0次下載
    如何以及何時(shí)在PROFINET系統(tǒng)中使用<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>PHY</b>

    X1G004481000300低功耗晶振以太網(wǎng)PHY芯片的關(guān)鍵核心

    在射頻拉遠(yuǎn)單元(RRU)設(shè)計(jì)中,一般需要用到以太網(wǎng)PHY芯片發(fā)送和接收以太網(wǎng)的數(shù)據(jù)幀,與主控芯片進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交互,為保證以太網(wǎng)PHY芯片
    發(fā)表于 08-05 13:59 ?0次下載

    以太網(wǎng)要怎么連接

    以太網(wǎng)連接是現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)通信中最為基礎(chǔ)和重要的環(huán)節(jié)之一。它利用以太網(wǎng)電纜和網(wǎng)卡等硬件設(shè)備,將計(jì)算機(jī)或其他設(shè)備連接到網(wǎng)絡(luò)交換機(jī)或路由器上,從
    的頭像 發(fā)表于 07-09 10:28 ?2217次閱讀