imágenes jpeg en flash interno STM32

3

Estoy utilizando tanto STM32F103 como STM32F407 con una pantalla OLED controlada por SPI SEPS525 (160x128). Quiero almacenar las imágenes para mostrarlas en un flash interno, pero las imágenes BMP sin comprimir con colores de 16 bits son enormes (aproximadamente 40 kB cada una). ¿Es posible transferir imágenes jpeg en el flash interno y usarlas con TJpegDec enlace para ahorrar espacio en el flash? ? (Estoy usando IAR Ide y ST-Link v2)

Muchas gracias

    
pregunta user3162481

3 respuestas

2
  

hay bibliotecas de tamaños incrustadas para ellos o alguna detallada   Instrucciones para implementar [descompresión sin pérdida]?

Sí, es posible poner fotografías comprimidas (o dibujos o fuentes) en flash y luego decodificarlas con una variedad de bibliotecas.

Dos técnicas populares para almacenar datos binarios arbitrarios en flash son: son:

  • Almacene los dibujos (o las fotografías o las fuentes) (posiblemente comprimidos) en una tarjeta SD o en algún otro medio flash externo, y use las funciones de la biblioteca en su aplicación para extraer esas imágenes de la tarjeta
  • Use una utilidad bin2hex como xxd (un ) (b) (c) (d) (e) (f) (g) (h) (i) para convertir archivos binarios (posiblemente comprimidos) en" .c "archivos de código fuente en lenguaje C como matrices nombradas. (Normalmente, utilice "const" o "PROGMEM" o la palabra clave mágica que use su compilador para mantener esos datos en la memoria flash, sin utilizar ninguna RAM) Luego compile esos archivos fuente en su aplicación; y use el acceso de matriz normal [] para extraer los bytes de los dibujos o fotografías de la memoria del programa.

Hay una variedad de compensaciones en cómo almacenar cosas en flash, entre

  • suelte dibujos en PNG, fotografías en JPEG o ambos en la tarjeta SD en formato FAT, y use mucho espacio de código en su microcontrolador para implementar bibliotecas FAT, descompresión de PNG o JPEG o ambos a píxeles RGB y reformateo para empujar a su pantalla.
  • Use software en su computadora de desarrollo para convertir fotografías, dibujos o ambos en algún otro formato que requiera menos espacio de código (o menos RAM) en su microcontrolador; en el caso extremo, simplemente copie los bytes de la tarjeta SD a la pantalla .

Hay una variedad de bibliotecas de compresión de datos con y sin pérdida disponibles; a menudo la sección "solo para descompresión" es relativamente pequeña y probablemente se ajuste a su microcontrolador:

Bibliotecas más o menos diseñadas específicamente para fotografías y dibujos:

Bibliotecas "pequeñas" que aparentemente funcionan bien en sistemas integrados:

respondido por el davidcary
0

Claro, debería ser posible adaptar esa biblioteca a su plataforma; ya incluye Cortex-M0, por lo que ejecutarlo en un M3 o M4 debería ser bastante sencillo.

Tendrá que considerar la compensación entre un dispositivo de almacenamiento externo y el uso de un flash en el chip, pero si lo tiene disponible (las '407 variantes que se encuentran comúnmente tienen mucho) puede simplificar su diseño al usarlo. Si haces una pizarra, es posible que desees colocar una huella para un dispositivo flash externo y no rellenarla si encuentras que puedes exprimir todo en el chip.

Especialmente con el '407 si está implementando compilaciones de prueba cada pocos minutos durante el desarrollo, puede que valga la pena el tiempo para descubrir cómo configurar su herramienta de programación para borrar y sobrescribir su programa, y mantener sus datos en un lugar separado. área del flash que reescribes solo cuando es necesario.

    
respondido por el Chris Stratton
0

¿Ha considerado un dispositivo flash SPI externo? Se puede obtener 8MB (204 pantallas completas) en SOIC-8 por un par de dólares y está soldado por lo que no tendrá problemas de confiabilidad de contacto como una tarjeta SD.

Si puede colocar el flash y el OLED en puertos SPI separados, debería poder realizar una DMA entre ellos a la velocidad del bus SPI (1 MB / s = 25 fps) a través de un pequeño búfer de memoria. Creo que el 407 le permitiría directamente DMA desde una memoria flash externa a través del FSMC al puerto SPI del OLED (solo he usado el F103, así que no he probado el FSMC, personalmente).

Mucho más fácil y, probablemente, con mejor rendimiento que escribir (des) el código de compresión IMHO.

    
respondido por el William Brodie-Tyrrell

Lea otras preguntas en las etiquetas