跳转至

外设接口规范

本文档引用的文件 - config.h - ch390.h - esp_eth_mac_ch390.h - esp_eth_phy_ch390.h - esp_eth_mac_ch390.c - esp_eth_phy_ch390.c - CH390H_Wiring.md - eth_manager.c - hci_passthrough.c - hci_uart_tester.py - main.c - ws2812_led.c

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本文件为ESP32-S3 BLE网关的外设接口技术规范,重点覆盖以下内容: - UART通信协议规范:波特率设置(1Mbps)、数据格式、流控制机制、错误处理 - SPI接口规范:CH390以太网控制器的通信协议、时钟频率(20MHz)、数据传输格式、片选时序 - I2C、GPIO和其他外设接口规范 - 电气参数、时序图和协议帧格式 - 接口测试方法和调试工具使用指南

项目结构

该项目采用组件化设计,主要涉及以下模块: - UART(BLE控制器通信):配置为1Mbps,启用硬件流控(RTS/CTS) - SPI(以太网控制器CH390):20MHz时钟,标准SPI模式,片选低电平有效 - I2C:基于ESP32-S3 SoC能力(具体引脚在配置中预留) - GPIO:LED指示、中断、复位等控制引脚 - 其他外设:WS2812 LED指示灯(RMT驱动)

graph TB
subgraph "主控制器"
ESP32S3[ESP32-S3 MCU]
UART[UART外设<br/>1Mbps, 硬件流控]
SPI[SPI外设<br/>20MHz]
I2C[I2C外设<br/>引脚预留]
GPIO[GPIO外设<br/>LED/INT/RST]
end
subgraph "外部设备"
NRF52833[NRF52833 BLE控制器<br/>Zephyr HCI]
CH390[CH390 以太网控制器<br/>SPI接口]
WS2812[WS2812 LED指示灯<br/>RMT驱动]
end
ESP32S3 --> UART
ESP32S3 --> SPI
ESP32S3 --> I2C
ESP32S3 --> GPIO
UART <- --> NRF52833
SPI <- --> CH390
GPIO --> WS2812

图表来源 - main.c - config.h - CH390H_Wiring.md

章节来源 - main.c - config.h

核心组件

  • UART(BLE控制器通信)
  • 波特率:1Mbps
  • 数据格式:8N1(8数据位,无校验,1停止位)
  • 流控制:硬件流控(RTS/CTS)
  • 引脚:TX=17, RX=18, RTS=15, CTS=16
  • SPI(CH390以太网控制器)
  • 时钟频率:20MHz
  • 模式:SPI模式0(CPOL=0, CPHA=0)
  • 片选:低电平有效
  • 引脚:MOSI=11, MISO=13, SCK=12, SCS=10
  • 中断:INT=14
  • 复位:RST=9
  • I2C(预留)
  • 引脚:在配置中预留,具体引脚由应用决定
  • GPIO(其他外设)
  • WS2812 LED:RMT驱动,GPIO48
  • 中断/复位:INT=14, RST=9
  • 其他
  • WS2812 LED:RMT编码器,10MHz分辨率,300μs复位时间

章节来源 - config.h - CH390H_Wiring.md - ws2812_led.c

架构总览

系统通过UART与NRF52833进行BLE数据交换,通过SPI与CH390以太网控制器通信,同时提供LED状态指示和网络管理。

sequenceDiagram
participant Host as "主机应用"
participant ESP as "ESP32-S3"
participant UART as "UART接口"
participant BLE as "NRF52833"
participant ETH as "CH390以太网"
Host->>ESP : 配置UART(1Mbps, 硬件流控)
ESP->>UART : 初始化TX/RX/RTS/CTS
UART->>BLE : 透明转发HCI数据
Host->>ESP : 配置SPI(20MHz)
ESP->>ETH : SPI写寄存器/内存
ETH-->>ESP : 返回以太网状态
ESP-->>Host : 提供网络状态

图表来源 - hci_passthrough.c - eth_manager.c

章节来源 - hci_passthrough.c - eth_manager.c

详细组件分析

UART通信协议规范(BLE控制器)

  • 波特率设置:1Mbps(匹配NRF52833 Zephyr HCI要求)
  • 数据格式:8N1(8数据位,无校验,1停止位)
  • 流控制机制:硬件流控(RTS/CTS),启用rx_flow_ctrl_thresh=64
  • 错误处理:超时重试、缓冲区溢出检测、日志记录
  • 引脚映射:TX=17, RX=18, RTS=15, CTS=16
sequenceDiagram
participant ESP as "ESP32-S3"
participant UART as "UART驱动"
participant BLE as "NRF52833"
ESP->>UART : 配置1Mbps, 8N1, 硬件流控
UART->>BLE : TX数据(带RTS/CTS握手)
BLE-->>UART : RX数据(受RTS/CTS控制)
UART-->>ESP : 事件回调/队列通知

图表来源 - hci_passthrough.c - config.h

章节来源 - hci_passthrough.c - config.h

SPI接口规范(CH390以太网控制器)

  • 时钟频率:20MHz(ETH_SPI_CLK_MHZ=20)
  • 模式:SPI模式0(CPOL=0, CPHA=0)
  • 帧格式:命令位1位,地址位7位
  • 片选时序:低电平有效,硬件自动管理
  • 寄存器访问:OPC_REG_W(0x80)写,OPC_REG_R(0x00)读
  • 内存访问:OPC_MEM_WRITE(0xF8),OPC_MEM_READ(0x72)
  • 中断:INT引脚下降沿触发,GPIO ISR服务
  • 复位:RST引脚低电平复位,上电自动复位
