Verwendung von Flash-Speicher mit BT81x-Chips

Um die Embedded Video Engine (EVE) – BT81x zu verstehen, muss man sich vergegenwärtigen, dass es sich nicht um eine typische Lösung handelt, wie sie in Embedded Systemen mit LCD-Bildschirmen verwendet wird. Was bedeutet das?

EVE-Chips haben keinen Frame-Buffer – das bedeutet, dass alle Anzeigeoperationen zur Laufzeit durchgeführt werden.

Die Verwendung des NOR-Flash-Speichers ermöglicht es, Bilder, Audio- und Videodateien zu speichern und direkt anzuzeigen. Sie können auch benutzerdefinierte, in Flash gespeicherte Schriftarten verwenden, die in EVE Asset Builder vorbereitet wurden (siehe unten).

BT81x hat einen seriellen Flash-Speicher, der sich auf 80 0000h befindet

Erkennung des Speichers mit dem STM32 Evaluation Board in direkter Konfiguration (USB -> SPI bridge)

Um verschiedene Hersteller von SPI NOR-Flash-Chips zu unterstützen, ist der erste Block (4096 Bytes) des Flashs für den Flash-Treiber namens BLOB-Datei reserviert, der von Bridgetek bereitgestellt wird. Die BLOB-Datei muss zuerst programmiert werden, damit der Flash-Status in den Full-Speed-Modus (schnell) übergehen kann. Der Flash-Chip hat in seinem ersten Block (4096 Bytes) die richtige Blob-Datei programmiert.

Flash-Image-Datei erstellen

Die erzeugte Datei ist eine *.bin-Datei mit Flash-Daten und eine *.map-Datei mit den Adressen und Größen der Dateien im Speicher.

Programmierung des Speichers mit dem STM32 Evaluation Board

Konfiguration des STM32 Evaluation Boards und des LCD-Moduls im Direktmodus:

Bitte laden Sie die Treiber von : https://ftdichip.com/drivers/d2xx-drivers/

C Code-Beispiele für Flash-Operationen:

Die Codebeispiele finden Sie auf Riverdi GitHub:
https://github.com/riverdi/EVE3_flash_write
(bitte beachten Sie, dass die gleichen Beispiele für EVE4 und EVE3 Chips funktionieren).

Für andere Plattformen müssen nur die Funktionen zur Verwaltung des Dateisystems wie fopen(), fread(), fclose() geändert werden.

Der Demo-Beispielcode verwendet die FatFS-Bibliothek, um Daten von der SD-Karte zu lesen und im EVE-NOR-Flash-Speicher abzulegen.

Schriftarten: Altes Format

Bitmap-Format: Alles auswählen oder eine Kombination aus L1, L2, L4, L8

Unterstützung von EVE-Befehlen: Wählen Sie den Befehl SETFONT oder SETFONT2, um eine Schriftartdatei einzurichten. RIVERDI MANUAL

  • SETFONT: Erzeugen einer FT80X-kompatiblen metrischen Tabelle für Schriften, die Standardoption.
  • SETFONT2: Erzeugt BT81X/FT81X-kompatible Font-Metrik-Tabelle für den Befehl Cmd_SetFont2. Die mit dieser Option erzeugten Dateien sind nicht mit FT80X kompatibel.

Adresse der Schriftdaten (Metrics Table + Glyph): Adresse für die Ablage der Schriftdaten in RAM_G

Benutzerdefinierter Zeichensatz: Wenn nicht ausgewählt (Standard), werden alle Zeichen der Schriftart umgewandelt. Wenn diese Option ausgewählt ist, wird nur eine Liste von Zeichen in einer Textdatei konvertiert; die Zeichen in dieser Liste müssen in der Eingabeschriftdatei definiert sein.

Druckbare ASCII-Zeichen [32-126]: Wenn diese Option ausgewählt ist, werden ASCII-Zeichen mit einem Codepunkt von 32 bis 126 konvertiert.

Ausgabe:

  • Generieren Sie die metrische Blockdatei sowie Bitmap-Daten im Format L1, L2, L4, L8.
  • Die Ausgabe besteht aus einem metrischen Block von 148 Byte, gefolgt von den Bitmap-Rohdaten.
  • Dieses Tool generiert auch C-Beispielcode, um die Verwendung zu demonstrieren.
  • Die Ausgabedaten werden für 1 Bitmap-Handle vorbereitet.

uint8_t font[]=

