一般修改 LCD 驅動重點注意以下幾點:
①、LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正確。
②、LCD 背光引腳 GPIO 的配置。
③、LCD 配置參數是否正確。
I.MX6U-ALPHA 開發板 LCD 原理圖和 NXP 官方 I.MX6ULL 開發板一致,也就是 LCD 的 IO 和背光 IO 都一樣的, 所以 IO 部分就不用修改了。 需要修改的之後 LCD 參數,打開文件mx6ull_mybsp_emmc.c,找到如下所示內容:
gedit board/freescale/mx6ull_mybsp_emmc/mx6ull_mybsp_emmc.c
關鍵字:display_info_t const displays
display_info_t 定義在文件 arch/arm/include/asm/imx-common/video.h 中,定義如下:
struct display_info_t {
int bus;
int addr;
int pixfmt;
int (*detect)(struct display_info_t const *dev);
void (*enable)(struct display_info_t const *dev);
struct fb_videomode mode;
};
pixfmt 是像素格式,也就是一個像素點是多少位,如果是 RGB565 的話就是 16 位,如果是 888 的話就是 24 位,一般使用 RGB888。
fb_videomode,定義在文件 include/linux/fb.h 中,定義如下:
struct fb_videomode {
const char *name; /* LCD 名字,要和環境變量中的 panel 相等。 */
u32 refresh; /* */
u32 xres; /* LCD X 軸像素數量。 */
u32 yres; /* LCD Y 軸像素數量。 */
u32 pixclock; /* 像素時鐘,每個像素時鐘週期的長度,單位爲皮秒。 */
u32 left_margin; /* HBP,水平同步後肩。 */
u32 right_margin; /* HFP,水平同步前肩。*/
u32 upper_margin; /* VBP,垂直同步後肩。*/
u32 lower_margin; /* VFP,垂直同步前肩。*/
u32 hsync_len; /* HSPW,行同步脈寬。 */
u32 vsync_len; /* VSPW,垂直同步脈寬。 */
u32 sync; /* */
u32 vmode; /* 大多數使用 FB_VMODE_NONINTERLACED,也就是不使用隔行掃描。 */
u32 flag; /* */
};
唯一不同的像素時鐘 pixclock 的含義不同,以 7 寸 1024*600 分辨率的屏幕(ATK7016)爲例,屏幕要求的像素時鐘爲 51.2MHz,因此:
pixclock=(1/51200000)*10^12=19531
在根據其他的屏幕參數,可以得出 ATK7016 屏幕的配置參數如下:
struct display_info_t const displays[] = {{
.bus = MX6UL_LCDIF1_BASE_ADDR,
.addr = 0,
.pixfmt = 24,
.detect = NULL,
.enable = do_enable_parallel_lcd,
.mode = {
.name = "TFT7016",
.xres = 1024,
.yres = 600,
.pixclock = 19531,
.left_margin = 140,
.right_margin = 160,
.upper_margin = 20,
.lower_margin = 12,
.hsync_len = 20,
.vsync_len = 3,
.sync = 0,
.vmode = FB_VMODE_NONINTERLACED
} } };
終端輸入:gedit include/configs/mx6ull_mybsp_emmc.h,打開 mx6ull_mybsp_emmc.h,找到所有如下語句(如果按我的步驟來,這裏之前就已經修改好了):
panel=TFT43AB
將其改爲:
panel=TFT7016
重新編譯uboot
./mx6ull_mybsp_emmc.sh
或
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_mybsp_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
下載燒錄驗證:
chmod 777 imxdownload
//給予 imxdownload 可執行權限
./imxdownload u-boot.bin /dev/sdg
//燒寫 u-boot.bin 到 SD 卡中
燒寫完成以後將 SD 卡插入 I.MX6U-ALPHA 開發板的 TF 卡槽中,最後設置開發板從 SD卡啓動。打開 SecureCRT,設置好開發板所使用的串口並打開,復位開發板,
在SecureCRT 中uboot 的命令模式下輸入如下命令:
setenv panel TFT7016
saveenv
reset
此時 LCD 驅動就工作正常了。如果 LCD 還是沒有正常工作的,那就要檢查自己哪裏有沒有改錯,或者還有哪裏沒有修改。