工程师笔记 | 驱动 8 位 8080 接口 LCD 时的字节序问题 前言) j7 n( j$ u; _: Z: j7 E1 p6 c8 B d. z. S在一些图形界面应用中,系统架构会时常考虑使用 FSMC接口来驱动 8080接口的 LCD屏。在 MCU渲染完成,将framebuffer发送到 LCD时,有可能会遇到存儲大小端的问题。STM32MCU都采用 ARMCortex内核,内存使用小端格式。而 intel 8080接口的 LCD在传输 RGB数据时,使用的是大端格式。MCU在传输 RGB数据时,字节序有可能不匹配。- s6 C3 M% }/ s' Z3 X 在图形界面应用中,像素格式一般会使用 RGB888或 RGB565。而在使用 FSMC接口驱动 8bit位宽的 LCD时,很可能会使用 RGB565格式。本文中会介绍两种方法来处理8bit8080接口 RGB565格式图像数据字节序问题。/ M/ y( F! y. l4 I( U0 Z 图像数据字节序 8bit8080 LCD在接收 RGB565数据时,会将第一个字节解析为{R4-R0,G5-G3}, 第二个字节解析为{G2-G0,B4-B0},并按这个顺序接收所有数据,如下图: DMA2D 进行Byteswap DMA2D是 ST为图形应用专门设计并优化的2D加速引擎,拥有丰富的功能。其字节序重排功能包含了Red blueswap以及 Byteswap特性。Red blueswap特性在 L4和 L4+系列 MCU都支持,而 Byteswap仅在L4+系列有支持。在 L4+系列上,通过配置 DMA2D_OPFCCR寄存器的 SB位,即可使能 Byteswap功能,在 DMA2D的outputFIFO中完成字节序调整,如下图: GPDMA 进行Byteswap, B- r7 l$ A0 W( q- M5 X6 J* ?8 U 在新推出的 U5系列芯片上,集成了 GPDMA模块。这是新的通用DMA模块,能在传输数据的同时,还有丰富的数据处理能力。在初始化GPDMA时,通过配置源和目的数据位宽为 DMA_SRC_DATAWIDTH_WORD,在数据处理中配置 DataExchange为 DMA_EXCHANGE_DEST_BYTE,如下面代码,也能实现Byteswap功能。 0 r0 G) n, \# b1 X8 A! W1 Z/ R 小结 在驱动 8位 8080接口 LCD时,需要注意图像数据字节序问题。使用 RGB565格式时,可以使用 DMA2D或 GPDMA来传输图像数据,同时对图像数据做 Byteswap调整,满足LCD的字节序要求。$ B) T% r6 K: U3 I / P4 ?$ I7 x' [ |