国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄

這篇具有很好參考價(jià)值的文章主要介紹了RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、概述

為了盡量給甲方降低成本,決定使用較低成本的PHY芯片RTL8201F-VB-CG芯片。移植官網(wǎng)的以太網(wǎng)demo程序,git上下載了一份很好看的rtl8201F的驅(qū)動程序,用來替換官方demo的lan8742程序。并沒有直接通,于是開始了調(diào)試之路。

二、平臺

芯片型號:stm32h753
官網(wǎng)例程文件名:STM32Cube_FW_H7_V1.10.0

三、原理圖

RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄

四、遇到的問題

使用官網(wǎng)lwip的demo,下載RTL8201F-VB-CG驅(qū)動程序并替換lan8742驅(qū)動芯片程序,使用PC機(jī)ping設(shè)備ping不通

五、調(diào)試過程

1.確定PHY驅(qū)動芯片的寄存器可以讀取和寫入。

通過函數(shù)接口HAL_ETH_ReadPHYRegister和HAL_ETH_WritePHYRegister進(jìn)行讀寫。這里我是可以直接正常讀寫的,所以并沒遇到太大阻力。但我還是請教了一下其他朋友,了解到PHY寄存器的讀寫依靠22,23引腳。22引腳為時(shí)鐘線,測量波形約2M左右,沒記錯(cuò)的話。

2.深入調(diào)試了STM32對于以太網(wǎng)的初始化程序

主要是HAL_ETH_Init函數(shù),先上代碼。

HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)
{
  uint32_t tickstart;

  if (heth == NULL)
  {
    return HAL_ERROR;
  }
  if (heth->gState == HAL_ETH_STATE_RESET)
  {
    heth->gState = HAL_ETH_STATE_BUSY;

#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1)

    ETH_InitCallbacksToDefault(heth);

    if (heth->MspInitCallback == NULL)
    {
      heth->MspInitCallback = HAL_ETH_MspInit;
    }

    /* Init the low level hardware */
    heth->MspInitCallback(heth);
#else
    /* Init the low level hardware : GPIO, CLOCK, NVIC. */
    HAL_ETH_MspInit(heth);

#endif /* (USE_HAL_ETH_REGISTER_CALLBACKS) */
  }

  __HAL_RCC_SYSCFG_CLK_ENABLE();

  if (heth->Init.MediaInterface == HAL_ETH_MII_MODE)
  {
    HAL_SYSCFG_ETHInterfaceSelect(SYSCFG_ETH_MII);
  }
  else
  {
    HAL_SYSCFG_ETHInterfaceSelect(SYSCFG_ETH_RMII);
  }

  /* Dummy read to sync with ETH */
  (void)SYSCFG->PMCR;

  /* Ethernet Software reset */
  /* Set the SWR bit: resets all MAC subsystem internal registers and logic */
  /* After reset all the registers holds their respective reset values */
  SET_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR);

  /* Get tick */
  tickstart = HAL_GetTick();

  /* Wait for software reset */
  while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
  {
    if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT))
    {
      /* Set Error Code */
      heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
      /* Set State as Error */
      heth->gState = HAL_ETH_STATE_ERROR;
      /* Return Error */
      return HAL_ERROR;
    }
  }

  /*------------------ MDIO CSR Clock Range Configuration --------------------*/
  HAL_ETH_SetMDIOClockRange(heth);

  /*------------------ MAC LPI 1US Tic Counter Configuration --------------------*/
  WRITE_REG(heth->Instance->MAC1USTCR, (((uint32_t)HAL_RCC_GetHCLKFreq() / ETH_MAC_US_TICK) - 1U));

  /*------------------ MAC, MTL and DMA default Configuration ----------------*/
  ETH_MACDMAConfig(heth);

  /* SET DSL to 64 bit */
  MODIFY_REG(heth->Instance->DMACCR, ETH_DMACCR_DSL, ETH_DMACCR_DSL_64BIT);

  /* Set Receive Buffers Length (must be a multiple of 4) */
  if ((heth->Init.RxBuffLen % 0x4U) != 0x0U)
  {
    /* Set Error Code */
    heth->ErrorCode = HAL_ETH_ERROR_PARAM;
    /* Set State as Error */
    heth->gState = HAL_ETH_STATE_ERROR;
    /* Return Error */
    return HAL_ERROR;
  }
  else
  {
    MODIFY_REG(heth->Instance->DMACRCR, ETH_DMACRCR_RBSZ, ((heth->Init.RxBuffLen) << 1));
  }

  /*------------------ DMA Tx Descriptors Configuration ----------------------*/
  ETH_DMATxDescListInit(heth);

  /*------------------ DMA Rx Descriptors Configuration ----------------------*/
  ETH_DMARxDescListInit(heth);

  /*--------------------- ETHERNET MAC Address Configuration ------------------*/
  /* Set MAC addr bits 32 to 47 */
  heth->Instance->MACA0HR = (((uint32_t)(heth->Init.MACAddr[5]) << 8) | (uint32_t)heth->Init.MACAddr[4]);
  /* Set MAC addr bits 0 to 31 */
  heth->Instance->MACA0LR = (((uint32_t)(heth->Init.MACAddr[3]) << 24) | ((uint32_t)(heth->Init.MACAddr[2]) << 16) |
                             ((uint32_t)(heth->Init.MACAddr[1]) << 8) | (uint32_t)heth->Init.MACAddr[0]);

  heth->ErrorCode = HAL_ETH_ERROR_NONE;
  heth->gState = HAL_ETH_STATE_READY;

  return HAL_OK;
}

