在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

以太網PHY寄存器分析 以太網PHY驅動軟件配置

瑞薩MCU小百科 ? 來源:瑞薩嵌入式小百科 ? 2024-02-22 12:17 ? 次閱讀

我們對g_ethercat_ssc_port0_ext_cfg這個全局變量深入追蹤,其成員變量 g_ether_PHY0,正好是一個PHY實例的詳細描述體。

/* Instance structure to use this module. */
const ether_PHY_instance_t g_ether_PHY0 =
{
  .p_ctrl    = &g_ether_PHY0_ctrl,
  .p_cfg     = &g_ether_PHY0_cfg,
  .p_api     = &g_ether_PHY_on_ether_PHY
};

其中g_ether_PHY0_cfg是pyh實例的配置結構體:

const ether_PHY_cfg_t g_ether_PHY0_cfg =
{


  .channel          = 0,
  .PHY_lsi_address      = 0,
  .PHY_reset_wait_time    = 0x00020000,
  .mii_bit_access_wait_time = 0,             // Unused
  .flow_control       = ETHER_PHY_FLOW_CONTROL_DISABLE,
  .mii_type         = (ether_PHY_mii_type_t) 0, // Unused
  .p_context         = NULL,
  .p_extend         = &g_ether_PHY0_extend
};

這里又通過p_extend 做了擴展配置(其實可以合并在一起)如下所示:

const ether_PHY_extend_cfg_t g_ether_PHY0_extend =
{
  .port_type     = ETHER_PHY_PORT_TYPE_ETHER_CAT,
  .PHY_chip      = (ether_PHY_chip_t) ETHER_PHY_CHIP_VSC8541,
  .mdio_type     = ETHER_PHY_MDIO_GMAC,


  .bps        = ETHER_PHY_SPEED_100,
  .duplex       = ETHER_PHY_DUPLEX_FULL,
  .auto_negotiation  = ETHER_PHY_AUTO_NEGOTIATION_ON,


  .PHY_reset_pin   = BSP_IO_PORT_20_PIN_7,
  .PHY_reset_time   = 15000,


  .p_selector_instance = (ether_selector_instance_t *)&g_ether_selector0,
};

可以看到上面的擴展配置當中,PHY的具體硬件型號都已經列出,如PHY_chip = (ether_PHY_chip_t) ETHER_PHY_CHIP_;

可以看到在示例代碼當中已經支持的PHY如下所示:

/** Identify PHY-LSI */
typedef enum e_ether_PHY_chip
{
  ETHER_PHY_CHIP_VSC8541 = (1 << 0), ///< VSC8541
 ? ?ETHER_PHY_CHIP_KSZ9131 = (1 << 1), ///< KSZ9131
 ? ?ETHER_PHY_CHIP_KSZ9031 = (1 << 2), ///< KSZ9031
 ? ?ETHER_PHY_CHIP_KSZ8081 = (1 << 3), ///< KSZ8081
 ? ?ETHER_PHY_CHIP_KSZ8041 = (1 << 4) ?///< KSZ8041
} ether_PHY_chip_t;

這里具體看一下 g_ether_selector0 這個 ether_selector_instance_t 類型的全局指針,指向 selector driver實例的成員變量:

typedef struct st_ether_selector_instance
{
  ether_selector_ctrl_t   * p_ctrl; ///< Pointer to the control structure for this instance
 ? ?ether_selector_cfg_t const * p_cfg; ?///< Pointer to the configuration structure for this instance
 ? ?ether_selector_api_t const * p_api; ?///< Pointer to the API structure for this instance
} ether_selector_instance_t;

這又是一個類似的結構體,通過三個指針來分別指向結構本身,selector的具體配置,和配置selector過程中所需要用的的成員方法api.

看一下selector的具體配置信息

