STM32F407 FSMC e ILI9341 - el ancho de bus de 8 bits funciona, 16 bits no

0

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.

    
pregunta wildfireheart

1 respuesta

2

Resulta que los bits de dirección difieren entre el modo de direccionamiento de 8 bits y el de 16 bits. En el direccionamiento de 8 bits se asigna a los bits [0-23] y en 16 bits a [1-24] , por lo que si desea usar A16 pin como selección CMD / DATOS, la dirección de la transferencia de DATOS es 0x60010000 en 8- modo bit y 0x60020000 en 16 bits.

Fuente: STM32F4 Manual de referencia: 36.4.1 Asignación de direcciones NOR / PSRAM

    
respondido por el wildfireheart

Lea otras preguntas en las etiquetas