Files
DCU_APP/GD32E508_DCU_APP/sys/esp32_en.h
T

43 lines
1.7 KiB
C++
Raw Normal View History

/**
* @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 */