First successful flash: placeholder face live; fix 20MHz PSRAM trap; power ladder
- firmware boots to a rendered LVGL face in 1.57s (eyes + smile + tag) - sdkconfig: CONFIG_IDF_EXPERIMENTAL_FEATURES=y unlocks SPIRAM 200MHz (silently degraded to 20MHz before -> MIPI-DSI underrun -> LVGL lock starvation -> task watchdog); mirrors official 08_lvgl_demo_v9 config - architecture.md: power management section (user prime concern) — active/ambient/dormant/night ladder, levers, hard edges, <=300ms wake - AGENTS/CLAUDE: replace stale bring-up warnings with verified commands Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,27 +52,27 @@ LVGL timers).
|
||||
`examples/esp-idf/` — notably `08_lvgl_demo_v9` (display), `06_I2SCodec` (audio),
|
||||
`04_wifistation` (Wi-Fi via ESP-Hosted). When wiring a new peripheral, check the
|
||||
official example first; do not guess pin mappings.
|
||||
- ⚠️ **Unverified scaffold**: the BSP API calls in `desklock_main.c` and the
|
||||
`sdkconfig.defaults` values were written before the first successful build. Validate
|
||||
against the official examples on first bring-up, then delete this warning.
|
||||
|
||||
```bash
|
||||
# One-time: install ESP-IDF (not yet installed on tower-of-joy)
|
||||
git clone -b v5.5 --recursive https://github.com/espressif/esp-idf.git ~/esp-idf
|
||||
~/esp-idf/install.sh esp32p4
|
||||
|
||||
# Every shell:
|
||||
# ESP-IDF v5.5 is installed at ~/esp-idf. Every shell:
|
||||
source ~/esp-idf/export.sh
|
||||
|
||||
# Build / flash / monitor (device is on USB-C; check `ls /dev/ttyACM*`)
|
||||
# Build / flash (device on USB-C at /dev/ttyACM0, CH343 bridge)
|
||||
cd firmware
|
||||
idf.py set-target esp32p4 # once
|
||||
idf.py build
|
||||
idf.py -p /dev/ttyACM0 flash monitor # Ctrl+] exits monitor
|
||||
sg dialout -c "bash -lc 'source ~/esp-idf/export.sh >/dev/null && idf.py -p /dev/ttyACM0 flash'"
|
||||
```
|
||||
|
||||
Flashing requires the `dialout` group (or run with sudo once and fix the group). If the
|
||||
device doesn't enumerate, hold BOOT while pressing RESET to enter download mode.
|
||||
- `sg dialout -c '…'` is needed because the login session predates the user's dialout
|
||||
membership; a plain `idf.py flash` works after any re-login.
|
||||
- **PSRAM must run at 200 MHz** or the 800×800 MIPI-DSI framebuffer underruns
|
||||
(`lcd.dsi.dpi: can't fetch data…` spam, LVGL lock never frees, task watchdog).
|
||||
`CONFIG_SPIRAM_SPEED_200M` only takes effect together with
|
||||
`CONFIG_IDF_EXPERIMENTAL_FEATURES=y` — otherwise it is **silently dropped** and you
|
||||
get 20 MHz. `sdkconfig.defaults` mirrors the official `08_lvgl_demo_v9` config.
|
||||
- Non-interactive boot-log capture (avoid `idf.py monitor`, it's interactive): open
|
||||
`/dev/ttyACM0` at 115200 with pyserial, pulse RTS to reset, read ~8 s. Verified boot
|
||||
is ~1.6 s from reset to `desklock: DeskLock up`.
|
||||
- If the device doesn't enumerate, hold BOOT while pressing RESET for download mode.
|
||||
|
||||
## Gateway (`gateway/`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user