Files
DCU_APP/GD32E508_DCU_APP/sys/esp32_en.h
T
cbb 28d8426052 feat(ethercat): 添加ESP32使能控制功能通过EtherCAT SDO
添加0x2503对象字典项用于通过EtherCAT SDO控制ESP32 WiFi使能信号,
解决WiFi关断后无法重新开启的问题。同时添加sys/esp32_en.h/.cpp文件
提供GPIO控制接口。

SPI诊断命令(0xA2)扩展支持ESP32 EN引脚控制,用于诊断备援。
ESP32掉电重启后自动清理SPI链路状态,防止通信异常。
2026-09-24 03:18:18 +08:00

43 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file esp32_en.h
* @brief ESP32 EN/RESET (PC9 / WLESS_EN) 手动控制 —— 网页开关经 EtherCAT SDO 0x2503 下发。
*
* 硬件语义(见 sys/config.h CONFIG_ESP32_RESET_*):
* - PC9 推挽高 = 释放 ESP_CHIP_EN,ESP32 运行、WiFi 可用
* - PC9 推挽低 = 按死 EN,ESP32 硬复位/掉使能,WiFi 与 HTTP 全断
* - PC9 浮空 = 外部 C41/U11 把 ESP_CHIP_EN 拉低,同样关断(与复位后一致)
*
* 控制必须走 EtherCAT(与 ESP32 解耦):WiFi 关断后 ESP32 已死,
* 经 /spi/send 的路径关得掉、开不回来。
* 恢复:再次 SDO 写 action 0/2 拉高;或 GD32 复位/重新上电(initial.cpp 无条件拉高)。
*
* SPI 重建:ESP32 冷启动的 GPIO 毛刺会再次弄脏 SPI 链路,故拉高 PC9 后
* 在起机窗口内多次 resetEsp32Link(),赶在 HELLO 前把 session/DMA 清干净。
*/
#ifndef SYS_ESP32_EN_H
#define SYS_ESP32_EN_H
#include <stdint.h>
class Esp32En {
public:
/**
* @brief 驱动/回读 ESP32 EN(PC9)。EtherCAT SDO 0x2503 转发到此。
* @param action 0=拉高(开) 1=拉低保持(关) 2=拉高 3=浮空 4=只读 5=仅复位 SPI
* @return 实际引脚电平 0/1(与 nrstDrive 同口径);0xEE=无效 action。
*/
static uint8_t drive(uint8_t action);
/**
* @brief 起机窗口内补清 SPI 链路(TaskRunner::runPending 每圈调用)。
* @note 无排期时立即返回。PC9 拉高后早期少量补清;一旦收到 CS 事务即停,
* 避免打断正在建连的 HELLO。
*/
static void poll();
/** @brief SPI 收到任意 CS 事务时取消剩余补清(由 processCommand 调用)。 */
static void cancelRelinkFromSpi();
};
#endif /* SYS_ESP32_EN_H */