6.1 KiB
Firmware Pin Usage
The current profile targets the new board in schematic/电机-马达方案.pdf
(upper board 2026-10-19; lower board 2026-10-12). Defaults are declared in
sdkconfig.defaults and main/Kconfig.projbuild; saved local settings in
sdkconfig must match. Directions below are from the ESP32-S3 perspective.
Existing GPIOs, active levels, pull resistors, and backlight polarity are on one
menuconfig page: TQ Cat Configuration -> Board Hardware Configuration (GPIO).
Feature switches and behavior parameters remain in their original menus.
No new GPIO option has been added for full-charge sensing or the rocker motor.
Configured Firmware Pins
| GPIO | Config | Direction | Function / Notes |
|---|---|---|---|
| 1 | CONFIG_MULTIMODAL_AUDIO_I2C_SDA_GPIO |
Bidirectional | ES8311 control SDA |
| 2 | CONFIG_MULTIMODAL_AUDIO_I2C_SCL_GPIO |
Output | ES8311 control SCL |
| 4 | CONFIG_TQ_SCREEN_BACKLIGHT_GPIO |
Output | LCD BLK, active high; initial brightness 100%, validate dimming separately |
| 5 | CONFIG_TQ_SCREEN_SPI_CS_GPIO |
Output | LCD CS |
| 6 | CONFIG_TQ_SCREEN_DC_GPIO |
Output | LCD data/command; no old switch flying wire |
| 7 | CONFIG_TQ_SCREEN_RESET_PIN |
Output | LCD reset, active low |
| 9 | CONFIG_MULTIMODAL_AUDIO_PA_GPIO |
Output | Audio amplifier enable |
| 11 | CONFIG_TQ_CALIBRATION_SWITCH_GPIO |
Input | Switch 1 / calibration, active low with pull-up |
| 12 | CONFIG_TQ_SLOT_SWITCH_GPIO |
Input | Switch 2 / slot trigger, active low with pull-up |
| 13 | CONFIG_MULTIMODAL_PTT_BUTTON_GPIO |
Input | TTP223 touch output / PTT; previous active-low/pull-up settings retained pending measured polarity |
| 14 | CONFIG_TQ_STEPPER_IN1_GPIO |
Output | ULN2003 IN1; must not also be configured as Wi-Fi reset |
| 15 | CONFIG_TQ_SCREEN_SPI_MOSI_GPIO |
Output | LCD SDA is SPI MOSI, not I2C |
| 16 | CONFIG_TQ_SCREEN_SPI_CLK_GPIO |
Output | LCD SCL is SPI SCK; saved defaults use 40 MHz, not a measured performance guarantee |
| 17 | CONFIG_TQ_BATTERY_ADC_GPIO |
Analog input | ADC2 channel 6; divider via Q5/Q6; R6/R11=100 kOhm each |
| 18 | CONFIG_TQ_BATTERY_CHARGE_GPIO |
Input | TP4056 CHRG# via Q7; retain active low, verify on hardware |
| 21 | CONFIG_TQ_STEPPER_IN2_GPIO |
Output | ULN2003 IN2 |
| 38 | CONFIG_MULTIMODAL_AUDIO_I2S_MCLK_GPIO |
Output | ES8311 MCLK |
| 39 | CONFIG_MULTIMODAL_AUDIO_I2S_BCLK_GPIO |
Output | ES8311 SCLK |
| 40 | CONFIG_MULTIMODAL_AUDIO_I2S_DOUT_GPIO |
Output | ES8311 DSDIN |
| 41 | CONFIG_MULTIMODAL_AUDIO_I2S_WS_GPIO |
Output | ES8311 LRCK |
| 42 | CONFIG_MULTIMODAL_AUDIO_I2S_DIN_GPIO |
Input | ES8311 ASDOUT |
| 47 | CONFIG_TQ_STEPPER_IN3_GPIO |
Output | ULN2003 IN3 |
| 48 | CONFIG_TQ_STEPPER_IN4_GPIO |
Output | ULN2003 IN4 |
The old platform_io_effects_init() startup call has been removed: its GPIO4
RMT and GPIO5 pulse workers conflict with new LCD BLK/CS. The old implementation
is retained as source, but no startup path calls it. GPIO10 motor control has
not been enabled as a replacement.
Disabled Or Not Connected In Defaults
| Config / Pin | Value / Status | Meaning |
|---|---|---|
CONFIG_TQ_SCREEN_SPI_MISO_GPIO |
-1 | LCD readback is not connected |
CONFIG_TQ_POWER_HOLD_GPIO |
-1 | No MCU power-hold net on the new board |
CONFIG_TQ_RESET_BUTTON_ENABLE |
Disabled | The old optional reset default GPIO14 now belongs to stepper IN1; configure separate physical wiring before enabling |
CONFIG_TQ_BATTERY_SHUTDOWN_WAKE_BUTTON_GPIO |
-1 | No additional deep-sleep wake button |
| GPIO8 / 充满检测 | Input | CONFIG_TQ_BATTERY_FULL_GPIO=8, low-active TP4056 STDBY# via Q8 |
| GPIO10 / 马达控制 | Not consumed | Rocker-motor gate held off by external R30 pull-down; no new option/driver added |
| GPIO3 / 35 / 36 / 37 / 45 / 46 | NC on schematic | Do not infer arbitrary availability from NC |
Mechanical switches use pull-up only. PTT and charger active levels are retained from the previous configuration and require actual idle/active measurements. Battery charge/full state uses GPIO18/GPIO8 with 100ms polling and 1s sampled stability confirmation. Both active means fault; both inactive means not charging. Full prompts require a confirmed charging-to-full transition; no voltage inference. ADC divider gain/offset remain unchanged pending VBAT measurements.
Boot Calibration And Sleep
CONFIG_TQ_BOOT_TURNTABLE_CALIBRATION_ENABLE remains enabled. Boot searches for
switch 1 on GPIO11 with IN1/IN2/IN3/IN4 = 14/21/47/48. Verify motor direction,
mechanical limits and bounded stop on hardware.
Charge inputs are polled without GPIO interrupts. Low-active deep-sleep wake follows
CONFIG_TQ_BATTERY_CHARGE_GPIO=18; the full input is not a wake source. Verify charger insertion/removal and wake
behavior after changing the board.
System Interfaces
USB D-/D+ remain GPIO19/20. UART0 uses default RXD0/TXD0 without application remapping; connector CN5 labels are TX/RX from the opposite endpoint's perspective. BOOT remains GPIO0 and is not an application input.
The octal PSRAM/Flash interfaces remain owned by ESP-IDF and the module. Generated memory settings such as PSRAM CS=26 and CLK=30 are not application GPIO assignments. Do not repurpose memory pins from this table.
Source Files
main/Kconfig.projbuild,sdkconfig.defaults, localsdkconfigdocs/gpio-map.md,docs/gpio-board-adaptation.zh-CN.mdcomponents/platform/src/runtime/platform_core_runtime.ccomponents/platform/src/lcd_direct.ccomponents/platform/src/platform_stepper_driver.ccomponents/platform/src/platform_battery_driver.ccomponents/platform/src/multimodal/audio_pipeline/audio_pipeline_codec_impl.ccomponents/control_plane/src/runtime/control_plane_key_input.c
Validation (2026-10-23)
ESP-IDF 5.5.4 build and all five LCD regression scripts passed. The production
battery initializer passed host tests for ADC2/ADC1 propagation, idempotence,
bounded lock failure, cleanup and retry (tools/test_battery_adc_init.py).
Config/default consistency and enabled-pin uniqueness checks passed.
No device was flashed; touch polarity, ADC2 sampling with Wi-Fi, charger/wake,
motor direction and concurrent operation still require hardware validation.