2024Display Engine模塊中 LCD 的調(diào)試方法_第1頁
2024Display Engine模塊中 LCD 的調(diào)試方法_第2頁
2024Display Engine模塊中 LCD 的調(diào)試方法_第3頁
2024Display Engine模塊中 LCD 的調(diào)試方法_第4頁
2024Display Engine模塊中 LCD 的調(diào)試方法_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

D1TinaLinux發(fā)布日期:1.....................................................................................................................IC4.1添加屏驅(qū)動步驟....................................4.2.......................................4.2.1屏驅(qū)動源碼位置................................4.2.2menuconfig配置說明............................4.2.3...................................4.2.4..................................4.2.5.............................4.2.6背光控制函數(shù)說明...............................4.2.7電源控制函數(shù)說明...............................4.2.8DSI相關函數(shù)說明...............................4.2.9I8080..............................4.2.10...............................4.2.11iic/spi.........................4.2.12U-boot屏驅(qū)動注意事項...........................4.3RGB接口.......................................4.3.1概述......................................4.3.2RGB.................................4.3.3RGB............................4.3.4RGB接口的典型配置..........................4.4MIPI-DSI接口....................................4.4.1概述......................................4.4.2MIPI-DSI的管腳...............................4.4.3MIPI-DSI的電源...............................4.4.4MIPI-DSI屏.......................4.4.5MIPI-DSIlane........................4.4.6MIPI-DSIVideomode屏配置示例.....................4.4.7MIPI-DSI.......................4.4.8MIPI-DSICommandmode屏配置示例..................4.4.9MIPI-DSIVR雙屏配置示例.........................4.5I8080接口......................................4.5.1概述......................................4.5.2I8080接口屏典型配置示例.................................................................概述......................................LVDSSinglelink典型配置.........................LVDSduallink...........................RGBI8080............................board.dts..............................4.8.1管腳定義....................................4.8.2..................................5.1LCD接口參數(shù)說明..................................5.1.1lcd_driver_name..............................5.1.2lcd_model_name..............................5.1.3lcd_if.....................................5.1.4lcd_hv_if...................................5.1.5lcd_hv_clk_phase.............................5.1.6lcd_hv_sync_polarity...........................5.1.7lcd_hv_srgb_seq..............................5.1.8lcd_hv_syuv_seq..............................5.1.9lcd_hv_syuv_fdly..............................5.1.10lcd_cpu_if.................................5.1.11lcd_cpu_te.................................5.1.12lcd_lvds_if.................................5.1.13lcd_lvds_colordepth...........................5.1.14 ..............................5.1.15lcd_dsi_if..................................5.1.16lcd_dsi_lane................................5.1.17lcd_dsi_format..............................5.1.18lcd_dsi_te.................................5.1.19lcd_dsi_port_num.............................5.1.20lcd_tcon_mode..............................5.1.21lcd_slave_tcon_num...........................5.1.22lcd_tcon_en_odd_even_div.......................5.1.23lcd_sync_pixel_num...........................5.1.24lcd_sync_line_num............................5.1.25lcd_cpu_mode...............................5.1.26lcd_fsync_en................................5.1.27lcd_fsync_act_time............................5.1.28lcd_fsync_dis_time............................5.1.29lcd_fsync_pol...............................5.2屏時序參數(shù)說明....................................5.2.1lcd_x.....................................5.2.2lcd_y.....................................5.2.3lcd_ht....................................5.2.4lcd_hbp...................................5.2.5lcd_hspw..................................5.2.6lcd_vt....................................5.2.7lcd_vbp...................................5.2.8lcd_vspw..................................5.2.9lcd_dclk_freq................................5.2.10 .................................5.2.11lcd_height.......................................................................5.3.1lcd_pwm_used...............................5.3.2 ................................5.3.3lcd_pwm_freq...............................5.3.4lcd_pwm_pol................................5.3.5lcd_pwm_max_limit............................5.3.6lcd_bl_en..................................5.3.7lcd_bl_n_percent..............................5.3.8lcd_backlight................................顯示效果相關參數(shù)...................................5.4.1lcd_frm...................................5.4.2lcd_gamma_en...............................5.4.3lcd_cmap_en................................5.4.4lcd_rb_swap................................管腳參數(shù)........................................5.5.1lcd_power..................................5.5.2lcd_pin_power...............................5.5.3 .................................5.5.4lcddx.....................................5.5.5pinctrl-0pinctrl-1............................ESD..............................6........................................................................pwm信息................................................................................................................colorbar................................7.......................................黑屏-無背光......................................黑屏-有背光......................................TOC\o"1-2"\h\z\u閃 條形波 背光太亮或者太 重啟斷電測試屏異 RGB接口或者I8080接口顯示抖動有花 LCD屏出現(xiàn)極化和殘 8總 DE2.0menuconfig配置 LCD開關屏流 power power RGB管 lvds lcd_frm打 lcd_frm關 ESD內(nèi)核配 ESD屏驅(qū)動添加函 ESD屏驅(qū)動函數(shù)實 ESDMIPI狀態(tài)寄存 ESD復位函數(shù) ESD設置信息函 Lp模式時鐘分頻 1本文檔將介紹sunxi平臺DisplayEngine模塊中LCDLCDLCDlcd0LCDAllwinner軟件平臺:Linux-5.4內(nèi)核。Allwinner硬件平臺:D122-1:LCD術 解釋說 AllwinnerSoC

