Cubieboard A20 + จอ LCD 7″ MI0700LT

บทความนี้จะอธิบายวิธีการใช้งาน LCD 7″ กับ Cubieboard A20 ครับ
ตัว Cubieboard A20 จะมีขา connector ออกมาสำหรับเชื่อมต่อกับจอ LCD โดยขาสัญญาณที่ใช้เชื่อมต่อจะอยู่ที่ Connector U14 ขาที่ 1-38 รายละเอียดขาสัญญาณและการเชื่อมต่อขาสัญญาณกับจอ LCD MI0700LT สามารถดูได้จากรูปด้านล่างครับ

cubieboard-a20-pinout

cubieboard-a20-mi0700lt
สำหรับไฟล์ kernel ที่ติดมากับบอร์ดนั้น จะยังไม่ได้เปิดใช้งาน LCD interface กับ Cubieboard ดังนั้นเราต้องมาแก้ไขไฟล์ script.bin เอง เพื่อเปิดใช้งาน LCD interface ครับ
ขั้นตอนการเปิดใช้งาน LCD ในไฟล์ script.bin ให้คัดลอกไฟล์ script.bin มาแปลงเป็นไฟล์ script.fex ก่อน (วิธีการแปลง script.bin to script.fex หาอ่านในเว็บของ cubieboard เองนะครับ) หลังจากนั้นก็ใช้ text editor แก้ไขไฟล์ script.fex ดังต่อไปนี้

