2026 / 08 / 26
一文认识嵌入式网络通信:lwIP与瑞萨RA MCU
一、前言
一个基础的嵌入式系统往往是一个相对封闭的系统。
例如一台温控设备可以在本地读取温度、控制风扇,并通过屏幕显示结果。工作人员需要查看设备状态时,可以直接观察屏幕,也可以用串口连接电脑读取数据。
这种方式简单、可靠,在很多场景下也已完全够用。但是,当设备数量增加、安装位置分散或管理要求提高后,完全依赖本地操作就会带来一些问题。
我们分别来看以下一些场景:
1、设备数量增加
如果如果现场只有一台设备,使用串口连接电脑并不困难。但如果一个工厂中有几十台甚至几百台设备,逐台连接和检查的效率就会非常低。
但是当设备接入网络后,通过交换机连接到统一的管理服务器后,就可以由服务器集中采集状态和下发命令。
2. 设备距离管理人员越来越远
有些设备安装在机房、楼顶、生产线内部或者其他城市。维护人员不可能每次都到现场读取数据和修改参数。接入局域网或互联网后,设备就可以被远程访问和维护
3、产品化需求
传统串口通信需要开发专用上位机并定义自己的数据格式。但是IP网络通信可以使用HTTP、MQTT等通用方式与云平台对接。
除此之外,传统设备的软件升级需要工作人员拆开外壳链接调试器更新程序,而网络通信则为远程日志、故障诊断与OTA固件升级提供了数据通道。
因此,在嵌入式开发中,网络通信最初就是为了让设备具备更远的远程连接、集中管理和标准化接入能力。
在物联网时代与早期AI时代的发展中,终端设备就通过网络将图像、声音和传感器等信息上传云端,由服务器完成模型推理和分析。
当然,在现在随着芯片算力提升和模型轻量化,AI任务逐渐向设备端下沉,AI可以在本地就完成识别和判断。实现边缘设备负责实时感知和本地决策、云端负责模型训连与集中管理,网络承担结果上传、模型更新和云边协同的AIOT系统。
因此网络通信的重要性不言而喻。
二、什么是网络通信
正如前文所说,网络通信最开始大多应用于解决多设备、远距离与一些相关产品化需求。因此网络通信也可以简单理解为:
多台设备通过有线或无线方式接入同一个网络,并按照共同认可的通信规则发送和接收数据。
为了达成这个最终目标,开发者要解决这样一些问题:如何识别不同设备、如何确定数据应该发到哪里、数据如何跨越交换器和路由器、大数据传输、数据丢失/错误处理等等。
因此,为了统一解决这些问题,开发者就制定了一套通用的网络规则叫做TCP/IP协议族,我们常说的网络接入层、网络层、传输层和应用层正是对常见TCP/IP协议的解读。我们一起来看一看:
首先是网络接入层,这一部分严格意义来说不属于TCP/IP协议,它决定的是数据通过什么介质进行传输,我们常说的WIFI、以太网就属于这一类。
其次就是网络层,网络层解决的是设备识别、确定数据发往哪里的问题,典型协议就是IP协议,IP协议通过IP地址识别不同的目标设备,并处理不同网络之间的数据传输。
然后就是传输层,作用和它的名字一样,解决数据怎么传输以及传输过程会出现的各种问题。典型协议就是TCP协议和UDP协议,二者的区别是TCP协议建立的是可靠连接,会对数据进行排序并在必要时重新发送丢失的数据,因此非常适合用在对数据传输正确性有严格要求的场景比如OTA固件升级。而UDP则更关注实时性,允许少量数据丢失也没有关系,比如实时音频和视频传输这种情况。
最后就是应用层,应用层负责解决双方具体交换什么内容,常见协议有MQTT、HTTP、Modbus TCP等等。
这里我们来举个例子,假设一台嵌入式设备提供了网页配置功能,用户在浏览器中输入了该设备的IP地址,那么背后的逻辑就是这样的:
- 嵌入式设备接入以太网或WIFI获得一个IP地址;
- 浏览器根据IP地址找到目标设备;
- TCP在浏览器与设备之间建立可靠连接;
- 最后HTTP解决浏览器如何请求页面以及设备如何返回页面
整个通信过程就是:HTTP → TCP → IP → 以太网或Wi-Fi
设备接收数据时,就按照相反的顺序进行解析。
这样一来,每个层次只需要解决自己负责的问题:以太网和Wi-Fi负责传输,IP负责寻址,TCP负责可靠连接,HTTP负责网页内容。
三、MCU如何实现TCP/IP网络通信
在嵌入式系统中。实现TCP/IP网络通信主要有一下几种方案。
1、使用硬件TCP/IP芯片
以W5500为代表的网络芯片在芯片内部实现了常用的TCP/IP功能。MCU可以通过SPI等接口控制芯片、建立连接并收发数据,这种方法最传统,MCU不需要运行完整的TCP/IP协议栈,相应的对MCU的FLash/RAM等资源/性能的要求也较低,但是局限也很明显就是功能较为固定,需要增加外部芯片和PCB空间,后续拓展功能会受到硬件能力的限制。所以这种方案适合MCU资源有限以及网络需求相对固定的项目。
2、使用内置TCP/IP协议栈的通信模块
部分Wi-Fi和蜂窝通信模块内部已经集成了TCP/IP协议栈。主控MCU不需要处理底层TCP/IP协议,只需要通过UART、SPI等接口向模块发送命令例如获取IP地址、连接指定WIFI等。
瑞萨的DA16200MOD/DA16600等就是这类产品。它们内部运行完整的TCP/IP协议栈,可以通过AT命令使用Wi-Fi、TCP、UDP、HTTP、MQTT和OTA等功能。其中,DA16600MOD还集成了BLE。
这种方案的优缺点和上述方案1类似,都把TCP/IP处理放在外部芯片或模块中,对主控MCU的资源要求很低,但网络功能受到模块固件和AT指令的限制。它和方案1的区别就在于W5500主要提供有线以太网和基础Socket通信,DA16200等主要提供的是无线连接并集成更多的网络应用功能。
3、在MCU中运行TCP/IP协议
还有一种方案自然就是在MCU中直接运行软件TCP/IP协议栈,瑞萨的RA6M3、RA6M4、RA6M5和RA8D1等MCU已经集成以太网MAC控制器,可以配合外部PHY接入以太网,再由MCU内部的软件协议栈完成网络通信。
这种方式会占用一定的Flash、RAM和处理器资源,但网络功能更加灵活,开发者可以根据项目需求添加HTTP、MQTT、Modbus TCP和OTA等功能。
嵌入式常见的软件TCP/IP协议栈实现有以下几种:
- FreeRTOS+TCP
- NetX Duo
- lwIP
- Zephyr网络协议栈
与硬件TCP/IP芯片和通信模块相比,在MCU中运行协议栈对软件开发的要求更高,但开发者对网络功能也拥有更高的控制能力。

