揭示 ESP32 秘密的第二部分:逆向工程 RX

这是关于反向工程 ESP32 Wi-Fi 网络栈系列文章的第二篇,旨在构建自己的开源 MAC 层。

  • 接收功能:通过设置 DMA 结构体链表接收数据包,硬件接收数据包后放入可用 DMA 结构体,中断通知处理器有数据包接收,在中断外处理数据包,可回收已用 DMA 结构体以避免耗尽。
  • 实际情况:起初接收不到数据包,可能是硬件 MAC 地址过滤,ESP32 有类似监控模式可接收所有硬件接收的数据包,目前先在软件中过滤。
  • 连接接入点:先通过 Scapy 实现连接普通 USB Wi-Fi 适配器到接入点,确认所需步骤,再在 ESP32 上实现,过程中发现 MAC 地址单播/多播问题,修复后开始接收接入点帧,发送数据帧时收到解除关联帧,需发送 ACK 帧,硬件可自动发送 ACK 帧,实现后在监听 UDP 数据包的计算机上收到数据帧,目前硬编码数据包内容的方式不适用于最终目标,正在寻找开源 802.11 MAC 实现。
  • 路线图:已完成发送和接收数据包,接下来要发送 ACK 帧、实现基于 MAC 地址的硬件过滤、寻找或构建开源 802.11 MAC 实现、实现更改 Wi-Fi 信道等、实现硬件初始化、编写反向工程寄存器的 SVD 文档。
  • 额外内容:Charlotte 播放音乐导致接收缓冲区满,接收不到其他数据包,硬件过滤似乎有两个“槽”,默认不允许数据包通过,仅在通过过滤且复制到 RX DMA 缓冲区时发送 ACK 帧。
  • 合作与支持:欢迎合作,可通过zeusblog@notdevreker.be联系,项目由NGI0 Core Fund资助,可通过https://zeus.ugent.be/contact/#payment-info捐款或捐赠硬件,学生或无经济独立者请勿捐赠。如有问题可发送邮件。
阅读 12
0 条评论