4. 以太网基础:TCP/IP协议栈简介、MAC与PHY概念、以太网帧结构、IP地址与端口
好,咱们进入以太网基础部分。说实话,很多做RS485的老工程师,一听到“以太网”三个字就头大。觉得那是搞IT的人玩的,跟咱们嵌入式不沾边。其实不然。你想想看,RS485是物理层的总线,以太网也是物理层加数据链路层的东西。本质上,它们都是在“传比特”。只不过以太网更复杂一些,规矩更多一些。
我个人习惯,在讲RS485转以太网之前,先把这几个核心概念捋清楚。不然你后面写代码、调硬件,很容易掉坑里。
4.1 TCP/IP协议栈简介
TCP/IP协议栈,说白了就是一套“通信规矩”。它规定了数据怎么打包、怎么寻址、怎么保证不丢包。我见过不少初学者,一上来就抱着《TCP/IP详解》啃,结果越看越懵。其实对于咱们做嵌入式硬件和底层驱动的,不需要把每一层都吃透。你只要知道它分四层就够了:
- 应用层:HTTP、MQTT、Modbus TCP 这些。你最终要传的数据,比如温度值、开关状态,就在这一层。
- 传输层:TCP 和 UDP。TCP 可靠但慢,UDP 快但可能丢包。做RS485转以太网,我建议优先用TCP,因为RS485本身是可靠总线,转成以太网后如果还用UDP,调试起来会很痛苦。
- 网络层:IP 协议。负责把数据包从A点送到B点。这里涉及路由、IP地址。
- 链路层:以太网协议。MAC地址、帧结构都在这一层。这也是咱们硬件工程师最需要关注的一层。
嗯,这里要注意。很多芯片厂商提供的TCP/IP协议栈,比如LwIP、uIP,都是把这四层打包好的。你不需要自己写。但你必须理解每一层干了什么,否则出了问题你连日志都看不懂。
4.2 MAC与PHY概念
这是硬件设计里最容易混淆的两个东西。我刚开始做以太网时,也搞不清楚MAC和PHY到底谁管谁。咱们用大白话说:
- MAC(媒体访问控制层):负责把数据封装成帧,加上源MAC和目标MAC,还要做冲突检测。它工作在数据链路层。很多MCU内部集成了MAC,比如STM32的F4/F7系列。
- PHY(物理层):负责把MAC送过来的数字信号,变成模拟信号发到网线上。它处理的是电平、时钟、编码这些物理玩意儿。PHY芯片是独立的,比如LAN8720、DP83848。
说白了,MAC是“大脑”,PHY是“嘴巴”。大脑想好说什么,嘴巴把它喊出去。MAC和PHY之间通过MII/RMII接口通信。我个人习惯,在设计RS485转以太网模块时,尽量选内置MAC的MCU,这样外围只需要一个PHY芯片和几个电阻电容,PCB面积能省不少。
4.3 以太网帧结构
以太网帧,就是数据在网线上跑的时候的真实样子。你抓包看到的就是它。咱们做硬件的不需要背每个字节,但结构你得懂:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 前导码 | 7 | 用于同步时钟,硬件自动处理 |
| 帧起始定界符 | 1 | 表示帧正式开始 |
| 目标MAC地址 | 6 | 接收方的MAC |
| 源MAC地址 | 6 | 发送方的MAC |
| 类型/长度 | 2 | 0x0800表示IP包,0x0806表示ARP |
| 数据 | 46-1500 | 实际传输的数据,不够46字节要填充 |
| 帧校验序列 | 4 | CRC32校验,硬件自动计算 |
你发现没有?MAC地址是帧的核心。没有MAC地址,数据根本不知道发给谁。我调试RS485转以太网模块时,第一步就是确认PHY芯片的Link状态灯亮了没,第二步就是看MAC地址有没有正确写入寄存器。
4.4 IP地址与端口
IP地址,是网络层的概念。它解决的是“这个设备在哪个网段”的问题。MAC地址是硬件地址,出厂就烧死了。IP地址是逻辑地址,你可以随便配。咱们做RS485转以太网模块,通常会给模块配一个静态IP,比如192.168.1.100。这样上位机软件就能直接连它。
端口呢?端口是传输层的概念。它解决的是“数据发给哪个应用程序”的问题。比如你的RS485转以太网模块,既支持Modbus TCP(端口502),又支持HTTP配置(端口80)。如果没有端口,数据包到了设备上,设备不知道应该交给Modbus处理还是交给Web服务器处理。
我建议,在设计模块时,把端口号固定下来,并且在说明书里写清楚。我曾经遇到一个客户,他买的模块默认端口是502,但他上位机软件写的是503,折腾了两天才发现是端口没对上。
好了,以太网基础就这些。你把这些概念搞明白,后面讲RS485数据怎么封装成TCP包、怎么通过PHY发出去,你就不会觉得难了。下一章,咱们开始讲具体的硬件设计——怎么选PHY芯片、怎么画原理图。