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

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

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

STM32以太網(wǎng)MAC Loopback的實現(xiàn)

STM32單片機 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2020-12-29 10:06 ? 次閱讀

STM32 以太網(wǎng) MAC Loopback的實現(xiàn)

前言

在STM32以太網(wǎng)調(diào)試中經(jīng)常會遇到“設(shè)備接收不到數(shù)據(jù)”,或者“設(shè)備發(fā)出的數(shù)據(jù)對端設(shè)備收不到”之類的問題。遇到這類問題首先要做的是定位問題發(fā)生的部位,這樣做的好處就是可以指明下一步調(diào)試的方向,縮小分析的范圍。以下圖為例我們做個簡單的說明,設(shè)備A和設(shè)備B通過以太網(wǎng)通信,現(xiàn)發(fā)現(xiàn)設(shè)備B無法接收設(shè)備A發(fā)送的消息,問題可能出現(xiàn)在幾個地方:

應(yīng)用層的程序,或者協(xié)議棧出錯,數(shù)據(jù)根本沒有到STM32以太網(wǎng)外設(shè)。這種情況我們在調(diào)試的時候,在以太網(wǎng)輸出函數(shù)low_level_output中打個斷點就可以檢查出來。

STM32以太網(wǎng)MAC出現(xiàn)問題,沒有把數(shù)據(jù)發(fā)送出去。對于這種情況,可以通過STM32以太網(wǎng)的MAC loopback功能來檢查MAC的收發(fā)是否正常。

STM32以太網(wǎng)MAC和外部PHY之間的通信出現(xiàn)問題??梢酝ㄟ^PHY提供的loopback功能來檢查。

設(shè)備A端的收發(fā)沒有問題,問題可能出現(xiàn)在線路上或者設(shè)備B??梢酝ㄟ^在網(wǎng)口的接線上做網(wǎng)線交叉,也就是將RJ-45接口中TX+與RX+連接,TX-與RX-連接,來進行檢查。

本文將主要介紹上面提到的STM32 MAC loopback方法。

MAC loopback模式

MAC loopback模式的使能很簡單,將ETH_MACCR寄存器的LM位置位就可以了。

MAC loopback模式使能后,MAC發(fā)送的數(shù)據(jù)幀通過MII接口發(fā)送給外部PHY的同時也發(fā)送到MAC接收端。這里需要注意的是STM32 MAC loopback模式只支持在MII接口下工作。

但要正確的接收到loopback的數(shù)據(jù),還需要注意一下幾個地方:

MAC loopback模式下,MII接口的接收時鐘(RX_CLK)和發(fā)送時鐘(TX_CLK)還需要外部PHY來提供,所以PHY的初始化不能省。

以太網(wǎng)幀中的目標(biāo)MAC地址應(yīng)該和源MAC地址一樣,或者設(shè)定為廣播地址(FFFFFF:FF),否則MAC默認(rèn)將會過濾接收到的數(shù)據(jù)?;蛘邔TH_MACFFR寄存器的RA置位,以接收所有的以太網(wǎng)幀。

對于F7,H7這類帶有cache的MCU型號,需要注意接收/發(fā)送描述符和接收/發(fā)送buffer的地址,以及cache屬性。因為這部分存放在SRAM的數(shù)據(jù)CPU和以太網(wǎng)DMA都會去讀寫,如果使能cache(回寫)可能會出現(xiàn)數(shù)據(jù)不一致的情況。也不能將其定義在STM32F769的DTCM RAM區(qū)域。

MAC loopback例程

例程說明

本文基于STM32F769I-EVAL板提供了一個以太網(wǎng)外設(shè)測試工程。工程中沒有用到TCP/IP協(xié)議棧,只通過STM32F7的HAL驅(qū)動層,實現(xiàn)了以太網(wǎng)MAC層的數(shù)據(jù)收發(fā),同時也實現(xiàn)了MAC loopback的功能。這個測試工程的目的是,檢測STM32以太網(wǎng)外設(shè)的配置是否正確,工作是否正常。

這個例程提供兩種工作模式:

正常模式

在這種模式下,可以正常與另一個設(shè)備(PC或者其他的開發(fā)板)通信,也就是可以發(fā)送和接收以太網(wǎng)幀。用戶可以發(fā)送自定義的以太網(wǎng)幀數(shù)據(jù),程序會自動構(gòu)建以太網(wǎng)幀并發(fā)送。因為沒有實現(xiàn)任何TCP/IP協(xié)議,如果想發(fā)送IP包或者TCP/UDP包,就需要自己先按照這些包的格式構(gòu)建好數(shù)據(jù)。

MAC loopback模式

在這種模式下,STM32F769I-EVAL板子發(fā)送的數(shù)據(jù)被直接送回到MII接口的接收端。如果此時網(wǎng)口還連接到另一個設(shè)備的話,該設(shè)備也是可以接收到數(shù)據(jù)的。

例程配置

打開例程后,先要做以下的配置:

設(shè)置目標(biāo)MAC地址(dst_addr)

