Conducir Nokia TFT LCD con STM32

¿Cómo puedo aumentar la frecuencia de actualización de un Nokia LCD que estoy manejando usando el microcontrolador STM32F103?

La pantalla LCD es de 132*162 y toma instrucciones/DATOS de 9 bits con RGB para cada píxel en formato 565. Dado que SPI en STM32 no puede hacer 9 bits, estoy usando USART (funcionando a un máximo de 4,000,000 bit/s como máximo mientras uso HSPI) en modo de 9 bits para controlar la pantalla LCD.

Esto funciona bien, pero la frecuencia de actualización no es tan buena. Ahora mismo me toma 230 ms aprox escribir toda la pantalla.

Haciendo cálculos aproximados, (132*162*2*9)/4e6 = 97 ms. El mío es más alto debido a los gastos generales + el hecho de que necesito duplicar cada byte antes de enviarlo, ya que USART solo hace LSB primero.

Estoy buscando algunas sugerencias sobre cómo puedo reducir la frecuencia de actualización.

  1. ¿Usar DMA? No estoy seguro de cuán útil sería en este caso, ya que mi microcontrolador solo controla la pantalla LCD. Nada más.

  2. Guarde la pantalla LCD en la memoria RAM y envíela a la pantalla LCD de una sola vez. No puedo hacerlo ya que el microcontrolador tiene solo 16 KB de RAM.

  3. Bit bang GPIO para controlar la pantalla LCD. No estoy seguro si esto lograría una tasa de más de 4 MHz de USART. Además, con esto pierdo la capacidad de usar DMA en el futuro si es necesario.

La pantalla LCD que estoy usando se usa en la serie Nokia C100 y usa el controlador SPFD54124B.

Use DMA con SPI con RGB de 3x8 bits e intercale cuadros W/R cuando se necesiten actualizaciones
O use 18 bits con el controlador ILI9325 GRAM con SPI sin esfuerzo y sin bytes redundantes
Tu pregunta es un poco confusa. ¿Está utilizando HSPI o UART? También debe especificar el controlador LCD.
Suponiendo que es el ILI9163, puede cambiar a la interfaz SPI de 4 hilos si tiene acceso a los pines D/CX, IM2 y 4WSPI del controlador.
@TisteAndii Estoy usando usart periférico en modo spi
@TisteAndii agregó a la pregunta. Es un Nokia Lcd con controlador spfd54124b
¿Tiene acceso a los pines de selección de la interfaz del controlador, para que pueda cambiar a SPI de 4 cables (o algún otro modo)? De lo contrario, está atascado en este modo y no parece haber una manera fácil de acelerar las cosas, mientras mantiene DMA en la imagen.

Respuestas (3)

Quiere algo que se parezca a SPI, así que intentaría hacer que SPI funcione.

Suponiendo que su LCD (que es posible que desee especificar) no necesita un tiempo específico entre palabras, solo debe usar los modos de palabra que ofrece el STM32F1 (8 o 16 bits, iirc) y extraer 8 palabras en una vez: serían 72 bits y se pueden dividir en 9 transferencias SPI.

Mmm. Intenté algo similar a lo que sugieres, donde guardo en caché las escrituras Lcd hasta que un búfer de 72 bits está lleno y luego lo envío todo una vez que está lleno. Pero no noté ningún aumento significativo en la velocidad debido a todos los cambios que tuve que hacer para almacenar el valor de 9 bits en una matriz de bytes. también se agregaron los detalles del controlador y Lcd a la pregunta

El SPFD54124B tiene una interfaz SPI de 4 pines y 8 bits. Simplemente use eso en lugar de la interfaz "similar a SPI" de 3 pines y 9 bits.

Consulte la hoja de datos de la página 118 a continuación.

La interfaz SPI de cuatro pines utiliza un

  • "CSX": selección de chip (MCU->controlador de pantalla)
  • "SCL": Reloj serie (->)
  • "DCX": Datos||comando (->)
  • "SDA": Datos (->)

CSX, SCL, SDA pueden ser manejados de forma completamente automática por el hardware SPI en su MCU. DCX tendría que ser un GPIO. Eso no es un problema. Simplemente puede configurar el pin GPIO en datos, transmitir sus datos de píxeles de alta velocidad, luego capturar la interrupción cuando termine, alternar el pin DCX, enviar comandos, capturar la interrupción cuando termine y volver al modo de datos.

De verdad, me entristece un poco que hayas tardado tanto en decir qué controlador usas. Podrías haber tenido una respuesta mucho, mucho más rápida.

Buen punto. Fue un descuido de mi parte no haber especificado el controlador antes. Dicho esto, soy consciente del modo al que se refirió, pero desafortunadamente a partir de toda la información que he podido recopilar de la red, este modo en particular no está habilitado en esta pantalla LCD (no se puede acceder al pin d/c), por lo tanto uno está atascado usando el modo de 9 bits. Tal vez debería agregar esto a la pregunta también. ¡Gracias!

Está utilizando una pantalla LCD con interfaz serial. Eso tiene un gran impacto en la velocidad. Debe usar LCD con interfaz paralela si desea acelerar significativamente la frecuencia de actualización.