账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
将lwIP TCP/IP堆叠整合至嵌入式应用的途径
 

【作者: Anju Puthenpurayil】2025年02月05日 星期三

浏览人次:【13473】

轻量化TCP/IP(lwIP)堆叠是TCP/IP协定的精简实作,专门设计用来缩减RAM记忆体的使用量,这使其非常适合用在嵌入式系统。它提供三种独特的应用程式介面(API):


· 未封装的低阶API


· 负责网路通讯的高阶 API


· BSD 风格的socket通讯端 API


本文专注探讨使用未封装API介面的范例。运用未封装API建置callback回呼函数的应用程式会由核心事件触发。


尽管未封装API较socket通讯端API更为复杂,但由於其处理负荷(overhead)较低,因此能提供高出许多的吞吐量。


接着将探讨几个建构在lwIP TCP/IP堆叠之上的范例,其中采用Analog Devices的MAX32570微控制器。开始的部分是一个ping展示,主要从PC向装置发送ping探测讯号。後续的部分介绍TCP Echo伺服器范例,这个初步的伺服器展示对於测试TCP连结相当实用。


ADI的MaximSDK软体开发套件收录许多必要的软体与工具,让用户针对ADI的MSX32xxx微控制器开发韧体。套件中有一个lwIP堆叠函式库档案「MaximSDK\Libraries\lwIP」。图一显示MaximSDK资料夹结构中的lwIP函式库档案。


图一 : ADI的MaximSDK lwIP 函式库档案
图一 : ADI的MaximSDK lwIP 函式库档案

lwIP资料夹包含多个子目录:


?API 资料夹(网路通讯与 socket 通讯端API)


?核心资料夹(lwIP 核心档案,包含 “tcp.c”、“ip.c” 等)


?Netif 资料夹(网路介面档案)


?Include 资料夹(所有lwIP include 引入档案)


?Maxim资料夹(为ADI微控制器设计的客制化mac 驱动程式)


lwIP架构依循TCP/IP模型结构。TCP/IP通讯协定是多个分层组成的协定。TCP/IP通常被看成是一个四层结构的系统,如图二所示。



图二 : TCP/IP 通讯协定分层
图二 : TCP/IP 通讯协定分层

lwIP 专案档中一定有一个名为「lwipopts.h」的组态档案,以及一个名为「opt.h」的组态档案。「opt.h」档案中记录所有预设的堆叠组态以及其模组组态,而「lwipopts.h」则让使用者能自行设定堆叠与其模组的所有组态。须注意这个档案并未包含所有可能的lwIP选项。因此,如果在“lwipopts.h”组态档案中没有定义某项组态,系统就会采用「opt.h」中定义的预设组态。


类似的情况,lwIP函式库有一个和程式相关的表头档案名为 「lwipcfg.h」。包括控制器的IP位址、闸道器位址、网路遮罩位址、以及MAC位址都应定义在「lwipcfg.h」档案。


要在lwIP以及底层的硬体驱动程式之间建立连结,需要用到一个特定平台专属的配接层。举例来说,在为微控制器建置lwIP堆叠时,需要量身设计的驱动程式来桥接lwIP堆叠与微控制器的乙太网路MAC驱动程式。这个客制化驱动程式应涵盖以下功能:


?初始化功能: 此项功能负责初始化微控制器专属的MAC驱动程式


?传送功能: 将从TCP堆叠收到的资料传送给乙太网路MAC驱动程式,以便进行後续的传输


?接收功能: 将从乙太网路MAC驱动程式收到的封包转送到TCP堆叠


对於ADI微控制器,预存的客制化驱动程式已放在「MaximSDK\Libraries\lwIP\Maxim\mxc_eth.c」路径下的MaximSDK。这个驱动程式可作为包装器,能包装微控制器本身的Ethernet MAC (EMAC)周边函式库,该函式库位於「C:\MaximSDK\ Libraries\PeriphDrivers\Source\EMAC」路径下的周边驱动程式中。


Ping 范例

