From e559f5b53eeb1a102f58a57b146d733fd1069d00 Mon Sep 17 00:00:00 2001 From: ainyan03 <205502311+ainyan03@users.noreply.github.com> Date: Fri, 9 Oct 2026 05:26:22 +0000 Subject: [PATCH 1/4] Catalog displayless P4 boards and reject user-controlled detection pins Add UnitPoEP4 and StampP4 / StampP4X to the board catalog. detect_class may no longer be placed on connector pins or button pins: external wiring or a button held at power-on changes their level, so they cannot tell boards apart. The validator rejects both. StampS3Mini's legacy_board_id is corrected from 150 to 155 to match boards.hpp; 150 is StampP4 and the duplicate failed the catalog check. --- extras/board_spec/README.md | 2 + extras/board_spec/boards/m5stampp4.json | 11 ++ extras/board_spec/boards/m5stampp4x.json | 11 ++ extras/board_spec/boards/m5stamps3mini.json | 2 +- extras/board_spec/boards/m5unitpoep4.json | 78 +++++++++ extras/board_spec/dist/board_spec_editor.html | 19 ++- extras/board_spec/editor/index.html | 2 + .../generated/m5unified_pin_table/esp32p4.inl | 3 + .../m5unified_pin_table/esp32p4.json | 156 ++++++++++++++++++ .../generated/resolved/m5stampp4.json | 11 ++ .../generated/resolved/m5stampp4x.json | 11 ++ .../generated/resolved/m5stamps3mini.json | 2 +- .../generated/resolved/m5unitpoep4.json | 88 ++++++++++ extras/board_spec/lib/validate.js | 11 ++ extras/board_spec/schema/board.schema.json | 2 +- extras/board_spec/targets.json | 5 +- extras/board_spec/test/board_spec.test.js | 22 ++- 17 files changed, 424 insertions(+), 12 deletions(-) create mode 100644 extras/board_spec/boards/m5stampp4.json create mode 100644 extras/board_spec/boards/m5stampp4x.json create mode 100644 extras/board_spec/boards/m5unitpoep4.json create mode 100644 extras/board_spec/generated/resolved/m5stampp4.json create mode 100644 extras/board_spec/generated/resolved/m5stampp4x.json create mode 100644 extras/board_spec/generated/resolved/m5unitpoep4.json diff --git a/extras/board_spec/README.md b/extras/board_spec/README.md index 9db3a45a..a55db225 100644 --- a/extras/board_spec/README.md +++ b/extras/board_spec/README.md @@ -129,6 +129,8 @@ Write `detect_class` only when the class holds in every state detection can meet cold boot, software reset, wake from sleep, and after an interrupted detection. Measure each of these states on real hardware before writing a value. +- Do not classify pins whose state users can change through buttons, connectors, + or headers. Validation rejects connector and button roles. - Use `up` / `down` / `floating` for pins defined by resistors alone. - Use `fixed` for a driven pin only when the driver is always powered. For example, an EPD BUSY output reads D normally and U while the EPD is in deep sleep, so it can diff --git a/extras/board_spec/boards/m5stampp4.json b/extras/board_spec/boards/m5stampp4.json new file mode 100644 index 00000000..6655b6b6 --- /dev/null +++ b/extras/board_spec/boards/m5stampp4.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "id": "m5stampp4", + "name": "M5StampP4", + "official_name": "M5StampP4", + "legacy_board_id": 150, + "chip": "esp32p4", + "pins": {}, + "buses": {}, + "devices": {} +} diff --git a/extras/board_spec/boards/m5stampp4x.json b/extras/board_spec/boards/m5stampp4x.json new file mode 100644 index 00000000..5c0aaaf4 --- /dev/null +++ b/extras/board_spec/boards/m5stampp4x.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "id": "m5stampp4x", + "name": "M5StampP4X", + "official_name": "M5StampP4X", + "legacy_board_id": 156, + "chip": "esp32p4", + "pins": {}, + "buses": {}, + "devices": {} +} diff --git a/extras/board_spec/boards/m5stamps3mini.json b/extras/board_spec/boards/m5stamps3mini.json index e4aa1fc5..bd720747 100644 --- a/extras/board_spec/boards/m5stamps3mini.json +++ b/extras/board_spec/boards/m5stamps3mini.json @@ -3,7 +3,7 @@ "id": "m5stamps3mini", "name": "M5StampS3Mini", "official_name": "M5Stack M5StampS3Mini", - "legacy_board_id": 150, + "legacy_board_id": 155, "chip": "esp32s3", "pins": { "1": { diff --git a/extras/board_spec/boards/m5unitpoep4.json b/extras/board_spec/boards/m5unitpoep4.json new file mode 100644 index 00000000..fe6f31a7 --- /dev/null +++ b/extras/board_spec/boards/m5unitpoep4.json @@ -0,0 +1,78 @@ +{ + "schema_version": 1, + "id": "m5unitpoep4", + "name": "M5UnitPoEP4", + "official_name": "M5Stack Unit PoE-P4", + "legacy_board_id": 148, + "chip": "esp32p4", + "pins": { + "0": { + "roles": [ + "bus:internal_i2c.sda" + ], + "verified": { + "roles": "generated" + } + }, + "1": { + "roles": [ + "bus:internal_i2c.scl" + ], + "verified": { + "roles": "generated" + } + }, + "31": { + "roles": [ + "dev:ethernet.mdc" + ], + "detect_class": "up" + }, + "52": { + "roles": [ + "dev:ethernet.mdio" + ], + "detect_class": "up" + }, + "53": { + "roles": [ + "conn:port_a.2" + ], + "verified": { + "roles": "generated" + } + }, + "54": { + "roles": [ + "conn:port_a.1" + ], + "verified": { + "roles": "generated" + } + } + }, + "buses": { + "internal_i2c": { + "kind": "i2c", + "signals": [ + "sda", + "scl" + ], + "fixed": false, + "verified": { + "signals": "generated" + } + } + }, + "devices": { + "ethernet": { + "kind": "transceiver" + } + }, + "connectors": { + "port_a": { + "type": "hy2_4p", + "standard": "port_i2c" + } + } +} diff --git a/extras/board_spec/dist/board_spec_editor.html b/extras/board_spec/dist/board_spec_editor.html index fde07d05..0169e7ad 100644 --- a/extras/board_spec/dist/board_spec_editor.html +++ b/extras/board_spec/dist/board_spec_editor.html @@ -909,6 +909,8 @@
"validation.E_PSRAM_PINS": { "en": "PSRAM pins do not match the chip definition", "zh": "PSRAM 引脚与芯片定义不一致", "ja": "PSRAM ピンがチップ定義と一致しません" }, "validation.E_PSRAM_CONFLICT": { "en": "PSRAM conflicts with another signal", "zh": "PSRAM 与其他信号冲突", "ja": "PSRAM が別の信号と衝突しています" }, "validation.E_PIN_KEY": { "en": "A SoC pin key is invalid or outside the chip range", "zh": "SoC pin key 无效或超出芯片范围", "ja": "SoC pin key が不正かチップ範囲外です" }, + "validation.E_DETECT_CLASS_CONNECTOR": { "en": "Detection cannot classify user connector pins", "zh": "检测不可使用用户连接器引脚", "ja": "利用者のコネクタピンは判別に使えません" }, + "validation.E_DETECT_CLASS_BUTTON": { "en": "Detection cannot classify user button pins", "zh": "检测不可使用用户按钮引脚", "ja": "利用者のボタンピンは判別に使えません" }, "validation.E_DETECT_CLASS_NO_PULL": { "en": "Detection classification requires internal GPIO pulls", "zh": "检测分类需要 GPIO 内部上下拉", "ja": "判別分類には GPIO の内部プルが必要です" }, "validation.E_CHIP_ABSENT": { "en": "This GPIO number does not exist on the chip", "zh": "该 GPIO 编号在芯片上不存在", "ja": "この GPIO 番号はチップに存在しません" }, "validation.E_CHIP_PACKAGE": { "en": "The chip package variant is unknown", "zh": "芯片封装变体未知", "ja": "チップの package variant が不明です" }, @@ -956,13 +958,13 @@ } - + - - + + - - + +