typedef struct st_ether_selector_cfg
{
  uint8_t port;               ///< Port number
 ? ?ether_selector_PHYlink_polarity_t PHYlink; ///< PHY link signal polarity


 ? ?ether_selector_interface_t interface; ? ? ?///< Converter mode
 ? ?ether_selector_speed_t ? ? speed; ? ? ? ? ?///< Converter Speed
 ? ?ether_selector_duplex_t ? ?duplex; ? ? ? ? ///< Converter Duplex
 ? ?ether_selector_ref_clock_t ref_clock; ? ? ?///< Converter REF_CLK
 ? ?void const ? ? ? ? ? ? ? * p_extend; ? ? ? ///< Placeholder for user extension.
} ether_selector_cfg_t;

可以看到selector 對應的端口號,PHY連接信號對應的極性,接口模式,速率,全雙工,以及外部時鐘輸入。再看一下配置selector的過程中所需要用到的API函數:

const ether_selector_api_t g_ether_selector_on_ether_selector =
{
  .open     = R_ETHER_SELECTOR_Open,
  .converterSet = R_ETHER_SELECTOR_ConverterSet,
  .close    = R_ETHER_SELECTOR_Close,
  .versionGet  = R_ETHER_SELECTOR_VersionGet
};

其最主要的成員方法就是R_ETHER_SELECTOR_Open做了些什么:

先初始化ETHER_SELECTOR

 /* One time initialization for all ETHER_SELECTOR instances. */
  r_ether_selector_state_initialize();


  /* Unlock write access protection for Ethernet subsystem registers */
  r_ether_selector_reg_protection_disable(p_reg_ethss);
  
  /* Set the function of Ethernet ports. */
  sw_mode = ETHER_SELECTOR_CFG_MODE;
  p_reg_ethss->MODCTRL_b.SW_MODE = sw_mode & ETHER_SELECTOR_MODCTRL_BIT_SWMODE_MASK;
  
  /* Set the MAC of all port for half-duplex. */
  p_reg_ethss->SWDUPC_b.PHY_DUPLEX = 0;
  
  /* Set all Ethernet switch port to select not use 10Mbps. */
  p_reg_ethss->SWCTRL_b.SET10 = 0;

根據端口號來選擇對應控制寄存器

/* Set RGMII/RMII Converter configuration */
  switch (port)
  {
    case 0:
    {
      p_reg_convctrl = (uint32_t *) &p_reg_ethss->CONVCTRL[0];
      break;
    }


    case 1:
    {
      p_reg_convctrl = (uint32_t *) &p_reg_ethss->CONVCTRL[1];
      break;
    }


    case 2:
    default:
    {
      p_reg_convctrl = (uint32_t *) &p_reg_ethss->CONVCTRL[2];
      break;
    }
  }

根據指向selector的配置信息:

const ether_selector_cfg_t g_ether_selector0_cfg =
{
  .port           = 0,
  .PHYlink          = ETHER_SELECTOR_PHYLINK_POLARITY_LOW,
  .interface         = ETHER_SELECTOR_INTERFACE_RGMII,
  .speed           = ETHER_SELECTOR_SPEED_100MBPS,
  .duplex          = ETHER_SELECTOR_DUPLEX_FULL,
  .ref_clock         = ETHER_SELECTOR_REF_CLOCK_INPUT,
  .p_extend         = NULL,
};

來對CONVCTRL[port_number]寄存器做相應的配置

2eb4a366-d138-11ee-a297-92fbcf53809c.png

這里結合RZ/T2M的用戶手冊,很容易理解其中的意思:

2ec2147e-d138-11ee-a297-92fbcf53809c.png

結合代碼來看,總體ETHER_SELECTOR 的驅動的配置流程圖臺下所示:

2edfe864-d138-11ee-a297-92fbcf53809c.png

在對ETHER_SELECTOR驅動做完配置后,下面具體看一下對ETHER_PHY_CHIP這個PHY,代碼具體做了哪些操作:

首先是做初始化:

