SH1106 SPI + DMA

Ciao a tutti

Sto provando a interfacciare un Arduino DUE con un OLED SH1106 via SPI.
Fino qui nessun problema. Vorrei però cercare di sfruttare il DMA su SPI disponibile su DUE per cercare di alleggerire il carico di lavoro sulla CPU quando si cerca di aggiornare un quadro intero del display.

Attualmente ho provato la libreria U8G2 e la libreria Adafruit
Entrambe funzionano in SPI con l’OLED e non prevedono il supporto DMA

Arrivo al punto prendendo in esame la libreria Adafruit
L’aggiornamento del quadro display viene fatto con due loop che aggiornano colonne per righe buttando fuori il buffer 1 byte alla volta e questo inutile dire che é estremamente lento.

void Adafruit_SH1106::display(void) {

    for (int page = 0; page < SH1106_MAX_PAGE_COUNT; page++)
    {
	sh1106_command(SH1106_SET_PAGE_ADDRESS + page);
        sh1106_command(0x02); // low column start address
        sh1106_command(0x10); // high column start address
        for (int pixel = 0; pixel < SH1106_LCDWIDTH; pixel++)
        {
			if (sid != -1)
			{
				// SPI
			
					digitalWrite(cs, HIGH);
					digitalWrite(dc, HIGH);
					digitalWrite(cs, LOW);
			

				fastSPIwrite(buffer[(page << 7) + pixel]);  // Page * 128 + pixel

					digitalWrite(cs, HIGH);
				
}

Cercando su internet ho letto che questo display é molto simile allo stra famoso SSD1306.
Principale differenza è che SH1106 é mappato in RAM come un 132x64 mentre SSD1306 come 128x64

Prima di buttarmi a studiare fino in fondo il datasheet dell’SH1106 e fare delle prove, qualcuno ha già avuto esperienza con questo display e ha provato un sistema per farlo andare in DMA?

La vera cosa che non capisco é perché tutte le librerie che ho visto usano il sistema byte-a-byte per mandare fuori il buffer mentre mi sembra impossibile che un display non preveda la possibilità di buttare fuori buffer in un’unica mandata.

Grazie

DATASHEET SH1106

LIBRERIE SPI

LIBRERIA SSD1306 SPI + DMA

Un esempio di SPI DMA con un altro OLED SSD1306 in 128 X 64 :

e per informazioni, la libreria TURBOSPI per Sam3x (42 MHz):

sono incompatibili perchè come ho già detto una mappa 132x64 mentre l'altra 128x64

si, la strada é quella ma la mia domanda é se qualcuno ci ha già avuto a che fare e come ha risolto