对于瑞萨RA开发者来说,FSP均已经为这些常见协议栈提供了相应支持:
FreeRTOS+TCP:提供与RA以太网驱动连接的适配模块;
NetX Duo:提供以太网和Wi-Fi驱动,可以与ThreadX配合使用;
lwIP:提供以太网驱动以及裸机、FreeRTOS适配层,可以通过FSP图形化配置;
Zephyr网络协议栈:不属于FSP体系,但瑞萨已经为几乎全部的RA芯片提供了Zephyr支持,可以使用Zephyr自带的网络功能。 借助e² studio中的FSP配置界面,开发者可以选择需要的协议栈和底层驱动,设置IP地址、网络缓冲区等参数,并自动生成基础配置代码。
而在这些软件TCP/IP协议栈中,lwIP凭借开源、轻量和易于裁剪等特点,成为MCU网络开发中应用较广的一种方案。
四、瑞萨与lwIP
通过上文的介绍,我们可以知道lwIP就是是一套面向嵌入式设备开发的轻量级开源TCP/IP协议栈。
TCP/IP规定了设备进行网络通信时需要遵守的规则,而lwIP则通过软件代码实现这些规则,使Flash和RAM相对有限的MCU也能够使用IP、TCP、UDP、DHCP和DNS等网络功能。
对比其他的方案,lwIP的特点是轻量、开源并且易于裁剪。它既可以运行在裸机环境中,也可以与FreeRTOS等RTOS配合。它的局限是部分参数、缓冲区和线程需要开发者根据项目进行配置,HTTPS等加密功能还需要配合Mbed TLS等其他软件组件。
FreeRTOS+TCP就是面向FreeRTOS开发的TCP/IP协议栈,优点是能够与FreeRTOS的任务、队列和内存管理方式配合,适合已经使用FreeRTOS的项目。它的局限是对FreeRTOS依赖较强,如果项目没有使用FreeRTOS,那么使用lwIP就是一个很好的选择。
NetX Duo是一套功能较为完整的TCP/IP协议栈,支持IPv4和IPv6,并且能够与ThreadX紧密配合。它适合已经采用ThreadX,或者需要较完整网络功能的项目。不过,它与ThreadX开发体系联系较为紧密,切换到其他操作系统时需要重新适配。
Zephyr网络协议栈则是Zephyr系统的一部分,可以与Zephyr的驱动、设备模型和系统组件统一使用,适合基于Zephyr开发的产品。
相比之下,lwIP对操作系统的依赖较少,资源占用相对较低,使用方式也更加灵活,因此成为MCU网络开发中应用较广的一种TCP/IP协议栈。
对于瑞萨RA开发者来说,FSP已经提供了lwIP、底层以太网驱动以及相关适配模块,并支持通过e² studio完成基础配置。