43 lines
1.7 KiB
C++
43 lines
1.7 KiB
C++
/**
|
||||
|
|
* @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 */
|