「ping」指令是一个简单的工具,用来进行网路除错。其能执行网际网路控制讯息协定(ICMP)的echo 回应请求,向指定的IP位址传送一个讯号然後等候回覆。当目的地收到这个请求,就会回覆一个echo封包。本章节解释如何从Windows PC向微控制器执行基本的ping测试以检查其连结状态,同时还会阐述如何使用微控制器的ping模组来和PC进行通讯。


以下详列Windows环境中ping工具的工作流程:


?向微控制器传送4个资料封包,然後等待回应


?微控制器将这些资料封包传回PC作为回应,亦即??响答覆请求。


?执行ping测试


?使用乙太网路线将微控制器EVKIT套件连到PC


?开启命令列提示视窗,然後输入「ping <微控制器的IP位址>」然後按下enter键


命令列提示视窗中显示回应,如图三所示,意谓着在PC与微控制器之间已建立正常运行的连结



图三 : 命令列提示视窗显示的 Ping输出内容
图三 : 命令列提示视窗显示的 Ping输出内容

从微控制器测试Ping

「lwIP_Ping」档案是ADI旗下MAX32570微控制器的ping范例,收录於MaximSDK开发套件。该档案存放在「C:\MaximSDK\Examples\ MAX32570\lwIP_Ping」,目录中并提供以下指南:


?微控制器的IP位址是使用「lwipcfg.h」档案来设定。微控制器与PC的IP位址应在同一个网段。在微控制器的「lwipcfg.h」档案中,PC的IP位址应设定成闸道器位址。


?使用乙太网路线连接PC与MAX32570 EVKIT套件


?执行ping范例码


?在eclipse程式中开启序列终端机 (Window-> Show view -> Terminal)。如图四所示,如果ping成功,终端机画面应显示ping的结果



图四 : 序列终端机显示的Ping 输出内容
图四 : 序列终端机显示的Ping 输出内容

命令列提示视窗仅显示ping统计资料。要检视实际传送的资料,需要用到一个名为Wireshark的程式。Wireshark能撷取网路连线所传送的资料。开启Wireshark後,再选择乙太网路选项。另外还能显示像是来源与目的地MAC位址、来源与目的地IP位址、通讯协定、以及额外传送资料等细部资料。Wireshark显示的资讯如图五所示。


正如范例所示,传送的资料为 0x00, 0x01… 一直到0x1F。但如果使用者想要修改传送资料的内容那该怎麽做?



图五 : Wireshark程式中显示的ping资料封包
图五 : Wireshark程式中显示的ping资料封包

修改微控制器Ping指令所发送的资料

透过ping指令发出的资料是在「ping. c」档案中设定的。「Ping.c」档案是ping的传送程式模组。要传送的资料大小是以「PING_DATA_SIZE」叁数设定在“ping.c”档案中。例如要传送的资料大小为32 位元组。


准备要传送的资料的定义亦写在「ping.c」档案。额外的资料缓冲区会写入相同的资料,如「0x00, 0x01, 0x02…to 0x1F.」。


依据应用程式的需求,如果使用者想要修改资料,可以在「ping .c」档案中修改资料缓冲区。举例来说,将所有32位元组的资料变更成「0x01, 0x01…0x01」。在Wireshark中显示修改後的「ping .c」档案。此处使用新的叁数来更新资料。


TCP Echo 伺服器

ping范例中采用ICMP来判断目标系统的反应状况。其会使用预设资料透过网路向目标接收端传送一个echo请求。当目标位址收到这个请求时,它会回覆一个echo应答封包。


如果使用者希??从某个装置向另一个装置传送客制化资料,可使用TCP协定进行资料传输。在标准TCP函式中的Echo服务主要用来检查可及性以及判断各种路由问题。在这项服务中,伺服器与客户端都是使用TCP来建立的。当伺服器从客户端收到讯息,它会回覆相同的讯息。


在MaximSDK,「lwIP TCP」原始码档案展示如何使用lwIP函式库中的 TCP函数。在这个案例中,微控制器扮演TCP伺服器,并会等候客户端发送连接请求。接着伺服器会返传从客户端送来的资料。在TCP Echo伺服器范例中,应使用「tcpecho_raw.c」原始码档案。依循以下步骤设定TCP Echo伺服器。


