st7789 使用spi初始化,rgb数据总线传输。
1.首次编译错误
报错如下:
libgcc.a(bpabi.o) uses VFP registerarguments, u-boot does not
修改如下:
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -16,7 +16,7 @@ endif
LDFLAGS_FINAL +=--gc-sections
PLATFORM_RELFLAGS += -ffunction-sections-fdata-sections \
-fno-common -ffixed-r9
-PLATFORM_RELFLAGS += $(callcc-option, -msoft-float) \
+PLATFORM_RELFLAGS += $(callcc-option,-mfloat-abi=hard) \
$(call cc-option,-mshort-load-bytes,$(callcc-option,-malignment-traps,))
PLATFORM_CPPFLAGS += -D__ARM__
2.IO定义及复用
IO复用在 board/technexion/picosom-imx6ul/picosom-imx6ul.c 设置
1. lcd背光
- 注意事项
- 背光在framebuff填充后开启(flush_cache 后)
- 如果没在flush_cache后调用,会出现小部分显示异常,无论怎么调节LCD参数都无法更正。
- 使用GPIO模拟SPI
- 注意事项
- 调用硬件spi也就是driver/spi/mxc_spi.c驱动,spi io口没有波形
- 使用GPIO模拟, 数据口闲事设置成为高电平,不然读不出数据
- spi数据长度为9bit模式,使用0xa5, 0x5a命令观察数据的正确性
3.使用SPI初始化LCD
- 注意事项
- 1.在 st7789_init_board() 中完成SPI 命令初始化
- 2.在 mxs_lcd_init()中调用 st7789_init_board()
- 3.SPI初始化注意命令及其数据传输的正确性,否则会出现LCD无法正常显示,如下图:
3.i.mx6ul 平台的lcd配置及其初始化
- 设置LCD参数
- 注意事项
- LCD参数设置一般LCD厂商官方datasheet有介绍
- linux/Document/fb/Frambuffer.txt 介绍相关参数含义
- 如果对应的位置出现显示异常,将其调大
- 配置平台LCD驱动
- 注意事项
- 平台LCD控制驱动在driver/video/mxsfb.c中定义好,定义的是RGB接口最好别修改mxsfb.c中相关代码,尽量在spi 命令中进行配置。
- 不要在flush_cache前 对framebuffer进行延时验证,不然会出现各种显示异常
4.splash_log调用过程
1. 调用过程
board_init_r函数数组
|
|
stdio_init函数
|
|
stdio_add_devices
|
|
drv_video_init
|
|
video_init
|
|
video_logo
|
|
logo_plot
|
|
plot_logo_or_black
|
|
bmp_logo_palette中数组8bit bmp rgb数据
|
|
tools/Makefile中 LOGO_BMP tools/logos/sandisk_32.bmp
2. bmp制作与转换
提前设置好bmp像素大小,不然显示异常。
cat convert.sh
#!/bin/sh
#install Netpbm first
jpegtopnm $1 | ppmquant31 | ppmtobmp -bpp8 > $2
#example :
#1. jpegtopnm origin.jpg | ppmquant31 | ppmtobmp -bpp 8 > target.bmp
#2. ./convert.sh original.bmp target.bmp
- 注意事项
- 上述只能使用深度为8的BMP
- 可以使用lpcbmp2c.exe工具对24bit的bmp转换成RGB数据
5.总结
·1.分析好程序整体框架后,再对其进行相关设置。
·2.在调用延时观察现象时,注意其位置,否则会出现各种异常