/* ESP32-S3 引脚分配 —— 全固件唯一一份(设计文档 §8.1,2026-09-06 按 PCB 几何 重排的那一版,§26.18)。 ⚠️ **引脚号是从「板上要去哪儿」倒推的,不是逻辑顺序。** 和 INA226 地址、 595 位号一样:查表,不要算。哪怕看上去像顺排(IO9~IO14 那一段), 也是巧合 —— `EFUSE_EN` 那五根就一个规律都没有(39 / 48 / 6 / 41 / 8)。 五路各自的 `EFUSE_ENn` / `VBUS_ENn` **不在这里**,在 `rail_cfg.h` 的那张五路表里 (它们是「每路一个」的东西,和 INA 地址、DAC 通道、按键位号是同一类)。 本文件只放**全板独一份**的那些脚。`rail_selftest()` 会把两边合起来查重。 ⚠️ 这里的值与 `.claude/pcb1-parts.json` 里 U20(WROOM-1 模组)的真实焊盘网络 逐脚核对过(2026-09-07)。改动之前先回去核一遍,别照着记忆改。 */ #ifndef BOARD_PINS_H #define BOARD_PINS_H #ifdef __cplusplus extern "C" { #endif /* ---- 全板独一份的信号(模组脚号 → GPIO) -------------------------------- */ #define BOARD_PIN_I2C_SDA 14 /* 模组脚 22 —— 6×INA226 + 2×DAC + PCA9555(+ 载板 LM75) */ #define BOARD_PIN_I2C_SCL 15 /* 模组脚 8 */ #define BOARD_PIN_FAN_TACH 16 /* 模组脚 9 → R731/R732 分压 */ #define BOARD_PIN_FAN_PWM 18 /* 模组脚 11 → R733 */ #define BOARD_PIN_UP_VBUS_DET 47 /* 模组脚 24 → J24.25,上游 VBUS 有没有插 */ #define BOARD_PIN_NTC1 1 /* 模组脚 39,ADC1_CH0 —— 必须是 IO1~IO10 */ #define BOARD_PIN_NTC2 2 /* 模组脚 38,ADC1_CH1 */ /* USB-Serial-JTAG 的 D±。**S3 上是硬连线,动不了**(模组脚 13/14 → J22)。 下载 / 调试口就是它,板上没有 JTAG 排针、也没有 USB 转串口芯片。 ⚠️ 永远别烧 `DIS_USB_JTAG` eFuse —— 烧了引脚 JTAG 和 USB 两边都没有。 */ #define BOARD_PIN_USB_DM 19 #define BOARD_PIN_USB_DP 20 /* ---- 不许占用的脚 -------------------------------------------------------- */ /* strapping:挂负载会影响上电模式(S3 只有这四个是)。 */ #define BOARD_PINS_STRAPPING \ { \ 0, 3, 45, 46 \ } /* WROOM-1 的 **R8 版(八线 PSRAM)占用**,留空以便换料。 */ #define BOARD_PINS_RESERVED \ { \ 35, 36, 37 \ } /* ⚠️ **IO22~IO25 在 ESP32-S3 上根本不存在**(编号是连续的,芯片不是), IO26~IO32 是模组内部的 SPI flash / PSRAM,引不出来。 写进配置表不会报错 —— `gpio_config()` 对不存在的脚只是无声无息什么也不做。 */ #define BOARD_PINS_ABSENT \ { \ 22, 23, 24, 25, \ 26, 27, 28, 29, 30, 31, 32 \ } /* ESP32-S3 的 GPIO 编号上限(IO48 **存在**,`EFUSE_EN2` 就在上面)。 ⚠️ HAL 两侧的边界都写成 `pin <= BOARD_PIN_NUM_MAX`;A7 之前那里写的是 `pin < 48`,正好把 IO48 关在门外 —— 现象是 CH2 的 eFuse 既开不了也**关不掉**。 */ #define BOARD_PIN_NUM_MAX 48 #ifdef __cplusplus } #endif #endif /* BOARD_PINS_H */