如果發(fā)送廣播,dst_addr設(shè)置為FFFFFF:FF。如果在MAC loopback模式下,dst_addr設(shè)置成和src_addr一樣。

定義幀數(shù)據(jù)的類型(frame_type)

可以發(fā)送自定義的幀數(shù)據(jù)類型,或者通用的預(yù)先定義好的幀數(shù)據(jù)類型。比如,如果發(fā)送的是IPv4的數(shù)據(jù),frame_type就是0x0800;如果發(fā)送自定義的類型,則可以使用未被分配的數(shù)值。在這個demo中,用的是0x0601。

初始化要發(fā)送的數(shù)據(jù)buffer

要發(fā)送的數(shù)據(jù)保存在teststring數(shù)組中。請注意,這個數(shù)組里只保存應(yīng)用層要發(fā)送的數(shù)據(jù),也就是以太網(wǎng)幀格式的數(shù)據(jù)段,不包括目標(biāo)/源MAC地址,以太網(wǎng)幀數(shù)據(jù)類型和CRC校驗碼。

如果不使能MAC loopback功能,則在main.h中注釋掉MAC_LOOPBACK_ENABLE宏

修改好以上的參數(shù)后,重新編譯燒錄后運行。

每次按下USER按鍵,觸發(fā)一次數(shù)據(jù)發(fā)送。接收到的數(shù)據(jù)保存在rxbuffer,并且板子上的LD1燈會改變一次狀態(tài)。

正常模式演示

在正常模式下,為了演示方便我們使用PC與STM32F769I-EVAL連接,在PC上運行XCAP來發(fā)送/接收以太網(wǎng)幀數(shù)據(jù)。

MAC例程端的配置如下:

1. 接收數(shù)據(jù)測試

打開xcap,構(gòu)造一個發(fā)給STM32F769I-EVAL板的以太網(wǎng)幀。

目標(biāo)MAC地址:020000:00

Frame Type: Custom(0x0601)

數(shù)據(jù):10字節(jié),0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55

在xcap中,選擇創(chuàng)建好的報文,點擊發(fā)送。

53cb2c7e-48bf-11eb-8b86-12bb97331649.jpg

這時就可以在Wireshark里捕獲的數(shù)據(jù)包中看到剛剛發(fā)送出去的這個。

53eb941e-48bf-11eb-8b86-12bb97331649.jpg

同時在STM32F769I-EVAL板這邊也收到數(shù)據(jù)。

544b3d2e-48bf-11eb-8b86-12bb97331649.png

2.發(fā)送數(shù)據(jù)測試

按下板上的USER按鍵,觸發(fā)一次發(fā)送。

此時運行在PC端的Wireshark可以捕獲到STM32F769I-EVAL開發(fā)板發(fā)送的數(shù)據(jù)

547b7124-48bf-11eb-8b86-12bb97331649.jpg

MAC loopback模式演示

定義MAC_LOOPBACK_ENABLE宏,重新編譯下載。

按下板上的USER按鍵,觸發(fā)一次發(fā)送,數(shù)據(jù)被loopback到接收端。

查看rxbuffer接收到的數(shù)據(jù):

54a33ba0-48bf-11eb-8b86-12bb97331649.png

責(zé)任編輯:xj

原文標(biāo)題:工程師筆記 | STM32以太網(wǎng) MAC Loopback的實現(xiàn)

文章出處:【微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    40

    文章

    5343

    瀏覽量

    170804
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354299
  • Mac
    Mac
    +關(guān)注

    關(guān)注

    0

    文章

    1095

    瀏覽量

    51339

