- Moved temporary draw buffer allocation to the initialization phase and made it persistent in the driver struct.
- Resolved severe heap fragmentation caused by allocating and freeing 15KB per UI frame.
- Fixed a use-after-free corruption where the SPI DMA would read from a freed temporary buffer.
- Fixed WDT timeout caused by OOM failure in esp_lcd_panel_draw_bitmap that left LVGL hanging in wait_for_flushing.
- Added explicit RAM clear command to boot sequence to wipe lingering hardware freeze artifacts.
- DTS: migrate i2c0 from legacy esp32-i2c to esp32-i2c-master to avoid IDF CONFLICT warning (driver_ng vs old driver) which could stall boot
- Configuration.cpp: add 100ms power stabilize after GPIO46 amp on, probe ES8311 at 0x18 with has_device_at_address before full init (non-fatal), prevents bus lock if codec missing
- ST7305Display.cpp: add 150ms after reset + 50ms after init, prevents freeze on fast boot where SPI transaction too early (observed stuck on weird state)
Build 0x2b79c0 -> 0x2b79c0 with I2C master, ES8311 now initializes, display stable
Co-Authored-By: internal-model