要设定TCP Echo伺服器:


?建立一个 socket


?将socket绑定到宣告的埠号


?完成绑定後,其会开始监听传来的连接请求


?收到连接请求後,其会接受客户端设备发送来的连接请求


?伺服器接收到客户端传来的资料


?最後,其传回相同的资料


图六的指令码显示了韧体的结构,该结构是主函数的一部分。config_emac会初始化EMAC,而MXC_ETH_Init 则会初始化 lwIP堆叠。



图六 : 从指令码片断观察韧体的结构
图六 : 从指令码片断观察韧体的结构

在EMAC与lwIP堆叠完成初始化後,TCP Echo 伺服器会透过tcpecho_raw_init进行初始化。Echo伺服器结构如图七所示。



图七 : Echo 伺服器初始化结构.
图七 : Echo 伺服器初始化结构.

Echo伺服器的初始化会建立新的socket。之後它会将指定的IP位址和埠号绑定到新的socket。完成绑定後,其会持续监听远端客户端发送的连接请求。


要测试TCP伺服器范例,须使用 echotool.exe PC 客户端工具。echotool.exe执行档应存放在C槽,故我们应从C槽开启命令列提示视窗。在客户端模式中,其会将资料传送到伺服器并检查是否会回传。确保一定要在客户端模式中使用echo工具来测试伺服器范例。


如何测试 TCP Server 范例

?确保所有连结都正常运行


?使用eclipse软体将范例程式码组建成可执行程式


?在除错模式中执行指令码


?在远端PC开启命令列提示视窗。


?在命令列提示栏中输入以下指令:


「C:\>echotool IP_address /p tcp /r 7 /n 15 /t 2 /d LwIP TCP echo server Example」


IP_address 是实际的机板IP 位址。静态 IP 位址为192.168.100.200


/p tcp 是通讯协定 (TCP协定)


/r 是??应伺服器的实际远端通讯埠 (echo port)


/n 是echo请求的数量


/t 是连接时长限制的秒数


/d 是请求回应的讯息 (像是 「LwIP TCP echo server Example」)



图八 : TCP Echo 伺服器输出内容
图八 : TCP Echo 伺服器输出内容

TCP协定和透过网路传送的资料,都可透过Wireshark软体进行检验。透过网路传送的封包在会Wireshark中显示,如图九所示。透过命令列提示栏传送的资料为「LwIP TCP echo server Example」。在Wireshark程式中也能看到相同的资料。



图九 : Wireshark 程式中的TCP Echo 伺服器输出结果
图九 : Wireshark 程式中的TCP Echo 伺服器输出结果

总结

了解并有效率地运用lwIP堆叠的功能以及ICMP协议为基础的ping工具和TCP协定,能为网路诊断以及资料传输开创出众多的可能性。ADI的MAX32570微控制器与MaximSDK 提供一个扎实的基础来建置lwIP堆叠,并建构可靠的通讯系统。藉由依循本文列举的范例,即可排除各种网路问题,进而创造无缝的连结以及确保资料完整性。


(本文作者Anju Puthenpurayil为ADI应用工程师)


相关文章
次世代汽车的车用微控制器
汽车微控制器技术为下一代车辆带来全新突破
以马达控制器ROS1驱动程式实现机器人作业系统
探讨用於工业马达控制的CANopen 协定
确保机器人的安全未来:资安的角色
相关讨论
  相关新闻
» VLSI TSA研讨会4月将登场 聚焦高效能运算、矽光子、量子计算
» 台积电与英特尔合资企业有影无? 专家认为技术整合与营运管理是挑战
» 2奈米制程竞争白热化 台积电领先、三星追赶、英特尔奋力
» Google发表大语言模型实体机器人:Gemini Robotics
» 美国研究团队发表智能检测技术 大幅提升制造精度与效率


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2025 远播信息股份有限公司版权所有 Powered by O3  v3.20.2048.13.59.85.64
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw