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

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

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

3天內不再提示

如何在i.MX RT微控制器上初始化LWIP協議棧

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2024-10-12 11:48 ? 次閱讀

在i.MX RT微控制器上初始化LWIP協議棧是一個復雜但有趣的過程,它涉及多個步驟和關鍵組件的配置。以下是該初始化流程的介紹:

LWIP協議棧與開發平臺簡介

LWIP(Light Weight IP),是一種輕量化且開源的TCP/IP協議棧。LwIP在有限的RAMROM條件下,實現了一個完整的TCP/IP 協議棧,并且LwIP在MCU平臺上得到了非常廣泛的應用。此外,它既可以基于操作系統運行,也可以在裸機情況下運行。

TCP/IP協議棧的模型結構如下圖所示:

b02e601a-877e-11ef-b8af-92fbcf53809c.png

本篇文章基于i.MX RT四位數跨界MCU平臺,RT四位數跨界MCU最高主頻可達1Ghz,并且搭載了很多性能強勁的外設,廣泛的應用于工業,自動化,IoT,消費電子等領域,并且NXP官方提供免費的IDE,開發工具以及SDK軟件包等,為開發者提供了全面的支持。

以太網接口及PHY管理接口硬件初始化

Ethernet MAC與PHY之間通過以太網接口連接,常見的接口有RMII,MII等。與此同時,RT四位數上的EthernetMAC外設也配備了PHY管理接口,可通過MDC MDIO來實現PHY相關寄存器的讀寫。

此處以RT1060舉例,在RT1060 EVK上默認使用的是RMII以太網接口,對照原理圖完成RMII相關管腳的初始化。

b0532292-877e-11ef-b8af-92fbcf53809c.png

MDC,MDIO初始化:

b06dd024-877e-11ef-b8af-92fbcf53809c.png

PHYINIT以及RESET管腳初始化,配成GPIO輸出即可:

b094b608-877e-11ef-b8af-92fbcf53809c.png

RMII的TX_CLK由MCU提供,因此要將TX_CLK的方向配置為輸出:

b0a8dd68-877e-11ef-b8af-92fbcf53809c.png

至此,以太網接口,PHY管理接口等硬件配置基本初始化完成。

LWIP時基初始化與超時事件注冊

在LWIP中,經常會進行一些超時判定,例如ARP緩存表的時間管理,IP分片數據報的重裝等待超時等等,并且LwIP也提供了超時事件注冊函數sys_timeout,在RT1060官方SDK的ping bm demo中就是通過超時事件來發送ping請求。

而超時的判定需要一個時基,MCU中一般會用系統滴答定時器來作為時基,且時間間隔設置為1ms并開啟中斷。每一次進中斷都會將當前時間加1。設置滴答定時器的代碼如下圖所示。

b0bcfbcc-877e-11ef-b8af-92fbcf53809c.png

在LWIP協議棧初始化時,也需要注冊一些超時事件,通過調用sys_timeout函數,該函數中又會調用sys_timeout_abs函數。

在sys_timeout_abs函數中會計算出超時事件即將超時的時間,并且根據超時時間將這些超時事件連接成一個鏈表,如下圖所示。當超時發生時就會調用對應的處理函數。

b0c68020-877e-11ef-b8af-92fbcf53809c.png

SDK中會把需要注冊的超時事件都放在一個數組中,在初始化時調用注冊函數去一個個注冊這些超時事件。超時事件數組如下圖所示。

b0f03442-877e-11ef-b8af-92fbcf53809c.png

LWIP內存堆內存池初始化

在LwIP中,內存分配策略一般有兩種,一種是分配固定大小的內存塊。如TCP 首部、UDP 首部,IP 首部,以太網首部等都是固定的數據結構,其大小就是一個固定的值,那么我們就能采用這種方式分配這些固定大小的內存空間,這樣子的效率就會大大提高。另一種是利用內存堆進行動態分配,屬于可變長度的內存塊。

在LWIP協議棧初始化時一定要對這兩種內存分配方式進行初始化,方便后續協議棧進行相關內存分配。內存堆初始化代碼如下所示,其中LWIP_RAM_HEAP_POINTER實際上就是分配的內存堆數組首地址。

b103a5c2-877e-11ef-b8af-92fbcf53809c.png

內存堆數組大小為想要分配的內存堆大小對齊后再加上兩倍的mem結構體對齊后的大小,mem結構體中會存放一些內存堆相關管理信息,宏定義如下圖所示。

b11d5d6e-877e-11ef-b8af-92fbcf53809c.png

不難看出在內存堆初始化代碼中實際上就是初始化了兩個mem結構體。第一個mem結構體在內存堆起始地址處,next成員為MEM_SIZE_ALIGNED, prev和used成員皆初始化為0。

第二個mem結構體ram_end設置為內存堆首地址偏移MEM_SIZE_ALIGNED處,used變量設置為1,next和prev皆指向偏移MEM_SIZE_ALIGNED的位置。

內存池初始化函數為memp_init,如下圖所示。它使用輪詢的方式調用memp_init_pool去初始化每一類內存池,memp_pools數組中存放了初始化過的memp結構體。

