Índice
Cómo utilizar la memoria Flash con los chips BT81x
Para entender el Motor de Vídeo Embebido (EVE) – BT81x, tienes que recordar que no tiene una solución típica, como ocurre en los sistemas embebidos con pantallas LCD. ¿Qué significa?
Los chips EVE no tienen memoria intermedia de fotogramas, lo que significa que todas las operaciones de visualización se realizan en tiempo de ejecución.
Utilizando la memoria flash NOR, permite almacenar y visualizar directamente desde ella: imágenes, audio y vídeo. También puede utilizar fuentes personalizadas almacenadas en flash, preparadas en EVE Asset Builder (descrito más adelante).
El BT81x dispone de una memoria flash serie situada en 80 0000h
Detección de la memoria, utilizando la placa de evaluación STM32 en configuración directa (puente USB -> SPI)
Para soportar diferentes vendedores de chips SPI NOR flash, el primer bloque (4096 bytes) de la flash está reservado para el controlador flash llamado archivo BLOB que es proporcionado por Bridgetek. El archivo BLOB se programará en primer lugar, para que el estado flash pueda entrar en modo de velocidad máxima (rápido). El chip flash tiene programado el archivo blob correcto en su primer bloque (4096 bytes).
Creación de un archivo de imagen flash
El archivo generado es un archivo *.bin con datos flash y un archivo *.map con direcciones y tamaños del archivo en memoria.
Programación de la memoria mediante la tarjeta de evaluación STM32
Configuración de la tarjeta de evaluación STM32 y el módulo LCD en modo directo:
Descargue los controladores de : https://ftdichip.com/drivers/d2xx-drivers/
Ejemplos de código C para operaciones flash:
Los ejemplos de código se pueden encontrar en Riverdi GitHub: https://github.com/riverdi/EVE3_flash_write (por favor, ten en cuenta que los mismos ejemplos funcionarán para los chips de EVE4 y EVE3).
Para otras plataformas sólo hay que cambiar las funciones de gestión del sistema de archivos como fopen(), fread(), fclose().
El código del ejemplo de demostración utiliza la biblioteca FatFS para leer datos de la tarjeta SD y ponerlos en la memoria flash NOR de EVE.
Fuentes: Formato heredado
Formato de mapa de bits: Seleccionar todo, o una combinación de L1, L2, L4, L8
Comando EVE: Seleccione el comando SETFONT o SETFONT2 para configurar el archivo de fuentes. MANUAL RIVERDI
- SETFONT: Generar tabla métrica de fuentes compatible con FT80X, la opción por defecto.
- SETFONT2: Genera una tabla métrica de fuentes compatible con BT81X/FT81X para el comando Cmd_SetFont2. Los archivos generados con esta opción no son compatibles con el FT80X
Dirección de los datos de la fuente (tabla métrica + glifo): Dirección para poner los datos de la fuente en RAM_G
Juego de caracteres definido por el usuario: Si no se selecciona (por defecto), se convertirán todos los caracteres de la fuente. Si se selecciona, sólo se convertirá una lista de caracteres de un archivo de texto; los caracteres de esta lista deben estar definidos en el archivo de fuentes de entrada.
Caracteres ASCII imprimibles [32-126]: Si se selecciona, se convertirán los caracteres ASCII que tengan un punto de código de 32 a 126.
Salida:
- Genera el archivo de bloque métrico, así como los datos de mapa de bits de formato L1, L2, L4, L8.
- La salida es un bloque métrico de 148 bytes seguido de los datos en bruto del mapa de bits.
- Esta herramienta también genera código C de ejemplo para demostrar el uso.
- Los datos de salida se preparan para 1 asa de mapa de bits.
uint8_t fuente[]=
{
/*Final de los datos en bruto del mapa de bits -*/
}
#define FONT_HANDLE (1)
#define FONT_FILE_ADDRESS (RAM_G + 1000)
#define FIRST_CHARACTER (32)
void Cargar_Fuente(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, “pathto\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, “mostrar %d “, i);
App_WrCoCmd_Buffer(phost, DISPLAY());
Gpu_CoCmd_Swap(phost);
App_Flush_Co_Buffer(phost);
Gpu_Hal_WaitCmdfifo_empty(phost);
}
Cómo utilizar la fuente personalizada Extended almacenada en la memoria flash
1. En primer lugar lo que tienes que hacer es generar archivos glypth y xfont de la fuente ttf :
2. Generar imagen archivo flash.bin
3. Programar Flash (botón Actualizar), intente desconectar el USB si observa algún problema.
4. Código:
Font está en la memoria flash (archivo glypth), Tienes que copiar xfont a GRAM.
void Cargar_XFont(void)
{
uint32_t fontAddr = RAM_G;
// NOTA: Recuerda escribir el archivo de glifos en la flash del BT815 en la dirección 4096
// Cambiar Flash a Modo FULL
Gpu_CoCmd_FlashFast(phost, 0);
// Cargar archivo xfont en RAM gráfica
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);
}
Imágenes
El EVE acepta archivos de imagen JPEG/PNG/BMP para su conversión.
Formato de salida: Formato de salida de las imágenes, es uno de los siguientes:
ARGB1555, L1, L2, L4, L8, RGB232, ARGB2, ARGB4, RGB565, PALETTED565, PALETTED4444, PALETTED8, formato ASTC de 4×4 a 12×12, también se puede utilizar el formato DXT1ASTC para reproducir animaciones.
Ejemplo de código C para visualizar un archivo JPEG (el archivo JPEG se descomprime en GRAM):
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 );
/Empezar a dibujar el mapa de bits
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);
}
Visualización directa de la imagen ASTC desde la memoria flash:
static void Cargar_ImagenASTC(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);
/Empezar a dibujar el mapa de bits
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);
}
Vídeo desde memoria flash
El archivo de vídeo debe convertirse a *.avi en formato MJEG.
Código para ejecutar vídeo desde la memoria flash:
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
Convierte WAV/MP3 en archivos compatibles con EVE.
Archivo de entrada: El archivo de audio original que se va a convertir.
Carpeta de salida: Carpeta que contiene los archivos convertidos.
Formato de salida: Formato de audio de la salida
- PCM con signo de 8 bits
- Ley u de 8 bits
- IMA ADPCM de 4 bits
Generar animación
Convierte un archivo GIF o una lista de archivos PNG/JPEG/BMP en un archivo de animación compatible con EVE. La animación es compatible con el chip BT81X y superiores.
Archivo o carpeta de entrada: Los usuarios pueden seleccionar archivo GIF o carpeta de imágenes. La carpeta de imágenes debe contener archivos PNG/JPEG/BMP que tengan definido el nombre secuencial como expresión regular “.*[0- 9]+.(png|jpeg|jpg|bmp)”. El número indica la secuencia de fotogramas animados. Por ejemplo: “001.png”, “002.png”.
Carpeta de salida: Carpeta que contiene los archivos convertidos.
Huellas de bloque ASTC: Selecciona una de las siguientes: 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
Velocidad de compresión: muy rápida, rápida, media, minuciosa y exhaustiva. La calidad aumenta de muy rápida a exhaustiva, mientras que la velocidad de codificación también disminuye.