lcd相關(guān)參數(shù)的復習
一、LCD與SOC的硬件連接
LCD一般會需要SOC通過硬件電路提供如下幾個信號:
(1)屏幕背光
(2)[23:0]并行數(shù)據(jù)總線
(3)HSYNC:水平同步信號(行同步),作為一行數(shù)據(jù)開始的標志,是一個脈沖信號
(4)VSYNC:幀同步信號,作為一幀數(shù)據(jù)開始的標志,是一個脈沖信號
(5)VDEN:高電平時,表示正在傳輸有效數(shù)據(jù)
(6)VCLK:像素時鐘
以上的(3)、(4)、(6)都需要根據(jù)具體使用的LCD的數(shù)據(jù)手冊中提供的參數(shù)進行計算;
(1)HSYNC(脈沖寬度)=HSPW(數(shù)據(jù)手冊提供)+1;單位為vclk
(2)VSYNC(脈沖寬度)=VSPW(數(shù)據(jù)手冊提供)+1;單位為HSVNC
(3)VCLK(像素時鐘)=數(shù)組手冊中一行的長度(One Horizontal LINE)*一幀的行數(shù)*幀同步信號(典型值為60)
例如:
在800*480的lcd中,VCLK的值為:
VCLK=(800+256)*(480+45)*60=33.264Mhz
數(shù)據(jù)均來自于LCD數(shù)據(jù)手冊
二、LCD提供給驅(qū)動框架的信息
LCD固有的6個參數(shù):
(1)HSPW:脈沖寬度
(2)HBPD:行有效信號前肩,行有效信息前有HBPD+1個無效像素信息
(3)HFPD:行有效信號后肩,行有效信息后有HFPD+1個無效像素信息
(4)VSPW:脈沖寬度
(5)VBPD:幀有效信號前肩,幀有效信息前有VBPD+1行無效像素信息
(6)VFPD:幀有效信號后肩,幀有效信息前有VFPD+1行無效像素信息
一行信息的組成:
HSYNC(HSPW+1)+(HBPD+1)+行有效信息(分辨率個像素)+(HFPD+1)
一幀信息的組成:
VSYNC(VSPW+1)+(VBPD+1)+幀有效信息+(VFPD+1)
三、關(guān)于famebuffer
framebuffer可以簡單理解為顯存的代名詞,指的是任意一段存儲空間,可以指向顯存,也可以指向內(nèi)存,只需要在內(nèi)存分配后將其設(shè)置到顯卡的相關(guān)寄存器中即可。它是內(nèi)核使用代碼構(gòu)建出來的設(shè)備文件,為應用層將數(shù)據(jù)放進顯存提供便利。可以對framebuffer進行不同的配置,支持VGA和hdmi等。
從驅(qū)動角度來看,framebuffer構(gòu)建出來的設(shè)備fb是一個字符設(shè)備,在創(chuàng)建fb的同時,還創(chuàng)建了一個類sys/class/graphics。
LCD驅(qū)動所做的工作,就是初始化LCD控制器、申請內(nèi)存、建立顯存與LCD驅(qū)動器的映射關(guān)系。這樣應用程序只需要將需要顯示的圖像丟進frambuffer,硬件就可以自動完成顯示。
應用層與內(nèi)核的數(shù)據(jù)交換方式:
(1)使用copy_from_user和copy_to_user;適用于小數(shù)據(jù)量
(2)使用mmap(用于圖像顯示,大數(shù)據(jù)量)
四,framebuffer框架介紹
1、drivers/video/fbmem.c(驅(qū)動框架代碼)
主要任務:
(1)創(chuàng)建graphic類
(2)注冊字符設(shè)備fb驅(qū)動
(3)提供register_framebuffer(struct fb_info *fb_info)/unregister_frambuffer(struct fb_info *fb_info)給具體的framebuffer驅(qū)動調(diào)用來注冊fb。
framebuffer使用struct fb_info描述framebuffer設(shè)備,使用struct file_operations fb_fops來描述設(shè)備驅(qū)動實現(xiàn)的操作。
五、驅(qū)動介紹
針對于s5pv210,其lcd的驅(qū)動在s3cfb.c這個文件中,縱觀其代碼,我們可以發(fā)現(xiàn)lcd驅(qū)動是基于platform平臺總線進行開發(fā)的,那自然就會有platform_device和platform_driver的存在。其中platform_device是在內(nèi)核初始化的時候進行注冊的,所以當對應的驅(qū)動注冊時,會按照名字進行匹配,成功后就會自動執(zhí)行驅(qū)動中的probe函數(shù)。
(1)設(shè)備注冊
struct s3c_platform_fb
????這個結(jié)構(gòu)體是fb的platform_data結(jié)構(gòu)體,是platform設(shè)備的私有數(shù)據(jù)。這個數(shù)據(jù)存儲在platform_device.device.platform_data中存儲,需要在mach文件紅進行填充,然后在probe函數(shù)中通過傳參platform_device指針取出來。
struct s3cfb_lcd(可以設(shè)置分辨率),如果是移植新的開發(fā)板,修改這個結(jié)構(gòu)體即可。這個結(jié)構(gòu)體包含了分辨率、色深、時序信號燈和具體硬件有關(guān)的信息。
platform_device的信息(platform_data)會在mach_210.c中的smdkc110_machine_init函數(shù)中進行注冊,platform_data是調(diào)用s3cfb_set_platdat()函數(shù)進行設(shè)置,參數(shù)即為我們所使用的lcd屏幕的結(jié)構(gòu)體 struct s3c_platform_fb的一個對象。這個結(jié)構(gòu)體中的.lcd成員所指向的結(jié)構(gòu)體ek070tn93(struct s3cfb_lcd的一個實例),這個結(jié)構(gòu)體就包含了lcd的時序信息在里面。
這也是具體的硬件所在。