添加0x2503对象字典项用于通过EtherCAT SDO控制ESP32 WiFi使能信号, 解决WiFi关断后无法重新开启的问题。同时添加sys/esp32_en.h/.cpp文件 提供GPIO控制接口。 SPI诊断命令(0xA2)扩展支持ESP32 EN引脚控制,用于诊断备援。 ESP32掉电重启后自动清理SPI链路状态,防止通信异常。
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 */
|