{

/*Bitmap Rohdaten Ende —*/

}

#define FONT_HANDLE (1)

#define FONT_FILE_ADDRESS (RAM_G + 1000)

#define FIRST_CHARACTER (32)

void Load_Font(uint32_t i)

{

Gpu_CoCmd_Dlstart(phost);

App_WrCoCmd_Buffer(phost, CLEAR(1, 1, 1));

App_WrCoCmd_Buffer(phost, COLOR_RGB(255, 255, 255));

Gpu_Hal_WrMem(phost, FONT_FILE_ADDRESS, font, sizeof(font));

//Gpu_Hal_LoadImageToMemory(phost, „path\to\digital-7_24_L8.raw“, FONT_FILE_ADDRESS, LOAD);

Gpu_CoCmd_SetFont2(phost, FONT_HANDLE, FONT_FILE_ADDRESS, FIRST_CHARACTER);

Gpu_CoCmd_Text(phost, 0, 0, FONT_HANDLE, OPT_FORMAT, „display %d „, i);

App_WrCoCmd_Buffer(phost, DISPLAY());

Gpu_CoCmd_Swap(phost);

App_Flush_Co_Buffer(phost);

Gpu_Hal_WaitCmdfifo_empty(phost);

}

So verwenden Sie die im Flash-Speicher gespeicherte erweiterte benutzerdefinierte Schriftart

1. Zuerst müssen Sie aus der Schriftart ttf die Dateien glypth und xfont erzeugen:

2. Bild flash.bin-Datei erzeugen

3. Flash programmieren (Update-Taste), versuchen Sie, die USB-Verbindung zu trennen, wenn Sie Probleme feststellen

4. Code:

Die Schriftart befindet sich im Flash-Speicher (Glypth-Datei), Sie müssen xfont nach GRAM kopieren.


void
Load_XFont(
void
)

{

uint32_t fontAddr = RAM_G;

// HINWEIS: Denken Sie daran, die Glyphen-Datei in das Flash des BT815 an Adresse 4096 zu schreiben.

// Blitz in den FULL-Modus schalten

Gpu_CoCmd_FlashFast(phost, 0);

// xfont-Datei in Grafik-RAM laden

Gpu_CoCmd_FlashRead(phost, RAM_G, 52096, 4416);

Gpu_Hal_WaitCmdfifo_empty(phost);

Gpu_CoCmd_Dlstart(phost);

App_WrCoCmd_Buffer(phost, CLEAR(1, 1, 1));

App_WrCoCmd_Buffer(phost, COLOR_RGB(255, 255, 255));

Gpu_CoCmd_SetFont2(phost, 1, fontAddr, 0);

Gpu_CoCmd_Text(phost, 50, 50, 1, 0, u8„ABCDEFG 1234567890“);

App_WrCoCmd_Buffer(phost, DISPLAY());

Gpu_CoCmd_Swap(phost);

App_Flush_Co_Buffer(phost);

Gpu_Hal_WaitCmdfifo_empty(phost);

}

Bilder

EVE akzeptiert JPEG/PNG/BMP-Bilddateien, die konvertiert werden sollen.

Ausgabeformat: Das Ausgabeformat der Bilder, es ist eines der folgenden:

ARGB1555, L1, L2, L4, L8, RGB232, ARGB2, ARGB4, RGB565, PALETTED565, PALETTED4444, PALETTED8, ASTC-Format von 4×4 bis 12×12, DXT1ASTC-Format können auch zur Wiedergabe von Animationen verwendet werden.

C-Code-Beispiel zur Anzeige einer JPEG-Datei (JPEG-Datei wird nach GRAM dekomprimiert):


static void
Load_Jpeg(Gpu_Hal_Context_t *phost, uint32_t adr)

{

Gpu_CoCmd_Dlstart(phost);

App_WrCoCmd_Buffer(phost, CLEAR(1, 1, 1));

App_WrCoCmd_Buffer(phost, COLOR_RGB(255, 255, 255));

//Gpu_CoCmd_FlashHelper_SwitchFullMode(&host);

Gpu_CoCmd_FlashSource(phost, adr);

Gpu_CoCmd_LoadImage(phost, 0, OPT_FLASH );

//Start der Bitmap-Zeichnung

App_WrCoCmd_Buffer(phost, BEGIN(BITMAPS));

App_WrCoCmd_Buffer(phost, VERTEX2II(0, 0, 0, 0));

App_WrCoCmd_Buffer(phost, END());

App_WrCoCmd_Buffer(phost, RESTORE_CONTEXT());

App_WrCoCmd_Buffer(phost, DISPLAY());

Gpu_CoCmd_Swap(phost);

App_Flush_Co_Buffer(phost);

Gpu_Hal_WaitCmdfifo_empty(phost);

//platform_sleep_ms(3000);

}