2ef2df46-d138-11ee-a297-92fbcf53809c.png

oid ether_PHY_targets_initialize_vsc8541 (ether_PHY_instance_ctrl_t * p_instance_ctrl)
{
  /* Vendor Specific PHY Registers */
 #define ETHER_PHY_REG_LED_MODE_SELECT         (0x1D)
 #define ETHER_PHY_REG_LED_BEHAVIOR          (0x1E)
 #define ETHER_PHY_REG_EXTEND_GPIO_PAGE        (0x1F)
...

這個初始化函數,并沒有對IEEE 標準規定的16個寄存器做讀寫操作,只對廠商自定義的寄存器做了配置。初始化完成之后,對是否打開自動協商的功能對PHY進行了讀寫:

2efeb3d4-d138-11ee-a297-92fbcf53809c.png

2f107bb4-d138-11ee-a297-92fbcf53809c.png

這里可以看到對PHY芯生來說,需要配置的寄存器并不是很多,大多數情況下,把自動協商寄存器配置好,就可以了。除此之后就是廠商自定義的寄存器的一些自定義的功能。這部分功能需要結合用戶手冊來理解和使用,大部分也是用來調試和指示的作用以及一些IEEE基本標準之外的特色功能,比如節能標準之類的。

對于用戶說來,搞清楚數據結構之間的關聯,剩下的就是驅動代碼的執行邏輯,考慮到執行邏輯并不復雜,這里不展開來說。用戶可以參考錄屏材料進一步深入了解。

其它

經過驗證的PHY芯片列表:

2f2436d6-d138-11ee-a297-92fbcf53809c.jpg






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    40

    文章

    5460

    瀏覽量

    172741
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121177
  • PHY
    PHY
    +關注

    關注

    2

    文章

    305

    瀏覽量

    51864

原文標題:工業以太網PHY驅動適配參考文檔(完結篇)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何對以太網PHY芯片的rmii pin腳進行配置

    如何對以太網PHY芯片的時鐘進行配置?如何對以太網PHY芯片的gmac進行配置?如何對
    發表于 02-21 06:54

    RK3288搭配以太網PHY芯片需要注意哪些

    (1)以太網PHY芯片驅動及接口瑞芯微在設計RK 系列主控芯片時,有內置以太網MAC 控制,通常只需要搭配一顆
    發表于 08-31 17:15

    車載以太網MAC和PHY的問題詳解

    問:如何實現單片 以太網微控制 ?答:訣竅是將微控制以太網 媒體接入控制 (MAC )和物理接口收發
    發表于 06-02 08:00 ?5次下載
    車載<b class='flag-5'>以太網</b>MAC和<b class='flag-5'>PHY</b>的問題詳解

    AN-2047:配置ADIN1300以太網PHY

    AN-2047:配置ADIN1300以太網PHY
    發表于 03-22 21:57 ?1次下載
    AN-2047:<b class='flag-5'>配置</b>ADIN1300<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>

    AN-2043:配置ADIN1200以太網PHY

    AN-2043:配置ADIN1200以太網PHY
    發表于 03-22 21:58 ?10次下載
    AN-2043:<b class='flag-5'>配置</b>ADIN1200<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>

    EE-315:更改Blackfin?處理以太網驅動程序中的PHY

    EE-315:更改Blackfin?處理以太網驅動程序中的PHY
    發表于 04-25 09:51 ?8次下載
    EE-315:更改Blackfin?處理<b class='flag-5'>器</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b>程序中的<b class='flag-5'>PHY</b>

    車載以太網PHY標準分布

    車載以太網標準分物理層PHY和鏈路層兩大類,TSN標準主要在第二層的鏈路層。車載以太網PHY標準主要是制定單對雙絞線標準,傳統以太網與車載
    的頭像 發表于 06-14 11:18 ?5048次閱讀

    簡化您的以太網設計,第1部分:以太網PHY基礎知識和選擇過程

    簡化您的以太網設計,第1部分:以太網PHY基礎知識和選擇過程
    發表于 10-31 08:23 ?1次下載
    簡化您的<b class='flag-5'>以太網</b>設計,第1部分:<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>基礎知識和選擇過程

    選擇以太網PHY時的重要因素

    以太網是 IEEE 802.3 中規定的接口規范。IEEE 802.3 的元素之一是以太網物理 (PHY) 層。它是用于發送和接收數據或以太網幀的收發
    的頭像 發表于 12-14 11:43 ?1167次閱讀
    選擇<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>時的重要因素

    如何選擇適合的以太網PHY

    以太網是IEEE 802.3中規定的一種接口規范。以太網物理(PHY)層是IEEE 802.3的其中一個元素。它是一種收發組件,用于發送和接收數據或
    的頭像 發表于 02-14 09:36 ?1284次閱讀
    如何選擇適合的<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>

    以太網PHY的功能和選擇

    以太網 PHY具有兩個主要功能。
    的頭像 發表于 05-11 16:46 ?1684次閱讀
    <b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>的功能和選擇

    還在為以太網PHY缺芯改版煩惱嗎?

    以太網PHY芯片使用范圍廣泛,但在缺“芯”大環境下,用戶面臨的真實痛點與困境卻是:產品成熟,達到工業級標準的PHY芯片供貨不穩定。如何換“芯”而不必硬件改版?如何簡化設計?如何輕松全國產化呢?近兩年
    的頭像 發表于 09-06 10:09 ?1578次閱讀
    還在為<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>缺芯改版煩惱嗎?

    以太網 PHY 的功能和選擇

    以太網 PHY 3具有兩個主要功能
    的頭像 發表于 07-14 15:52 ?1293次閱讀
    <b class='flag-5'>以太網</b> <b class='flag-5'>PHY</b> 的功能和選擇

    更換不同的以太網PHY

    電子發燒友網站提供《更換不同的以太網PHY.pdf》資料免費下載
    發表于 07-31 14:45 ?3次下載
    更換不同的<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b>

    適用于工業應用的使用MDIO的以太網PHY配置

    電子發燒友網站提供《適用于工業應用的使用MDIO的以太網PHY配置.pdf》資料免費下載
    發表于 09-21 10:24 ?0次下載
    適用于工業應用的使用MDIO的<b class='flag-5'>以太網</b><b class='flag-5'>PHY</b><b class='flag-5'>配置</b>
    主站蜘蛛池模板: 福利片午夜| 激情伦成人综合小说 | 国产福利在线免费 | 天天爽夜夜爽人人爽一区二区 | 日日夜夜天天人人 | 爽好舒服快给老师 | 不卡视频一区 | 婷婷六月激情在线综合激情 | 五月婷婷在线播放 | 国产午夜免费 | 国产亚洲精品久久久极品美女 | 西西人体大胆高清啪啪欧洲 | 天天久久综合网站 | 在线播放国产一区 | 欧美日本一道免费一区三区 | 色中色综合 | 最新日本免费一区二区三区中文 | 国产美女视频黄a视频全免费网站 | 国产精品久久久久久久久 | 国产情侣出租屋露脸实拍 | 中文字幕第11页 | 天天夜天干天天爽 | 激情深爱五月 | 亚洲国产精品第一页 | 免费看黄色片网站 | 高清xxx | 国模无水印一区二区三区 | 国模福利 | 免费观看a毛片一区二区不卡 | 国产亚洲视频在线 | 人人舔人人爱 | 年轻护士女三级 | 国产专区青青草原亚洲 | 色一区二区 | 亚洲欧美日本综合 | 欧洲国产精品精华液 | 欧美系列在线播放 | 日本高清色视频在线观看免费 | 一级片视频在线 | 日本不卡视频在线 | 美女免费视频黄 |