ESP-NETIF L2 TAP
概述
ESP-NETIF L2 TAP 接口是 ESP-IDF 访问用户应用程序中的数据链路层(OSI/ISO 中的 L2)以进行帧接收和传输的机制。在嵌入式开发中,它通常用于实现非 IP 相关协议,如 PTP 和 Wake on LAN 等。
Tips : 目前 ESP-NETIF L2 TAP 接口仅支持以太网 (IEEE 802.3)。
L2 TAP接口示例解析
https://github.com/espressif/esp-idf/tree/master/examples/protocols/l2tap
使用 VFS 的文件描述符访问 ESP-NETIF L2 TAP 接口,VFS 文件描述符会提供类似文件的接口(调用 open()
、read()
、write()
等函数访问),详情请参阅 虚拟文件系统组件,更多接口说明请参考ESP-NETIF L2 TAP 接口使用手册。****
示例用法具体:
- 使用阻塞
read()
等待帧并将其回显给发起者。 - 使用带有超时和非阻塞
read()
的select()
等待帧,并将其回显给发起者。 write()
定期广播传输“Hello 消息”,以显示要传输的以太网帧的正确结构。
示例总体逻辑:
初始化: 系统启动后,ESP32 初始化 L2 TAP 接口和以太网网络,并设置一些 GPIO。
回显和广播任务:
echo_l2tap_task()
和nonblock_l2tap_echo_task()
监听以太网接口上接收到的数据包,并将其原样回显。hello_tx_l2tap_task()
负责隔一段时间向网络广播 “Hello” 消息。
示例代码块:
非 IP 相关协议实现
LAN唤醒
概述:
LAN唤醒(Wake-on-LAN, WoL)是一种网络标准,允许通过局域网(LAN)唤醒计算机或其他设备。它通过发送特定的网络数据包,通常称为“魔术包”(Magic Packet),远程启动处于待机或休眠状态的设备。该技术广泛应用于网络管理、远程控制和自动化系统中,可以远程启动设备而无需物理访问。
实现方式:
- 配置睡眠模式和唤醒源:ESP32可以进入深度睡眠模式,并通过网络唤醒设备。我们可以使用FreeRTOS任务来监听网络数据包,并在收到魔术包时唤醒设备。
- 实现Wake-on-LAN魔术包检测:通过监听以太网接口获取到指定的广播数据包,判断数据包内容来执行对应的操作。
- 触发唤醒机制:如果检测到魔术包,则通过配置ESP32的唤醒机制来控制设备的唤醒。
PTP
概述:
PTP 是一种网络协议,用于在局域网中提供子微秒级精度的时间同步,常用于工业控制、金融、测量等需要高精度时间同步的场景。PTP 的实现通常依赖硬件支持,以减少网络延迟对时间同步的影响。
时间同步的基本流程:
- Sync 消息:由主时钟(Master Clock)发出,携带当前主时钟的时间。
- Follow_Up 消息:提供更精确的时间戳信息,跟随 Sync 消息发送。
- Delay_Req 消息:从时钟(Slave Clock)发送给主时钟,询问主时钟的当前时间。
- Delay_Resp 消息:主时钟对从时钟的 Delay_Req 消息做出回应。
实现方式:
-
PTP 帧捕获:通过 L2 TAP 接口监听以太网上的 PTP 帧,使用
read()
函数读取接收到的帧。解析接收到的 PTP 帧,区分 PTP 消息类型(Sync
、Delay_Resp
等),并分别处理。 -
时间同步:通过解析 PTP
Sync
消息中的时间戳,将系统时间同步为主时钟的时间。