在該代碼的這一段發(fā)現(xiàn)程序返回了錯(cuò)誤。于是查找手冊對比這個(gè)bit位的作用

while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
  {
    if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT))
    {
      /* Set Error Code */
      heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
      /* Set State as Error */
      heth->gState = HAL_ETH_STATE_ERROR;
      /* Return Error */
      return HAL_ERROR;
    }
  }

3.獲取手冊上關(guān)于這個(gè)bit位的描述

手冊上關(guān)于這個(gè)bit位的描述如下,我的理解是,芯片需要檢查所有的時(shí)鐘,在檢測到時(shí)鐘的情況下,會自動復(fù)位完成。
RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄

4.測量PHY芯片各個(gè)時(shí)鐘線的狀態(tài)

通過向朋友的學(xué)習(xí),測量了PHY芯片15引腳的時(shí)序,因?yàn)槭褂肦MII模式,所以該時(shí)鐘引腳理論值約為50M。而我的這次調(diào)試,問題的根源也在這里
在運(yùn)行程序時(shí),我測量了PHY芯片15引腳,發(fā)現(xiàn)該引腳有時(shí)鐘輸出,我就誤認(rèn)為這里的時(shí)鐘沒問題,后面總結(jié)過后,才發(fā)現(xiàn)是寄存器配置后,PHY芯片的時(shí)鐘才開始輸出。所以在測量時(shí),最好是打斷點(diǎn)進(jìn)行調(diào)試,斷點(diǎn)要打在HAL_ETH_Init初始化之前。

5.閱讀PHY芯片手冊,找到在HAL_ETH_Init初始化之前提供時(shí)鐘的辦法

通過查看PHY芯片的芯片手冊,關(guān)于該芯片12引腳的描述如下,在該引腳拉低或者浮空(芯片內(nèi)部默認(rèn)接地)的情況下,15引腳會默認(rèn)輸出時(shí)鐘信號
RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄

六、解決的辦法

將12引腳的上拉電阻去掉。stm32h7檢測到PHY芯片的時(shí)鐘信號后,以太網(wǎng)驅(qū)動的初始化會正常進(jìn)行。再ping設(shè)備,通了?。?!

七、總結(jié)