;——————————————————————————-
;disp init configuration
;
;disp_mode (0:screen0<screen0,fb0> 1:screen1<screen1,fb0> 2:two_diff_screen_diff_contents<screen0,screen1,fb0,fb1>
; 3:two_same_screen_diff_contets<screen0,screen1,fb0> 4:two_diff_screen_same_contents<screen0,screen1,fb0>)
;screenx_output_type (0:none; 1:lcd; 2:tv; 3:hdmi; 4:vga)
;screenx_output_mode (used for tv/hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50 5:720p60 6:1080i50 7:1080i60 8:1080p24 9:1080p50 10:1080p60 11:pal 14:ntsc)
;screenx_output_mode (used for vga output, 0:1680*1050 1:1440*900 2:1360*768 3:1280*1024 4:1024*768 5:800*600 6:640*480 10:1920*1080 11:1280*720)
;fbx format (4:RGB655 5:RGB565 6:RGB556 7:ARGB1555 8:RGBA5551 9:RGB888 10:ARGB8888 12:ARGB4444)
;fbx pixel sequence (0:ARGB 1:BGRA 2:ABGR 3:RGBA) — 0 for linux, 2 for android
;lcd0_bright (lcd0 init bright,the range:[0,256],default:197
;lcd1_bright (lcd1 init bright,the range:[0,256],default:197
;——————————————————————————-
[disp_init]
disp_init_enable = 1
disp_mode = 0

screen0_output_type = 1
screen0_output_mode = 5

screen1_output_type = 0
screen1_output_mode = 4

fb0_width = 800
fb0_height = 480
fb0_framebuffer_num = 2
fb0_format = 10
fb0_pixel_sequence = 0
fb0_scaler_mode_enable = 1

fb1_width = 800
fb1_height = 480
fb1_framebuffer_num = 2
fb1_format = 10
fb1_pixel_sequence = 0
fb1_scaler_mode_enable = 0

lcd0_backlight = 197
lcd1_backlight = 197

lcd0_bright = 50
lcd0_contrast = 50
lcd0_saturation = 57
lcd0_hue = 50

lcd1_bright = 50
lcd1_contrast = 50
lcd1_saturation = 57
lcd1_hue = 50

;——————————————————————————-
;lcd0 configuration

;lcd_dclk_freq: in MHZ unit
;lcd_pwm_freq: in HZ unit
;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds
;lcd_hbp: hsync back porch
;lcd_ht: hsync total cycle
;lcd_vbp: vsync back porch
;lcd_vt: vysnc total cycle *2
;lcd_hv_if: 0:hv parallel 1:hv serial
;lcd_hv_smode: 0:RGB888 1:CCIR656
;lcd_hv_s888_if serial RGB format
;lcd_hv_syuv_if: serial YUV format
;lcd_hspw: hsync plus width
;lcd_vspw: vysnc plus width
;lcd_lvds_ch: 0:single channel; 1:dual channel
;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode
;lcd_lvds_bitwidth: 0:24bit; 1:18bit
;lcd_lvds_io_cross: 0:normal; 1:pn cross
;lcd_cpu_if: 0:18bit; 1:16bit mode0; 2:16bit mode1; 3:16bit mode2; 4:16bit mode3; 5:9bit; 6:8bit 256K; 7:8bit 65K
;lcd_frm: 0:disable; 1:enable rgb666 dither; 2:enable rgb656 dither

;lcd_gpio_0: SCL
;lcd_gpio_1 SDA
;——————————————————————————-
[lcd0_para]
lcd_used = 1

lcd_x = 800
lcd_y = 480
lcd_dclk_freq = 36
lcd_pwm_not_used = 0
lcd_pwm_ch = 0
lcd_pwm_freq = 10000
lcd_pwm_pol = 1
lcd_max_bright = 240
lcd_min_bright = 64
lcd_if = 0
lcd_hbp = 45
lcd_ht = 1057
lcd_vbp = 22
lcd_vt = 1270
lcd_vspw = 1
lcd_hspw = 1
lcd_hv_if = 0
lcd_hv_smode = 0
lcd_hv_s888_if = 0
lcd_hv_syuv_if = 0
lcd_lvds_ch = 0
lcd_lvds_mode = 0
lcd_lvds_bitwidth = 0
lcd_lvds_io_cross = 0
lcd_cpu_if = 0
lcd_frm = 1
lcd_io_cfg0 = 0x00000000
lcd_gamma_correction_en = 0
lcd_gamma_tbl_0 = 0x00000000
lcd_gamma_tbl_1 = 0x00010101
lcd_gamma_tbl_255 = 0x00ffffff

lcd_bl_en_used = 0
lcd_bl_en = port:PH07<1><0><default><1>

lcd_power_used = 0
lcd_power = port:PH08<1><0><default><1>

lcd_pwm_used = 0
lcd_pwm = port:PB02<2><0><default><default>

lcdd0 = port:PD00<2><0><default><default>
lcdd1 = port:PD01<2><0><default><default>
lcdd2 = port:PD02<2><0><default><default>
lcdd3 = port:PD03<2><0><default><default>
lcdd4 = port:PD04<2><0><default><default>
lcdd5 = port:PD05<2><0><default><default>
lcdd6 = port:PD06<2><0><default><default>
lcdd7 = port:PD07<2><0><default><default>
lcdd8 = port:PD08<2><0><default><default>
lcdd9 = port:PD09<2><0><default><default>
lcdd10 = port:PD10<2><0><default><default>
lcdd11 = port:PD11<2><0><default><default>
lcdd12 = port:PD12<2><0><default><default>
lcdd13 = port:PD13<2><0><default><default>
lcdd14 = port:PD14<2><0><default><default>
lcdd15 = port:PD15<2><0><default><default>
lcdd16 = port:PD16<2><0><default><default>
lcdd17 = port:PD17<2><0><default><default>
lcdd18 = port:PD18<2><0><default><default>
lcdd19 = port:PD19<2><0><default><default>
lcdd20 = port:PD20<2><0><default><default>
lcdd21 = port:PD21<2><0><default><default>
lcdd22 = port:PD22<2><0><default><default>
lcdd23 = port:PD23<2><0><default><default>
lcdclk = port:PD24<2><0><default><default>
lcdde = port:PD25<2><0><default><default>
lcdhsync = port:PD26<2><0><default><default>
lcdvsync = port:PD27<2><0><default><default>

;——————————————————————————
;resistive touch panel parameter
;——————————————————————————
[rtp_para]
rtp_used = 1
rtp_screen_size = 7
rtp_regidity_level = 7
rtp_press_threshold_enable = 0
rtp_press_threshold = 0x1f40
rtp_sensitive_level = 0xf
rtp_exchange_x_y_flag = 0

หากต้องการเปิดใช้งาน Resistive touch panel ให้เพิ่มพารามิเตอร์ [rtp_para] ดังตัวอย่างด้านบน หลังจากแก้ไขไฟล์ script.fex แล้ว ให้แปลงเป็น script.bin หลังจากนั้นก็คัดลอกไฟล์ script.bin ไปไว้ที่ Cubieboard แทนไฟล์เดิม

cubieboard-a20-lcd7

การแก้ไขไฟล์ script.bin เพื่อเปิดใช้งาน จะรองรับแค่ linux นะครับ สำหรับ android จะทำไม่ได้ ต้อง compile kernel ใหม่ครับ