b133a5ce-877e-11ef-b8af-92fbcf53809c.png

在memp_init_pool中會根據初始化過的memp結構體中的一些參數,比如下圖中所示的num,num代表有多少個內存塊,memp_init_pool中會根據num將內存塊連接成單鏈表。

b148ff64-877e-11ef-b8af-92fbcf53809c.png

網卡掛載及初始化

調用netif_add來掛載網卡,netif結構體是抽象出來的網卡結構體,IP地址,網關,子網掩碼等都會保存在該結構體中。網卡初始化函數也會作為參數之一傳入netif_add函數,并在netif_add函數中被調用。在該初始化函數中最終會完成以下幾部分初始化:

1.以太網相關數據結構的初始化,包括rx_buffer,tx_buffer, buffer descriptor,buffer descriptor ring。初始化這些數據結構,以便在接收發送以太網數據時使用。

2.phy的初始化,初始化以太網外設中的MDC MDIO,如下圖所示。

b16495da-877e-11ef-b8af-92fbcf53809c.png

通過MDC MDIO去操作PHY相關的寄存器,例如去配置PHY的百兆千兆模式,軟復位PHY,檢查自動協商,連接狀態以及配置LED等等。確保PHY工作在想要的狀態下,部分初始化PHY的代碼如下所示。

b17482f6-877e-11ef-b8af-92fbcf53809c.png

3.設置netif相關參數,例如MAC地址長度,MTU,flags,以及網絡接口層輸入,網絡接口層輸出函數等。

4.初始化Ethernet MAC外設,去配置以太網外設中的接口類型,速度,工作模式,中斷等等。部分配置代碼如下所示。

b187f836-877e-11ef-b8af-92fbcf53809c.png

LWIP不同API初始化

在完成上述初始化流程之后,還需要調用一些LwIP提供的API,LwIP常用的API有RAW API, Socket API, NETCONN API三種,前者是不需要基于操作系統的,后兩者需要基于操作系統運行。這三種API在初始化時也是不同的,Socket API和NETCONN API類似,此處以RT1060 SDK中的ping demo來舉例說明。

首先是RAW API,在raw.c中定義了一個raw_pcb結構體,初始化時會定義一個新的raw_pcb結構體并插入raw_pcbs鏈表。并且給新定義的raw_pcb賦初值,如下圖所示,通過raw_recv綁定ping_recv函數。通過raw_bind綁定IP地址,并且注冊一個超時事件,超時時就調用ping_timeout函數,參數為ping_pcb。在ping_timeout函數中會發送ping請求。

b1936b80-877e-11ef-b8af-92fbcf53809c.png

當LWIP跑在操作系統上時,LWIP協議棧是作為一個獨立線程存在的。因此,在初始化時要創建tcpip_thread線程。用戶代碼與tcpip_thread線程之間是通過郵箱進行數據的交互的。因此,在初始化時也需要創建一個郵箱。

b1ac9eb6-877e-11ef-b8af-92fbcf53809c.png

在使用Socket API時,首先要調用lwip_socket函數向內核申請一個套接字,然后調用setsockopt設置套接字的一些選項。接著就可以調用lwip_sendto函數去發送數據包。調用recvfrom函數接收數據包。

至此,在i.MX RT使用LwIP協議棧初始化流程介紹完畢,通過理解和實踐這些步驟,開發者可以在i.MX RT微控制器上成功初始化LWIP協議棧,并實現網絡通信功能。

總體看來,整個初始化流程還是相對復雜的,這個過程不僅涉及硬件驅動編程和TCP/IP協議棧的配置,還需要對內存管理、中斷處理、超時檢查等關鍵知識點有深入的理解。感興趣的讀者可以下載RT四位數的SDK深入了解。

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

    關注

    48

    文章

    7649

    瀏覽量

    152107
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79301
  • LwIP
    +關注

    關注

    2

    文章

    88

    瀏覽量

    27361
  • 協議棧
    +關注

    關注

    2

    文章

    144

    瀏覽量

    33702