原文標(biāo)題:工程師筆記 | STM32以太網(wǎng) MAC Loopback的實現(xiàn)

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    以太網(wǎng)協(xié)議的種類和特點

    (DIX Ethernet) 定義 :以太網(wǎng)II是由DEC、Intel和Xerox(DIX)聯(lián)合定義的,是最早的以太網(wǎng)標(biāo)準(zhǔn)。 特點 :使用MAC地址進行設(shè)備間的通信,幀結(jié)構(gòu)簡單,易于實現(xiàn)
    的頭像 發(fā)表于 11-08 09:10 ?104次閱讀

    以太網(wǎng)端口的類型和特性

    以太網(wǎng)端口,即以太網(wǎng)接口,是網(wǎng)絡(luò)中用于連接設(shè)備并進行數(shù)據(jù)交換的端口。它基于IEEE 802.3標(biāo)準(zhǔn),并使用以太網(wǎng)協(xié)議進行數(shù)據(jù)傳輸。以太網(wǎng)端口在局域網(wǎng)
    的頭像 發(fā)表于 08-07 15:27 ?992次閱讀

    DM9000單芯片快速以太網(wǎng)MAC控制器英文手冊

    電子發(fā)燒友網(wǎng)站提供《DM9000單芯片快速以太網(wǎng)MAC控制器英文手冊.pdf》資料免費下載
    發(fā)表于 07-16 17:30 ?0次下載

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

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

    工業(yè)以太網(wǎng)和普通以太網(wǎng)區(qū)別在哪

    工業(yè)以太網(wǎng)和普通以太網(wǎng)是兩種不同的以太網(wǎng)技術(shù),它們在設(shè)計、性能、應(yīng)用和可靠性等方面存在顯著差異。本文將詳細(xì)介紹這兩種以太網(wǎng)技術(shù)的區(qū)別。 設(shè)計差異 工業(yè)
    的頭像 發(fā)表于 06-11 10:30 ?2178次閱讀

    使用VN5620監(jiān)控記錄以太網(wǎng)總線數(shù)據(jù)#車載以太網(wǎng) #CANape

    以太網(wǎng)硬件
    北匯信息POLELINK
    發(fā)布于 :2024年06月09日 16:45:04

    車載以太網(wǎng)硬件接口VN5620設(shè)備展示與介紹#車載以太網(wǎng)

    車載以太網(wǎng)
    北匯信息POLELINK
    發(fā)布于 :2024年05月31日 10:27:03

    車載以太網(wǎng)接口VN5650使用場景介紹#車載以太網(wǎng)

    以太網(wǎng)
    北匯信息POLELINK
    發(fā)布于 :2024年05月11日 17:58:05

    STM32F429NI是否具備以太網(wǎng)MAC+PHY,無需外接PHY芯片?

    STM32F429NI是否具備以太網(wǎng)MAC+PHY,無需外接PHY芯片
    發(fā)表于 04-07 08:55

    FPGA學(xué)習(xí)-以太網(wǎng)的原理介紹

    以太網(wǎng)鏈路上的數(shù)據(jù)包稱作以太網(wǎng)幀。以太網(wǎng)幀起始部分由前導(dǎo)碼和幀開始符組成。后面緊跟著一個以太網(wǎng)報頭,以MAC地址說明目的地址和源地址。
    的頭像 發(fā)表于 04-02 16:26 ?1526次閱讀
    FPGA學(xué)習(xí)-<b class='flag-5'>以太網(wǎng)</b>的原理介紹

    使用STM32H743做以太網(wǎng),如何檢測以太網(wǎng)是否掉線?

    目前使用STM32H743做以太網(wǎng),目前我這里檢測以太網(wǎng)掉線(物理線纜脫掉)的方式為讀取PHY自動協(xié)商的狀態(tài),但是這個部分放在主循環(huán)中感覺很不好,之前使用的TI芯片,會有一個寄存器的Bit顯示當(dāng)前
    發(fā)表于 03-26 07:42

    工業(yè)以太網(wǎng)的基本原理及優(yōu)勢

    的應(yīng)用前景。 一、工業(yè)以太網(wǎng)的基本原理 工業(yè)以太網(wǎng)基于標(biāo)準(zhǔn)的以太網(wǎng)技術(shù),通過物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層的協(xié)議規(guī)范,實現(xiàn)設(shè)備間的數(shù)據(jù)傳輸和通信。其核心技術(shù)包括實時
    的頭像 發(fā)表于 03-25 14:40 ?592次閱讀

    以太網(wǎng)怎么連接 以太網(wǎng)組網(wǎng)結(jié)構(gòu)分析

    以太網(wǎng)的組網(wǎng)結(jié)構(gòu)涉及多個層面和組件。首先,從網(wǎng)絡(luò)結(jié)構(gòu)的角度來看,以太網(wǎng)分為物理層、數(shù)據(jù)鏈路層和高層用戶層。其中,物理層采用特定的通信媒體,如50Ω基帶同軸電纜,實現(xiàn)數(shù)據(jù)的傳輸。數(shù)據(jù)鏈路層則負(fù)責(zé)數(shù)據(jù)包的處理與轉(zhuǎn)發(fā)。
    的頭像 發(fā)表于 03-08 17:19 ?2968次閱讀
    <b class='flag-5'>以太網(wǎng)</b>怎么連接 <b class='flag-5'>以太網(wǎng)</b>組網(wǎng)結(jié)構(gòu)分析

    一文詳解以太網(wǎng)MAC芯片與PHY芯片

    MII即媒體獨立接口,它是IEEE-802.3定義的以太網(wǎng)行業(yè)標(biāo)準(zhǔn)."媒體獨立"表明在不對MAC硬件重新設(shè)計或替換的情況下,任何類型的PHY設(shè)備都可以正常工作.它包括一個數(shù)據(jù)接口,以及一個MAC和PHY之間的管理接口.
    發(fā)表于 02-19 10:47 ?3754次閱讀
    一文詳解<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>MAC</b>芯片與PHY芯片

    以太網(wǎng)交換機怎么用 以太網(wǎng)交換機有什么用

    以太網(wǎng)交換機是計算機網(wǎng)絡(luò)中常用的網(wǎng)絡(luò)設(shè)備,用于實現(xiàn)局域網(wǎng)內(nèi)的數(shù)據(jù)交換。在本文中,我們將詳細(xì)介紹以太網(wǎng)交換機的基本原理、用途、工作方式以及一些常見的技術(shù)特性。 一、基本原理 以太網(wǎng)交換機
    的頭像 發(fā)表于 02-02 11:41 ?2853次閱讀