Is it possible to hit the theoretical max display update speed on PineTime's display controller?
PineTime is based on the nRF52 microcontroller, and it's connected via SPI to the ST7789 display controller. Details here: https://firstname.lastname@example.org/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c?source=friends_link&sk=4d2cbd2e6cd2343eed62d214814f7b81
ST7789 uses a non-standard SPI interface: There is an additional Data/Command pin that needs to be flipped to indicate whether we are sending SPI commands (e.g. set X and Y coordinates) or data (e.g. the bitmap to be rendered).
This means we can't send a continuous stream of SPI commands and data. Our program needs to intervene and flip the Data/Command pin, which slows down the rendering throughput. DMA wouldn't work here.
Unless... We have the entire bitmap already in RAM, and we are doing one huge DMA from RAM to ST7789, in a single SPI command. But ST7789 doesn't have RAM to hold the entire screen (see the article). And it's a bad use of RAM anyway.
We could put the bitmap into the external SPI Flash and do DMA from the external flash to ST7789. This is good for static bitmaps, like a black screen or a startup logo. Not good for dynamic UIs like ours.
So for interactive UIs it's hard to hit the theoretical max display update speed. Even if we tried, the RAM would be better used for other application functions.