ASTC-Bild wird direkt aus dem Flash-Speicher angezeigt:


static void
Load_ImageASTC(Gpu_Hal_Context_t *phost, uint32_t adr, uint16_t fmt)

{

uint16_t iw = 1280;

uint16_t ih = 800;

Gpu_CoCmd_Dlstart(phost);

//App_WrCoCmd_Buffer(phost, CLEAR(1, 1, 1));

//App_WrCoCmd_Buffer(phost, COLOR_RGB(255, 255, 255));

//Gpu_CoCmd_FlashSource(phost, adr);

Gpu_CoCmd_SetBitmap(phost, (0x800000 | adr/ 32 ), fmt, iw, ih);

//Gpu_CoCmd_SetBitmap(phost, RAM_G,RGB565 , iw, ih);

//Start der Bitmap-Zeichnung

App_WrCoCmd_Buffer(phost, BEGIN(BITMAPS));

App_WrCoCmd_Buffer(phost, VERTEX2F(0, 0));

App_WrCoCmd_Buffer(phost, END());

App_WrCoCmd_Buffer(phost, RESTORE_CONTEXT());

App_WrCoCmd_Buffer(phost, DISPLAY());

Gpu_CoCmd_Swap(phost);

App_Flush_Co_Buffer(phost);

Gpu_Hal_WaitCmdfifo_empty(phost);

}

Video aus Flash-Speicher

Die Videodatei muss in *.avi im MJEG-Format konvertiert werden.

Code zur Ausführung von Videos aus dem Flash-Speicher:

Gpu_CoCmd_FlashHelper_SwitchFullMode(&host);

Gpu_Hal_Wr32(phost, REG_PLAY_CONTROL, 1);

Gpu_CoCmd_Dlstart(phost);

App_WrCoCmd_Buffer(phost, CLEAR(1, 1, 1));

App_WrCoCmd_Buffer(phost, COLOR_RGB(255, 255, 255));

Gpu_CoCmd_FlashSource(phost, adr);

App_WrCoCmd_Buffer(phost, CMD_PLAYVIDEO);

App_WrCoCmd_Buffer(phost, OPT_FLASH|OPT_FULLSCREEN|OPT_NOTEAR);

App_Flush_Co_Buffer(phost);

Gpu_Hal_WaitCmdfifo_empty(phost);

Audio

WAV/MP3 in eine EVE-kompatible Datei umwandeln.

Eingabedatei: Die zu konvertierende Original-Audiodatei.

Ausgabeordner: Der Ordner enthält die konvertierten Dateien.

Ausgabeformat: Audioformat der Ausgabe

  • 8 Bit PCM mit Vorzeichen
  • 8 bit u-Gesetz
  • 4 Bit IMA ADPCM

Animation generieren

Konvertieren Sie eine GIF-Datei oder eine Liste von PNG/JPEG/BMP-Dateien in eine EVE-kompatible Animationsdatei. Animationen werden vom BT81X-Chip und höher unterstützt.

Eingabedatei oder -ordner: Der Benutzer kann eine GIF-Datei oder einen Bildordner auswählen. Der Bildordner muss PNG/JPEG/BMP-Dateien enthalten, deren fortlaufender Name als regulärer Ausdruck „.*[0- 9]+\.(png|jpeg|jpg|bmp)“ definiert ist. Die Nummer gibt die Reihenfolge der animierten Bilder an. Zum Beispiel: „001.png“, „002.png“.

Ausgabeordner: Der Ordner enthält die konvertierten Dateien.

ASTC Block Footprints: Wählen Sie einen der folgenden aus: 4×4, 5×4, 5×5, 6×5, 6×6, 8×5, 8×6, 8×8, 10×5, 10×6, 10×8, 10×10, 12×10, 12×12

Komprimierungsgeschwindigkeit: sehr schnell, schnell, mittel, gründlich und umfassend. Die Qualität steigt von „sehr schnell“ bis „erschöpfend“, während die Verschlüsselungsgeschwindigkeit ebenfalls abnimmt.