關(guān)于這個(gè)問題,也是請教朋友的過程中,意外學(xué)習(xí)到,一般來說以太網(wǎng)的時(shí)鐘信號應(yīng)該由控制芯片來提供,在這里也就是該由stm32h7芯片來提供時(shí)鐘。但是我在手冊上并沒有看到輸出時(shí)鐘的方法(或許我看漏了吧)。所以在初始化流程并沒有正常的進(jìn)行。
而原理圖的來源,是我們硬件工程師從一款海思的產(chǎn)品上copy下來的,所以他認(rèn)為沒什么問題??赡躍oc芯片都有以太網(wǎng)時(shí)鐘信號輸出的能力吧。
所以不同的平臺,驅(qū)動方式會略有差異,但問題終歸是解決了。文章來源地址http://www.zghlxwxcb.cn/news/detail-419152.html

到了這里,關(guān)于RTL8201 以太網(wǎng)PHY芯片 調(diào)試記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • GD32F450以太網(wǎng)(2-2): PHY芯片IP101GR介紹

    GD32F450以太網(wǎng)(2-2): PHY芯片IP101GR介紹

    接上文 《GD32F450以太網(wǎng)(1):ETH 外設(shè)接口簡介》介紹了嵌入式以太網(wǎng)接口。 《GD32F450以太網(wǎng)(2-1):PHY芯片LAN8720A介紹》介紹了LAN8720A 本文介紹另外一款PHY芯片IP101GR,支持MII接口或RMII接口,可代替市場上LAN8710A/LAN8720A/KSZ8041等芯片。 IP101是臺灣省九陽電子公司生產(chǎn)制造的,符合IEEE

    2023年04月08日
    瀏覽(28)
  • 以太網(wǎng)MAC與PHY(二)

    目錄 一、概述 二、MAC控制器 三、PHY 四、SMI協(xié)議 ????????以太網(wǎng)硬件主要包括OSI的最下面兩層,物理層和數(shù)據(jù)鏈路層 物理層:定義了數(shù)據(jù)傳送與接收所需要的電與光信號、線路狀態(tài)、時(shí)鐘基準(zhǔn)、數(shù)據(jù)編碼和電路等,并向數(shù)據(jù)鏈路層提供標(biāo)準(zhǔn)接口。物理層的芯片為PHY 數(shù)據(jù)

    2024年02月09日
    瀏覽(23)
  • 以太網(wǎng)基礎(chǔ)理論—MAC+PHY

    以太網(wǎng)基礎(chǔ)理論—MAC+PHY

    MAC (Medium Access Control),簡稱媒體訪問控制。MAC層在OSI模型中是屬于數(shù)據(jù)鏈路層,其主要任務(wù)是解決數(shù)據(jù)包發(fā)給誰。數(shù)據(jù)鏈路層包含MAC(介質(zhì)訪問控制)子層和LLC(邏輯鏈路控制)子層。 ? PHY(physical),簡稱物理層,是一個(gè)對OSI模型物理層的簡稱。PHY包括兩個(gè)接口三個(gè)子層

    2024年02月14日
    瀏覽(18)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(6):以太網(wǎng)數(shù)據(jù)接收及發(fā)送

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(6):以太網(wǎng)數(shù)據(jù)接收及發(fā)送

    1.1.1 檢查是否接收到一幀完整報(bào)文 使用輪詢的方式接收以太網(wǎng)數(shù)據(jù)是一種簡單但是效率低下的方法,為了保證及時(shí)處理以太網(wǎng)數(shù)據(jù)我們需要在主循環(huán)內(nèi)高頻輪詢是否接收到了以太網(wǎng)數(shù)據(jù)。輪詢的函數(shù)為ETH_CheckFrameReceived,內(nèi)容如下: 當(dāng)以太網(wǎng)幀大于我們設(shè)置的DMA描述符buffer大

    2024年01月23日
    瀏覽(33)
  • WOL喚醒配置(以太網(wǎng)、PHY、MAC)

    WOL喚醒配置(以太網(wǎng)、PHY、MAC)

    目錄 wol? 以太網(wǎng) MAC PHY RMII 通信配置 總結(jié) Wake-on-LAN簡稱WOL,WOL(網(wǎng)絡(luò)喚醒)?是一種標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,它的功效在于讓已經(jīng)進(jìn)入休眠狀態(tài)或關(guān)機(jī)狀態(tài)的計(jì)算機(jī),透過局域網(wǎng)(多半為以太網(wǎng))的另一端對其發(fā)令,使其從休眠狀態(tài)喚醒、恢復(fù)成運(yùn)作狀態(tài),或從關(guān)機(jī)狀態(tài)轉(zhuǎn)成引導(dǎo)狀態(tài)

    2024年02月03日
    瀏覽(24)
  • 以太網(wǎng)(一)MAC、MII、PHY 介紹

    以太網(wǎng)(一)MAC、MII、PHY 介紹

    以太網(wǎng)(二)PHY、網(wǎng)卡、SWITCH介紹 [link] 以太網(wǎng)是由CPU,MAC,PHY三部分組成的,如下圖示意: 但是,在實(shí)際的設(shè)計(jì)中,CPU、MAC和PHY三部分并不一定是獨(dú)立分開的,存在以下三種方式: MAC 與 PHY集成在CPU中,目前來說并不多見。 MAC集成在CPU中,而PHY 采用獨(dú)立芯片,這種比較常

    2024年01月18日
    瀏覽(28)
  • FPGA平臺以太網(wǎng)學(xué)習(xí):MAC與PHY間通信

    FPGA平臺以太網(wǎng)學(xué)習(xí):MAC與PHY間通信

    1、PHY(物理層): ??MII/GMI/RMII/RGMII/SGMIII(介質(zhì)獨(dú)立接口子層),PLS/PCS(物理編碼子層),PMA(物理介質(zhì)連接子層),PMD(物理介質(zhì)相關(guān)子層),AN(自動協(xié)商),MDI(媒介相關(guān)接口)。 2、PLS/PCS(物理編碼子層): ??(PLS)對 MAC 給的信息進(jìn)行傳遞,只在IMb/s、10Mb/s 的應(yīng)

    2024年02月04日
    瀏覽(24)
  • FPGA驅(qū)動千兆以太網(wǎng)PHY但電腦只顯示百兆

    FPGA驅(qū)動千兆以太網(wǎng)PHY但電腦只顯示百兆

    前兩天公司做了個(gè)新板子,ZYNQ7035 + RTL8211E,拿給我測,于是寫邏輯代碼測試一下數(shù)據(jù)回環(huán),沒想到電腦端網(wǎng)絡(luò)適配器一直顯示是百兆網(wǎng)。查了多方原因,差點(diǎn)想手動配置寄存器了,但是想想又覺得不對,F(xiàn)PGA邏輯驅(qū)動以太網(wǎng)PHY芯片是不用配置寄存器的,只要PHY芯片外部引腳上

    2024年02月16日
    瀏覽(25)
  • 以太網(wǎng)基礎(chǔ)知識——PHY,MAC,MII,switch

    以太網(wǎng)基礎(chǔ)知識——PHY,MAC,MII,switch

    在以太網(wǎng)開發(fā)中,常常會聽到一些專業(yè)名詞,例如PHY,MAC,MII,switch,下面是解釋 PHY PHY 是物理接口收發(fā)器,它實(shí)現(xiàn)物理層。包括 MII/GMII (介質(zhì)獨(dú)立接口) 子層、PCS (物理編碼子層) 、PMA (物理介質(zhì)附加) 子層、PMD (物理介質(zhì)相關(guān)) 子層、MDI 子層。定義了數(shù)據(jù)傳送與接收所需要的

    2024年02月04日
    瀏覽(26)
  • STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(3):PHY寄存器詳解

    STM32的以太網(wǎng)外設(shè)+PHY(LAN8720)使用詳解(3):PHY寄存器詳解

    前面介紹到,站管理接口(SMI)允許應(yīng)用程序通過2線時(shí)鐘和數(shù)據(jù)線訪問任意PHY寄存器,同時(shí)該接口支持訪問最多32個(gè)PHY,也就是說PHY地址共有5位。 應(yīng)用程序可以從32個(gè)PHY中選擇一個(gè)PHY,然后從任意PHY包含的32個(gè)寄存器中選擇一個(gè)寄存器,發(fā)送控制數(shù)據(jù)或接收狀態(tài)信息。任意給

    2024年02月03日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包