原文標題:在i.MX RT使用LWIP協議棧的初始化流程

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【大聯大品佳 NXP i.MX RT1050試用申請】i.MX RT1050 3D打印機控制器

    項目名稱:i.MX RT1050 3D打印機控制器試用計劃:申請理由本人在開源硬件行業有五年多的學習和開發經驗,曾設計多款FDM,SLA,LCD 3D打印機控制板,參與公司3D打印機的
    發表于 08-10 18:23

    i.MX RT1050平臺的相關資料推薦

    的首款跨界處理。該處理器具備應用處理的高性能與高度集成的優勢,更具有微控制器的易用性和實時功能。NXP Semiconductors(恩智浦半導體)公司根據用戶成本需求,在 i.MX
    發表于 11-29 07:19

    如何使用sdphost的ROM引導加載程序中區分i.MX RT1062和i.MX RT 1064?

    有什么方法可以通過讀取特定寄存來確定微控制器類型,而不是系列或 UID?我想在使用 sdphost 的 ROM 引導加載程序中區分 i.MX RT1062 和
    發表于 04-27 08:37

    恩智浦i.MX RT600跨界微控制器在功耗、性能和存儲方面有顯著特點

    恩智浦半導體近日宣布i.MX RT600跨界微控制器 (MCU) 上市,這是一款面向音頻、語音和機器學習等超低功耗、安全邊緣應用的理想解決方案。
    的頭像 發表于 03-15 14:29 ?2794次閱讀

    恩智浦i.MX RT1170開創GHz MCU時代

    自2017年上市以來,i.MX RT系列取得了優秀的市場表現。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發表于 03-22 11:14 ?3535次閱讀

    恩智浦i.MX RT1170在將該系列帶上了更高的層面

    自2017年上市以來,i.MX RT系列取得了優秀的市場表現。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發表于 05-18 11:15 ?3846次閱讀

    i.MX RT開發筆記-01 | 初識 i.MX RT1062 跨界MCU

    一、跨界處理i.MX RT 系列 MCU 是由 NXP 推出的跨界處理,跨界是指該系列MCU的定位既非傳統的微控制器、也非傳統的微處理
    發表于 10-29 10:21 ?28次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發筆記-01 | 初識 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062 跨界MCU

    【044】SylixOS 正式支持 i.MX RT1050平臺

    的首款跨界處理。該處理器具備應用處理的高性能與高度集成的優勢,更具有微控制器的易用性和實時功能。NXP Semiconductors(恩智浦半導體)公司根據用戶成本需求,在 i.MX
    發表于 11-19 12:51 ?14次下載
    【044】SylixOS 正式支持 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050平臺

    i.MX RT開發筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    系列文章目錄i.MX RT開發筆記-01 | 初識 i.MX RT1062 跨界MCUi.MX RT
    發表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量<b class='flag-5'>控制器</b>NVIC(按鍵中斷檢測)

    RT-Thread & NXP 發布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界處理系列。該系列下又包括 i.MX RT1020、i.MX
    發表于 12-07 13:06 ?2次下載
    <b class='flag-5'>RT</b>-Thread & NXP 發布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    何在i.MX RT1050使用FlexIO模塊模擬XY2-100振鏡通信協議接口

    一、概述 本文介紹了如何使用i.MX RT系列芯片的FlexIO實現XY2-100激光振鏡控制協議。FlexIO模塊是NXP Kineti
    的頭像 發表于 05-18 09:22 ?3822次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050使用FlexIO模塊模擬XY2-100振鏡通信<b class='flag-5'>協議</b>接口

    i.MX RT10xx使用FlexIO實現XY2-100振鏡控制協議

    本文介紹了如何使用i.MX RT系列芯片的FlexIO實現XY2-100激光振鏡控制協議。FlexIO模塊是NXP Kinetis和
    的頭像 發表于 05-18 09:21 ?6089次閱讀
    在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>10xx使用FlexIO實現XY2-100振鏡<b class='flag-5'>控制</b><b class='flag-5'>協議</b>

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發表于 10-24 15:46 ?865次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問題

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統
    的頭像 發表于 10-26 16:27 ?1115次閱讀
    基于NXP<b class='flag-5'>微控制器</b><b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170的多人體實時檢測算法和系統

    使用LwIP協議淺析實戰分析(i.MX RT

    LWIP協議與網絡分層 LwIP(Light weight IP),是一種輕量化且開源的TCP/IP協議,它可以在有限的RAM和ROM條件
    的頭像 發表于 02-02 17:05 ?1912次閱讀
    使用<b class='flag-5'>LwIP</b><b class='flag-5'>協議</b><b class='flag-5'>棧</b>淺析實戰分析(<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>)
    主站蜘蛛池模板: 免费特黄一区二区三区视频一 | 美女牲交毛片一级视频 | 美国三级网 | 亚洲一区二区三区四区在线观看 | 亚洲欧美精品一区二区 | 午夜视频网 | 国产gaysexchina男同men1068 | 国产片91人成在线观看 | 一区二区三区中文字幕 | 91md天美精东蜜桃传媒在线 | 激情五月婷婷丁香 | 一级一级18女人毛片 | 欧美草比| 欧美一级欧美三级 | 99综合在线 | 午夜免费视频福利集合100 | 国产免费色视频 | 高清欧美日本视频免费观看 | 午夜视频欧美 | 国产一区二区精品 | 日韩黄色免费 | 黄色大片网 | 天堂tv亚洲tv日本tv欧美人tv | 艹逼视频免费观看 | 女人精69xxxxxx | 欧美片欧美日韩国产综合片 | 福利视频网站 | 视色4se视频在线观看 | 狠狠狠狠狠狠 | 国产精品久久久久久久久免费 | 伊人啪| 7777色鬼xxxx欧美色夫 | 午夜国产精品久久影院 | 久久99国产亚洲高清观看首页 | 色综合天天综合网看在线影院 | 五月激情婷婷丁香 | 看片在线| 四虎永久网址影院 | 成人区精品一区二区毛片不卡 | 亚洲免费mv | 国产手机在线观看视频 |