Estoy intentando usar la pantalla TFT con ILI9341 8080 interfaz de 16 bits con STM32F407 a través de FSMC. Estoy usando HAL. Para explicar un poco más, para los registros de comandos ILI9341 solo se utilizan 8 bits más bajos del bus, el ancho completo del bus de 16 bits solo se utiliza para la transferencia de datos de imagen (en formato RGB 565). Probé el programa antes con una pantalla idéntica configurada con 8080 interfaz de 8 bits y funcionó perfectamente.
Tengo datos de imágenes en la memoria MCU en formato uint16_t
y uso
HAL_SRAM_Write_16b
para la transferencia de datos de imagen y
HAL_SRAM_Write_8b
para la transferencia de comandos y parámetros de comando.
Ahora, cuando seleccione
hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_8;
todo funciona bien, solo los datos de imagen (colores y resolución) están equivocados, por supuesto, porque ILI9341 tiene solo 8 bits de datos inferiores (azul y la mitad de los bits verdes) y los 8 bits superiores son cero. Tan pronto, como yo seleccione
hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
La pantalla muestra franjas negras y grises por un segundo y luego se pone en blanco: estado de error.
Utilizo A16 para la selección de comandos / datos, por lo tanto, la dirección de la memoria de comandos es 0x60000000
y la memoria de datos 0x60010000
.
Pregunta: ¿Puede alguien explicarme cómo funciona la transferencia de datos en el modo FSMC_NORSRAM_MEM_BUS_WIDTH_16
, más precisamente cuando uso HAL_SRAM_Write_16b
(o HAL_SRAM_Write_8b
) en este modo, si los datos son envió una palabra de 16 bits (u 8 bits alineada a lsb) por período de tiempo, o si la MCU de alguna manera los distorsiona / combina.