LiquidCrystalDisplay,液晶顯示器MobileIndustryProcessorInterfaceDisplaySerialInterface,顯示串行接口Intel8080LCD接口 LCDRGB Low-VoltageDifferentialSignalingLCD3ICLCD支持雙顯,異顯。也就是顯示內(nèi)容可以不一樣,顯示分辨率可以不一樣,屏接口也可以不一樣。支持MIPI-DSI接口,數(shù)量一個。最大支持1920x1200@60分辨率,滿足寬高不要超過2048,像素時鐘不超過180MHzRGB接口,數(shù)量2個。其中主顯支持并行RGB666,副顯并行支持RGB888,并RGB接口最大支持1920x1200@60分辨率,滿足寬高不要超過2048,像素時鐘不180MHz都支持?;蛘邇蓚€串行RGB接口,串行RGB的最高分辨率最大不超過支持兩個dual-linkLVDS接口,最大支持1920x1200@60分辨率,滿足寬高不要超過2048180MHz4single-linkLVDS接口,分辨率最1366*768@60。I8080800*480@60LVDSsinglelinkLVDSLVDS接口的屏上,將完全一樣的數(shù)據(jù)發(fā)送到這兩個屏上,做到信號一樣。所以理論上,T509能做到422個分辨率可以不一樣,2LCD說明在多顯的場景下,以上接口可以自由搭配,除了MIPI-DSI技巧duallinkLVDS20singlelinkLVDSlvds0lvds1singlelinklvds0。4D1需要修改下列四處地方,具體可參考屏驅(qū)動源碼位置linuxuboot源碼倉庫。在uboot中也有顯示和屏驅(qū)動,目的是顯示logokernel專用板級dts配置倉庫。目的是通過board.dts來配置一些通用的LCDubootdts確保全志顯示框架的內(nèi)核配置有使能,查看menuconfig配置說明DriverICIC的詳細信息。這里主要是對各個命令進行詳解,對我們進行屏時序參數(shù)說明屏初始化代碼。請向屏廠索要。一般情況下DSI和I8080屏等都需要初始化命令對屏進行初通過第3步的資料,定位該屏的類型,后選擇一個已有同樣類型的屏驅(qū)動作為模板進行屏驅(qū)修改屏驅(qū)動目錄下的panel.c和panel.h。在全局結構體變量panel_array中新增剛才添加lcd_panel的變量指針。panel.h中新增strcutlcd_panel修改Makefile。在lcd屏驅(qū)動目錄的上一級的Makefile文件中的disp-objs中新增剛才添加里面有介紹各種接口典型配置。硬件參數(shù)說明,這一章有所有l(wèi)cd0節(jié)點下可配置屬性詳細解編譯uboot,kernel,打包燒寫。注意不同SDK,編譯方式有所不同,部分SDK默認不編uboot。調(diào)試。通過調(diào)試方法我們可以初步定位問題,還有FAQlinux內(nèi)核-linux-uboot-brandy/brandy-2.0/u-boot-ubootdevice/config/chips/d1/configs/nezha/uboot-kerneldevice/config/chips/d1/configs/nezha/linux-menuconfigLCD相關代碼包含在disp驅(qū)動模塊中,進入內(nèi)核根目錄,執(zhí)行makekernel_menuconfig進DeviceDrivers->Graphicssupport->FramebufferDevices>VideoDeviceDrivers->Graphicssupport->FramebufferDevices>VideoSupportforsunxi->DISPDriverSupport(sunxi-disp2)4-1:DE2.0menuconfig在屏驅(qū)動源碼位置lcd_source.c和lcd_source.hgpio,dsich在屏驅(qū)動源碼位置的上一級,有用戶需要修改的Makefile我們可以打開drivers/video/fbdev/sunxi/disp2/disp/lcd/default_panel.c作為屏驅(qū)動的例子,在該文structstructlcd_paneldefault_panel=/*paneldrivername,mustmachthelcd_drv_=.func=.cfg_panel_info=.cfg_open_flow=.cfg_close_flow.cfg_close_flow=該全局變量default_panel的成員name與lcd_driver_nam必須一致,這個關系到驅(qū)動能否找到指定的文件。接下來是func成員的初始化,這里最主要實現(xiàn)三個回調(diào)函數(shù)。LCD_cfg_panel_info,LCD_open_flow開關屏流程即屏上下電流程,屏手冊或者driverIC手冊中里面的PoweronSequencePoweroffSequence其中,LCD_open_flow和LCD_close_flow稱為開關屏流程函數(shù),方框中的函數(shù),如LCD_power_on不需要進行初始化操作的LCDlvds屏,RGB屏等,LCD_panel_init及4-2:LCD功能:LCD_open_flow函數(shù)只會系統(tǒng)初始化的時候調(diào)用一次,執(zhí)行每個staticstatics32LCD_open_flow(u32staticstatics32LCD_open_flow(u32LCD_OPEN_FUNC(sel,LCD_power_on,10);LCD_OPEN_FUNC(sel,LCD_panel_init,50);LCD_OPEN_FUNC(sel,sunxi_lcd_tcon_enable,LCD_OPEN_FUNC(sel,LCD_bl_open,return如上,調(diào)用四次LCD_OPEN_FUNC注冊了四個回調(diào)函數(shù),對應了四個開屏流程,先注冊先執(zhí)LCD_power_onLCD10msLCD相關電源LCD_panel_init即初始化屏,再延遲50ms;不需要初始化的屏,可省掉此步驟,這個函數(shù)一般用于發(fā)送初始化命令給屏進行屏初始化。如果是DSI屏看DSI相關函數(shù)說明,如果是I8080屏用I8080接口函數(shù)說明i2cspi可以看iic/spi串行接口初始化GPIO來進行模擬。sunxi_lcd_tcon_enableTCONs;這一步是固定的,表示開始發(fā)送圖像信號。LCD_bl_open打開背光,再延遲0ms。前面三步搞定之后才開背光,這樣不會看到閃爍。這如下圖,這是屏手冊中典型的上電時序圖,我們編寫屏驅(qū)動的時候,也要注意,該延時就得延4-3:powervoidvoidLCD_OPEN_FUNC(u32sel,LCD_FUNCfunc,u32func是一個函數(shù)指針,其類型是:void(*LCD_FUNCu32sel),用戶自己定義的函數(shù)必須voidvoiduser_defined_func(u32//dodelayLCD_OPEN_FUNC的第二個參數(shù)是前后兩個步驟的延時長度,單位ms,注意這里的數(shù)值請按與LCD_open_flow對應的是LCD_close_flow是,用于注冊關屏函數(shù),使用staticstatics32LCD_close_flow(u32/*closelcdbacklight,anddelay0ms*/LCD_CLOSE_FUNC(sel,LCD_bl_close,0);/*closelcdcontroller,anddelay0ms*/LCD_CLOSE_FUNC(sel,sunxi_lcd_tcon_disable,50);/*openlcdpower,thandelay200ms*/LCD_CLOSE_FUNC(sel,LCD_panel_exit,100);/*closelcdpower,anddelay500ms*/LCD_CLOSE_FUNC(sel,LCD_power_off,return關閉TCON,也就是停止發(fā)送數(shù)據(jù),這是必要的。再延遲50ms執(zhí)行關屏代碼,再延遲200ms(不需要初始化的屏,可省掉此步驟)0ms。4-4:powerstaticvoidLCD_cfg_panel_info(panel_extend_para_t*staticvoidLCD_cfg_panel_info(panel_extend_para_t*TCON的擴展參數(shù)只能在屏文件中配置,參數(shù)的定義見顯示效果相關參數(shù)gammaboard.dtsenablelcd_cmap_en,并且填充3個系數(shù)表,lcd_gamma_tbl,lcd_cmap_tblgamma,模板提供了18段拐點值,后再插值出所有的值(255個)。如果覺得還不細,可以往相應表格里添加子項。cmap_tbl的大小是固定了,不能減小或增加表的大小。最終生成的gamma表項是由rgb三個gamma值組成的,各占8bit,目前提供的模板中,三個gamma值是相同的。staticvoidLCD_cfg_panel_info(structpanel_extend_parau32i=0,j=u32u8lcd_gamma_tbl[][2]=/*{inputvalue,correctedvalue}{0,{15,{30,{45,{60,{75,{90,{105,{120,{135,{150,{165,{180,{195,{210,{225,{240,{255,u32lcd_cmap_tbl[2][3][4]={LCD_CMAP_G0,LCD_CMAP_B1,LCD_CMAP_G2,{LCD_CMAP_B0,LCD_CMAP_R1,LCD_CMAP_B2,{LCD_CMAP_R0,LCD_CMAP_G1,LCD_CMAP_R2,{LCD_CMAP_B3,LCD_CMAP_G2,LCD_CMAP_B1,{LCD_CMAP_R3,LCD_CMAP_B2,LCD_CMAP_R1,{LCD_CMAP_G3,LCD_CMAP_R2,LCD_CMAP_G1,items=sizeof(lcd_gamma_tbl)/2;for(i=0;i<items-1;i++){u32num=lcd_gamma_tbl[i+1][0]-for(j=0;j<num;j++){u32value=0;valuelcd_gamma_tbl[i][1]+((lcd_gamma_tbl[i+1][1]-lcd_gamma_tbl[i][1])*j)/info->lcd_gamma_tbl[lcd_gamma_tbl[i][0]+j]=(value<<16)+(value<<8)+value;info->lcd_gamma_tbl[255]=(lcd_gamma_tbl[items-1][1]<<16)+(lcd_gamma_tbl[items-1][1]<<8)+lcd_gamma_tbl[items-1][1];memcpy(info->lcd_cmap_tbl,lcd_cmap_tbl,sizeof(lcd_cmap_tbl));函數(shù):sunxi_lcd_delay_ms/原型:s32sunxi_lcd_delay_ms(u32ms)/s32sunxi_lcd_delay_us(u32函數(shù):sunxi_lcd_tcon_enable/LCDLCDLCD控制器,停止刷新數(shù)據(jù)。原型:voidsunxi_lcd_tcon_enable(u32screen_id)voidsunxi_lcd_tcon_disable(u32函數(shù):sunxi_lcd_backlight_enable/功能:打開/關閉背光,操作的是board.dts中l(wèi)cd_bl配置的gpio。見lcd_bl_en。原型:voidsunxi_lcd_backlight_enable(u32screen_id)函數(shù):sunxi_lcd_pwm_enable/功能:打開/關閉pwm控制器,打開時pwm將往外輸出pwm波形。對應的是所對應的那一路pwm原型:s32sunxi_lcd_pwm_enable(u32screen_id)s32sunxi_lcd_pwm_disable(u32screen_id)函數(shù):sunxi_lcd_power_enable/功能:打開/關閉Lcd電源,操作的是board.dts中的(pwr_id標識電源索引)原型:voidsunxi_lcd_power_enable(u32screen_id,u32pwr_id)voidsunxi_lcd_power_disable(u32screen_id,u32pwr_id)pwr_id=0:對應于board.dts中的lcd_powerpwr_id1board.dtslcd_power1pwr_id=2:對應于board.dts中的lcd_power2pwr_id=3:對應于board.dts中的lcd_power3lcdio。原型:s32sunxi_lcd_pin_cfg(u32screen_id,u32d的data/clkpinsc。dsipin,dsispin,但同樣會在此函數(shù)接pinBon:1:為開,0disableDSIMIPIDSI屏,大部分需要初始化,使用的是DSI-D0通道的LP模式進行初始化。提供的接口函數(shù):sunxi_lcd_dsi_clk_enable/功能:僅限dsi接口屏使用,使能/關閉dsi輸出的高速時鐘clk信號,必須在初始化的時候調(diào)原型:s32sunxi_lcd_dsi_clk_enable(u32scree_id)s32sunxi_lcd_dsi_clk_disable(u32scree_id)s寫操作。原型:s32sunxi_lcd_dsi_dcs_wr(u32sel,u8cmd,u8*para_p,u32cmd:dcspara_p:dcspara_num:dcs寫命令的參數(shù)個數(shù),單位為bytedcs原型:s32sunxi_lcd_dsi_dcs_wr_2para(u32sel,u8cmd,u8para1,u8cmd:dcspara1:dcspara2:dcs函數(shù):功能:dsi讀操作。原型:s32sunxi_lcd_dsi_dcs_read(u32sel,u8cmd,u8result,u32sel,idcmd,resultnum_pI80805個接口函數(shù)可供使用。如下:CPU原型:voidsunxi_lcd_cpu_write(u32sel,u32index,u32VoidVoidsunxi_lcd_cpu_write(u32sel,u32index,u32sunxi_lcd_cpu_write_index(sel,index);sunxi_lcd_cpu_wirte_data(sel,data);8080sunxi_lcd_cpu_write_index實現(xiàn)第一個寫操作,這時PIN腳RS(A1)為低電平,總線數(shù)據(jù)index的值。Sunxi_lcd_cpu_wirte_data實現(xiàn)第二個寫操作,這時PIN腳RS(A1)為高電平,總線數(shù)據(jù)上data的值。函數(shù):CU屏為指定寄存器。原型:voidvoidsunxi_lcd_cpu_write_index(u32sel,u32sunxi_lcd_cpu_write。CPU屏寄存器的值為指定的值。voidvoidSunxi_lcd_cpu_write_data(u32sel,u32函數(shù):s32s32tcon0_cpu_rd_24b_data(u32sel,u32index,u32*data,u32selidindex:datasize功能:LCD_GPIOPINio_index=0board.dtslcd_gpio_0io_index=1:對應于board.dts中的lcd_gpio_1io_index=2board.dtslcd_gpio_2io_index=3board.dtslcd_gpio_3value=0IOValue=1IOGPIOLCD_GPIOPIN腳為輸入或輸出模式。s32s32sunxi_lcd_gpio_set_direction(u32screen_id,u32io_index,u32io_index=0board.dtslcd_gpio_0io_index=1:對應于board.dts中的lcd_gpio_1io_index=2board.dtslcd_gpio_2io_index=3board.dtslcd_gpio_3direction=0IOdirection=1:對應IO一部分屏需要進行初始化操作,在開屏步驟函數(shù)中,對應于LCD_panel_init函數(shù),提供了幾種DSIDSI-D0CPU8080總線的方式,使用的是LCDIO(PD,PH)進行初始化。這種初始化方式,其總線的引腳位置定義與CPU以下這些接口在屏驅(qū)動分解中提到路徑的lcd_source.c和lcd_source.hiic/spiiic/spispiICspi_initspi硬件進行初始化,spi_initmas-ter;根據(jù)實際的硬件連接,選擇spi(代碼中選擇了spi1),如果這一步返回錯誤說spi沒有配置好,找spi驅(qū)動負責人。第二步設置spidevice,這里包括最大速度,spi傳輸模式,以及每spi_setupmasterdevice的關聯(lián)。comm_out是一個spi傳輸?shù)睦樱诵木褪莝pi_sync_transferstaticstaticintintret=-structspi_mastermaster=spi_busnum_to_master(1);if(!master){lcd_fb_wrn("failtogetmaster\n");gotoOUTspi_device=spi_alloc_device(master);if(!spi_device){lcd_fb_wrn("failtogetspidevice\n");gotoOUT;spi_device->bits_per_word=spi_device->max_speed_hz=60000000;/*50MHz*/spi_device->mode=SPI_MODE_0;ret=spi_setup(spi_device);if(ret){lcd_fb_wrn("Failetosetupspi\n");gotoFREE;lcd_fb_inf("Initspi1:bits_per_word:%dmax_speed_hz:%dmode:%d\n",spi_device->bits_per_word,spi_device->max_speed_hz,ret=0;gotoOUT;spi_device=NULL;returnstaticstaticintcomm_out(unsignedintsel,unsignedcharstructspi_transfert;if(!spi_device)return-DC(sel,memset(&t,0,sizeof(structspi_transfer)); =&cmd; =t.bits_per_word=t.speed_hz=returnspi_sync_transfer(spi_device,&t,i2cLCD&ICi2ci2c_add_driver,而你要做的是初始化好其參數(shù)structi2c_driver。it66121_idi2c總線索引(i2c0,i2c1…)it66121_i2c_probe能進到這個函數(shù),你就可以開始使用i2c了。代碼段里面僅僅將后面需要的參數(shù)cilent賦值給一個全局指針變量。it66121_match,這是dts的matchtable,由于你是給disp2加驅(qū)動,所以這里的matchtabledisp2matchtabletablei2c,注意不要填錯。tv_i2c_detect函數(shù),這里是非常關鍵的,這個函數(shù)早于probe函數(shù)被調(diào)用,只有成功被調(diào)用后才能開始使用i2c,其中strlcpy的調(diào)用意味著成功。normal_i2cLCDICi2c索引。以probe函數(shù)是否被調(diào)用來決定你是否可以開始使用I2C。i2c_smbus_write_byte_datai2c_smbus_read_byte_data來讀寫可以滿足大部分場#define#defineIT66121_SLAVE_ADDR0x4c#defineIT66121_I2C_ID0staticconststructi2c_device_idit66121_id[]={"IT66121",IT66121_I2C_ID{/*ENDOFLIST*/staticintit66121_i2c_probe(structi2c_client*client,conststructi2c_device_idthis_client=client;return0;staticconststructof_device_idit66121_match[]={.compatible="allwinner,sun8iw10p1-{.compatible="allwinner,sun50i-{.compatible="allwinner,sunxi-staticinttv_i2c_detect(structi2c_client*client,structi2c_board_infoconstchar*type_name=if(IT66121_I2C_ID==client->adapter->nr){strlcpy(info->type,type_name,20);}pr_warn("%s:%dwrongi2cid:%d,expectidis:%d\n",func,LINE,client->adapter->nr,IT66121_I2C_ID);returnstaticunsignedshortnormal_i2c[]={IT66121_SLAVE_ADDR,I2C_CLIENT_END};staticstructi2c_driverit66121_i2c_driver={.class=.id_table=.probe=.remove=.driver=.owner=.name=.of_match_table= = =staticvoidLCD_panel_init(u32intret=-ret=i2c_add_driver(&it66121_i2c_driver);if(ret){pr_warn("Addit66121_i2c_driverfail!\n");//startinitchipwithvoidit6612_twi_write_byte(it6612_reg_set*u8rdata=0;u8tmp=0;rdata=i2c_smbus_read_byte_data(this_client,reg->offset);tmp=(rdata&(~reg->mask))|(reg->mask®->value);i2c_smbus_write_byte_data(this_client,reg->offset,tmp);U-bootU-boot編寫屏驅(qū)動的步驟和內(nèi)核是一樣的,代碼路徑文件組織方式都是一樣的,這里要講的是需為了加快U-boot的顯示速度,開屏的幾個函數(shù)之間采取異步調(diào)用的方式,原理是利用timer中斷,定時調(diào)用開屏函數(shù),所以這種情況下bootGUI框架加載完畢并不意味著開屏完成,而是當你見到LCDopenfinish的打印的時候。建議:為了盡量利用異步調(diào)用的優(yōu)點,請把需要的延時盡量在注冊回調(diào)的時候指定,比如下面延stimers時間,uboot就可以做其它事情,以達到異步調(diào)用的目的。LCD_OPEN_FUNC(sel,LCD_OPEN_FUNC(sel,sunxi_lcd_power_enable函數(shù)和sunxi_lcd_pin_cfg不能在LCD_power_on之外調(diào)用,否則uboot嚴格講,只能在用LCD_OPEN_FUNCRGB下面介紹全志平臺的RGB以及配置示例,至于lcd0下面每個屬性的詳解細節(jié)請看硬件參數(shù)說RGB接口在全志平臺又稱HV接口(Horizontal同步和Vertical同步)對于RGB屏的初始化有些LCD屏支持高級的功能比如gamma,像素格式的設置等,但是RGB協(xié)議本身不支持圖RGBLCDRGB接口SoCSPII2CRGB4-5:RGB上面這些腳具體到SoC哪根管腳以及第幾個功能(管腳復用功能)請參考pinmux表格,管腳復用功能的名字一般以“LCDX_”開頭,其中X是數(shù)字。24根。RGB又細分幾種接口,通過設置lcd_hv_if4-1:RGB24116.7Mcolors,181262Kcolors,16165Kcolors,63262Kcolors,6365Kcolors,說明當時鐘周期為1時,我們稱這種RGB接口為并行接口,其它的情況則是串行接口,更為普遍的原則就是只要需要多個時鐘周如何判斷是否支持24bit的位寬,最簡單的方式就是在pinmux表格中數(shù)一數(shù)數(shù)據(jù)腳的數(shù)量,如果有24根則支持24bit,如果只有18根則支持18bit。對于并行RGB的接口,當位寬小于24時,硬件連接應該選擇連接每個分量中的高位而放棄低RGB接口,硬件連接可參考RGBI8080管腳配置示意圖syncRGBRGBDEDE(DataRGB當我們配置并行RGB接口時,在配置里面并不需要區(qū)分是24位,18位和16位,最大位寬是哪種是參考pinmux表格,如果LCD屏本身支持的位寬比SoC支持的位寬少,當只能選擇因為不需要初始化,RGB接口極少出現(xiàn)問題,重點關注lcdtiming的合理性,也就下面是典型并行RGB接口board.dts第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏default_lcdRGB屏RGBSoCLCD模塊發(fā)送時序,請查看屏時序參數(shù)說明第四部分決定了背光(pwm和lcd_bl_en)。請看背光相關參數(shù)24RGB,那么一般情況下需要設置lcd_frm&lcd0=<&pioPD27103lcd_bright_curve_en&lcd0=<&pioPD27103lcd_bright_curve_en=/*part5=/*part1*//*part2*//*part3*//*part4*/ = = = =lcd_hv_sync_polarity=/*part6*/="vcc-="vcc-pinctrl-0=pinctrl-1=RGBRGBRGB來說,而并不是說它只用一根線來發(fā)數(shù)據(jù),只要通過多個時鐘周期才能把一個像素的數(shù)據(jù)發(fā)完,那么這樣的RGB接口就是串行RGB。RGBRGB接口,需要做的就下面是典型串行RGB接口board.dts配置示例,它只有8根數(shù)據(jù)腳,其中用空行把配置分成第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏RGBSoCLCD模塊發(fā)送時序,請查看屏時序參數(shù)說明技巧這里需要注意的是,對于該接口,SoC總共需要三個周期才能發(fā)完一個pixel,所以我們配置時序的時候,需要滿足lcd_dclk_freq*3=lcd_ht*lcd_vt*60lcd_dclk_freq=lcd_ht*3*lcd_vt*60要么3倍lcd_ht要么3pwmlcd_bl_en。請看說明下面實例的lcddriverIC是stv7789v,是需要初始化,初始化的接口協(xié)議是SPI,所以這多了幾根spi管腳配置,驅(qū)動里面用gpio模擬spi協(xié)議,所以這里都是配置gpio功能。&lcd0&lcd0/*part1*/==/*part2 = =/*part3 = = = = = =;10+20+10+240*3=760realset = = = = =/*part4 = = = = = = =<&pioPB1103lcd_bright_curve_en=/*part5 = =lcd_hv_sync_polarity= =<0>; =<0x0000>; = = =/*part6 ="vcc-lcd"; ="vcc-pd";/*reset =<&pioPD9103/*cs =<&pioPD10103/*sda =<&pioPD13103/*sck =<&pioPD121030>;pinctrl-0=<&rgb8_pins_a>;pinctrl-1=MIPI-DSIMIPI-DSI,即MobileIndustryProcessorInterfaceDisplaySerialInterface,移動通信CommandmodeMPUICGRAMVideomode。類似RGB接口,沒有GRAM,需要不停往panelvideo又分為三個子modeNon-burstmodewithsyncNonBurstmodewithsyncBurstmodelaneMIPI-DSIMIPI-DSI的管腳是在大部分IC中是專用,在board.dtsi里面不需要配置,只要硬件上連接好但是有一部分IC的DSI管腳不是專用的,與其它功能的腳復用,這個時候就需要配置好-0和pinctrl-1mipi-dsi的管腳是差分的,分為兩種管腳,一種是時鐘管腳,另外一種是數(shù)據(jù)管腳,數(shù)據(jù)管腳的lanelaneLCD屏說明書里面的說的lane的數(shù)量是指數(shù)據(jù)管腳的數(shù)量不包括時鐘管腳。比如說某4laneMIPI-DSI屏就總共MIPI-DSI一般都有一路電源供給MIPI-DSI這個模塊,你可以理解為管腳電,也可以理解成模塊電,不同IC這路電的電壓要求可能不同,一旦確定IC型號之后,這路電的電壓就不變,如果擅自改變此4-6:MIPI-DSI分辨率限制。有l(wèi)anelane_speed不超過上面IC規(guī)格規(guī)定的速度,那么理論上是支持的,請查看IC規(guī)格lane_speed=lcd_vt*lcd_ht*fps*bit_per_pixel/lane_num/單位:Gbpsfps:期望刷新率,通過屏手冊可知道,一般是60。請看lcd_dclk_freqbit_per_pixel:每個像素包含的比特數(shù)量,一般是24或者18,通過lcd_dsi_formatlane_num:lane數(shù)量,通過lcd_dsi_lane1e9:1000000000選擇分辨率的同時需要考慮系統(tǒng)帶寬,DE能力,所以即使接口方面支持這個分辨率,對于整個系統(tǒng)來說不一定支持,比如說硬件為了節(jié)省成本選擇了一款速度很慢的DDR內(nèi)存后同時lane數(shù)量限制。絕大部分全志科技IC最大支持4lane的MIPI-DSI,如果你看到該款屏超4laneIC8laneIC。MIPI-DSI標準不兼容。請查看IC規(guī)格MIPI-DSIlaneMIPI-DSIlaneCLKFreq_dsi_clkFreq_dsi_clk=(Dclk*colordepth*3/lane)/Freq_dsi_clk:我們要測量的dsi時鐘腳的頻率。單位MHzDclk:像素時鐘。由lcd_ht*lcd_vt*fps/1e6Colordepth:顏色深度,一般是8或者63RGB3Lane:dsilane2dsiMIPI-DSIVideomodeMIPI-DSIvideomodeMIPI-DSIvideomodeboard.dts配置示例,其中用空行把配置分成幾個部第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏dsidsivideomodeSoCLCD模塊發(fā)送時序,請查看屏時序參數(shù)說明第五部分,dsi&lcd0&lcd0/*part1*/==/*part2*/==/*part3*/===========/*part4 = = = = = =lcd_bl_en=<&pioPB8103lcd_bright_curve_en=/*part5*/===/*part6*/===/*part7*/lcd_pin_power="dcdc1";lcd_pin_power1="eldo3";lcd_power="dc1sw";lcd_gpio_0=<&pioPD221031>;pinctrl-0=<&dsi4lane_pins_a>;pinctrl-1=MIPI-DSI根據(jù)分辨率的高低通常分為幾種模式來配置。1080plcd_dsi_if來控制就行。Commandmodevideomodeburstmode則是用于高2k,則需要額外的設置。2k8lanelane發(fā)送一說明注意只有部分IC支持超高分辨率,具體查看芯片規(guī)格中的MIPI-DSI下面是MIPI-DSI高分辨超高分辨率(大于2k)board.dts配置示例,其中用空行把配置分第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏dsidsivideomodeSoCLCD模塊發(fā)送時序,請查看屏時序參數(shù)說明第五部分,dsi說明lcd_dsi_lane依舊設置成4條lane的原因,是因為這個是設置一個dsi的lane數(shù)量,這個屏要用兩個dsi。加起來就是8條lane。lcd_tcon_mode,lcd_dsi_port_numlcd_tcon_en_odd_even_div三個選項需要特別設置,點擊查看具體含義,如果是1080p及其以下分辨率的屏(只用e或者以下的),那么這三個配置默認0即可。&lcd0lcd_tcon_en_odd_even_div&lcd0lcd_tcon_en_odd_even_div=/*part6/*part1*//*part2*//*part3*//*part4*/<&pioPH10103/*part5*/=====lcd_bright_curve_en= =/*part7 ="vcc18- ="vcc33-lcd"; ="vcc-pd"; =<&pioPH11103 =<&pioPH12103MIPI-DSICommandmodetevsyncDSI屏不同的是,這里需要lcd_vsynctelcd_vsynclcd_dsi_te1。tete腳,則必須連上,否則在顯示動態(tài)畫面的時候會畫面這里只列舉出與MIPI-DSIvideomode第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏第二部分,決定該配置是dsi接口,而且lcd_dsi_if設置成1表明commandmodeSoCLCD模塊發(fā)送時序,請查看屏時序參數(shù)說明第五部分,dsi接口的詳細設置。lcd_dsi_te1te第七部分,管腳和電源設置。lcd_vsync,這里是te腳,硬件上需要將這根腳連接到屏的&lcd0vsync功能。請看&lcd0/*part1*/==/*part2*/==/*part3*/===========/*part4 = = = = = =lcd_bright_curve_en= =<&pioPB3103/*part5*/=======/*part7*/===<&pioPB2103=<&pioPD21203MIPI-DSIVR實際場景是兩個物理屏,每個屏是1080p,每個屏都是4條lane,要求的是兩個屏各自顯示一DEDE+tcon+兩個DSItcondsi,但是兩路顯示必須要同步,這就需要用到兩個tcon的同步模式。LCD0slavetconmastertcon來驅(qū)動(設置lcd_tcon_mode)LCD1標記為mastertcon把管腳,電源等都放到LCD1開,LCD0先開,對應模塊寄存器都初始化,但是電源不開,LCD1,LCD1LCD0一起發(fā)數(shù)據(jù)。這樣做到同時亮滅。說明注意:僅有極少IC&lcd0= = = =;lcd_bl_100_percent= = = = = = = = = = = = = = = = = = = = = = = = = =<0x0000>; =<0>;lcd_hv_sync_polarity= =lcd_bright_curve_en= = = =lcd_slave_stop_pos=lcd_sync_pixel_num= =&lcd1 = = = =;lcd_bl_100_percent= = = = = = = = = = = = = = = = = = = = = = = = = =<0x0000>; =<0>;lcd_hv_sync_polarity= =lcd_bright_curve_en= = = =lcd_tcon_slave_num=lcd_slave_stop_pos=lcd_sync_pixel_num= = =<&pioPH10103 ="vcc- ="vcc18- ="vcc33- =<&pioPH8103 =<&pioPH11103 =<&pioPH12103

="vcc-I8080Intel8080(MCU接口)很老的協(xié)議,一般用在分辨率很小的屏上。CSRSindexstatus寄存器,高表示選擇控制寄存器。實際場SoCLCD_DE腳(數(shù)據(jù)使能腳)。/WR(低表示寫數(shù)據(jù))SoCLCD_CLK/RD(低表示讀數(shù)據(jù))SoCLCD_HSYNCRESETLCD(010來復位)DataI8080根據(jù)的數(shù)據(jù)位寬接口有8/9/16/18,連哪些腳參考,即使位寬一樣,連的管腳也不一樣,rgb格式。RGB565,總共有65KRGB666,總共有262K9bit262K從屏手冊得知:數(shù)據(jù)位寬,顏色數(shù)量之和,參考RGBI8080管腳配置示意圖I8080下面是典型是一個RGB565的,位寬為8位的I8080接口的屏的board.dts第一部分,決定該配置是否使用,以及使用哪個屏驅(qū)動,lcd_driver_name決定了用哪個屏第二部分,決定該配置是I8080接口,而且是8bit/2cycle格式RGB565技巧為什么叫做8bit/2cycleRGB565呢,首先它的格式是RGB565,也就是一個像素是16bit,然后它是8bit的位寬,就需要兩2cycle。第三部分,決定了SoC中的LCD模塊發(fā)送時序,請查看屏時序參數(shù)說明。這里比較特殊的*2*lcd_vt*60,也就是要么雙倍lcd_ht要么雙倍lcd_dclk_freq第五部分,cpu接口的詳細設置。這里使能了lcd_cpu_te和lcd_cpu_mode,意思是使用第六部分,顯示效果相關的設置。這里使能了m也是比較關鍵的設置,詳細意思點擊查看。&pioI8080_8bit_pins_a:I8080_8bit@0allwinner,pins="PD1","PD2","PD3","PD4","PD5","PD6",&pioI8080_8bit_pins_a:I8080_8bit@0allwinner,pins="PD1","PD2","PD3","PD4","PD5","PD6","PD7","PD8","PD18","PD19","PD20","PD21";allwinner,pname="PD1","PD2","PD3","PD4","PD5","PD6","PD7","PD8","PD18","PD19","PD20","PD21";

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論