flowchart TD
Start([SPI初始化]) --> Config["配置SPI主机<br/>20MHz, 模式0"]
Config --> AddDev["添加SPI设备<br/>CS=10, MOSI=11, MISO=13, SCK=12"]
AddDev --> Lock["获取SPI互斥锁"]
Lock --> Cmd["发送命令+地址"]
Cmd --> RW{"读或写?"}
RW --> |写| Write["写数据缓冲"]
RW --> |读| Read["读数据缓冲"]
Write --> Unlock["释放SPI互斥锁"]
Read --> Unlock
Unlock --> End([完成])

图表来源 - eth_manager.c - esp_eth_mac_ch390.c

章节来源 - eth_manager.c - esp_eth_mac_ch390.c - ch390.h

CH390寄存器与内存访问

  • 寄存器访问:通过SPI命令进行寄存器读写
  • 内存访问:支持内存读写命令,带地址增量控制
  • 中断处理:ISR寄存器状态查询,IMR中断屏蔽寄存器
  • 流控配置:FCR(0x0A)启用流控,FCTR高低水位阈值
  • 物理层:PHY寄存器BMCR/BMSR等,支持自协商和环回
classDiagram
class CH390寄存器 {
+NCR : 网络控制
+NSR : 网络状态
+TCR : 发送控制
+RCR : 接收控制
+FCR : 流控
+IMR : 中断屏蔽
+ISR : 中断状态
}
class CH390内存 {
+TXPLL/TXPLH : 发送长度
+MRCMD/MWCMD : 内存读写
+MRRL/MWRH : 地址寄存器
}
class CH390PHY {
+BMCR : 控制寄存器
+BMSR : 状态寄存器
+ANAR/ANLPAR : 自协商
}
CH390寄存器 <.. CH390内存 : "通过SPI访问"
CH390寄存器 <.. CH390PHY : "MII管理接口"

图表来源 - ch390.h - esp_eth_mac_ch390.c

章节来源 - ch390.h - esp_eth_mac_ch390.c

I2C接口规范(预留)

  • 引脚预留:I2C引脚在配置中预留,具体引脚由应用决定
  • 时序:标准I2C时序(SDA/SCL),支持主从模式
  • 用途:可扩展传感器、EEPROM等外设

章节来源 - config.h

GPIO接口规范

  • LED指示:WS2812,GPIO48,RMT编码器驱动
  • 中断:INT=14,下降沿触发,GPIO ISR服务
  • 复位:RST=9,低电平有效
  • 其他:NRF复位引脚=4

章节来源 - config.h - ws2812_led.c

电气参数与时序

  • UART电气参数
  • 波特率:1Mbps
  • 数据格式:8N1
  • 流控:RTS/CTS
  • SPI电气参数
  • 时钟频率:20MHz
  • 模式:SPI模式0
  • 片选:低电平有效
  • WS2812电气参数
  • 逻辑0:T0H=400ns, T0L=850ns
  • 逻辑1:T1H=800ns, T1L=450ns
  • 复位时间:300μs
  • 分辨率:10MHz(1tick=100ns)

章节来源 - ws2812_led.c

依赖关系分析

  • UART依赖于ESP32-S3的UART外设和GPIO配置
  • SPI依赖于ESP32-S3的SPI主机和GPIO配置
  • CH390驱动依赖ESP-IDF的以太网框架和SPI驱动
  • WS2812依赖RMT外设和DMA传输
graph TB
UART[UART驱动] --> ESP32S3[ESP32-S3 UART外设]
SPI[SPI驱动] --> ESP32S3[ESP32-S3 SPI外设]
CH390[CH390驱动] --> SPI
CH390 --> ETH[以太网栈]
WS2812[RMT驱动] --> ESP32S3[RMT外设]

图表来源 - eth_manager.c - ws2812_led.c

章节来源 - eth_manager.c - ws2812_led.c

性能考虑

  • UART吞吐量:1Mbps全双工,硬件流控避免数据丢失
  • SPI吞吐量:20MHz时钟,建议批量传输减少SPI事务开销
  • 中断优先级:CH390中断使用GPIO ISR,注意与WiFi/蓝牙中断优先级协调
  • 内存管理:UART/ETH缓冲区大小合理配置,避免溢出
  • LED刷新:RMT DMA传输,避免阻塞任务调度

故障排除指南

  • UART问题
  • 症状:数据丢失或超时
  • 排查:检查RTS/CTS连接,确认波特率一致,查看日志
  • SPI问题
  • 症状:CH390初始化失败或寄存器读写错误
  • 排查:检查片选时序,确认SPI模式和时钟频率,验证引脚连接
  • 中断问题
  • 症状:ETH中断不触发
  • 排查:确认INT引脚配置为下降沿触发,检查GPIO ISR安装
  • LED问题
  • 症状:LED不亮或显示异常
  • 排查:确认RMT通道配置,检查WS2812引脚和供电

章节来源 - hci_passthrough.c - eth_manager.c - ws2812_led.c

结论

本规范明确了ESP32-S3 BLE网关的外设接口要求,包括UART(1Mbps, 硬件流控)和SPI(20MHz, CH390)的具体配置与协议细节。通过合理的电气参数、时序设计和错误处理机制,确保系统稳定运行。建议在实际部署中严格遵循本规范,并结合提供的测试工具进行验证。

附录

接口测试方法

  • UART测试
  • 使用上位机工具(如hci_uart_tester.py)进行双向通信测试
  • 验证1Mbps波特率下的数据完整性
  • 测试RTS/CTS流控功能
  • SPI测试
  • 使用逻辑分析仪捕获SPI时序
  • 验证寄存器读写和内存访问
  • 测试CH390中断和复位功能
  • LED测试
  • 验证RMT编码正确性
  • 测试多LED串联和亮度调节

章节来源 - hci_uart_tester.py - CH390H_Wiring.md