Skip to content

Commit b96f5d3

Browse files
Copilotppsx
andcommitted
Optimize QSPI drawing: async DMA, single-transaction region+pixels, larger buffers
Three targeted optimizations to close the performance gap between the generic qspibus/displayio pipeline and the dedicated rm690b0-standalone framebuffer driver: 1. Async DMA (QSPIBus.c): Remove blocking wait_all_transfers_done at the end of send_color_bytes(). DMA now runs asynchronously, allowing fill_area() for the next subrectangle to overlap with the previous DMA transfer. The wait is moved to begin_transaction(), which only blocks when the bus is actually needed. Python API (write_data) still waits synchronously for backward compatibility. 2. Single-transaction path (BusDisplay.c + bus_core.c): Add displayio_display_bus_send_region_commands() that sends column/row window commands within an existing transaction. For QSPI buses, _refresh_area() now combines set_region + RAMWR + pixel data into a single begin/end transaction, eliminating 2 of 3 per-subrectangle transaction cycles. 3. Buffer enlargement (BusDisplay.c): Port the QSPI-specific buffer boost from the rm690b0 branch (CIRCUITPY_QSPI_DISPLAY_AREA_BUFFER_SIZE up to 2048 uint32_t = 8KB), reducing the number of subrectangles per refresh and thus the total transaction overhead. Co-authored-by: ppsx <7107135+ppsx@users.noreply.github.com>
1 parent 00e0aef commit b96f5d3

5 files changed

Lines changed: 826 additions & 9 deletions

File tree

0 commit comments

Comments
 (0)