fireflyAIO-3399JLCD使用简介

lcd使用
简介
aio-3399j开发板外置了两个lcd屏接口,一个是edp,一个是lvds,接口对应板子上的位置如下图:
config配置
以android7.1为例,由于使用的是mipi转lvds,aio-3399j默认的配置文件kernel/arch/arm64/configs/firefly_defconfig已经把lcd相关的配置设置好了,如果自己做了修改,请注意把以下配置加上:
config_lcd_mipi=y config_mipi_dsi=y config_rk32_mipi_dsi=y
dts配置
引脚配置
lvds屏
aio-3399j的sdk有lvds dsi的dts文件:kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-lvds.dts,从该文件中我们可以看到以下语句:
/ { model = aio board lvds (android); compatible = rockchip,android, rockchip,rk3399-firefly-lvds, rockchip,rk3399; test-power { status = okay; }; ... &dsi { status = okay; dsi_panel: panel { compatible =simple-panel-dsi; reg = ; //ddc-i2c-bu //power-supply = ; //pinctrl-0 = ; backlight = ; /* enable-gpios = ; reset-gpios = ; */ dsi,flags = ; dsi,format = ; //bus-format = ; dsi,lanes = ; dsi,channel = ; enable-delay-ms = ; prepare-delay-ms = ; unprepare-delay-ms = ; disable-delay-ms = ; size,width = ; size,height = ; status = okay; ... power_ctr: power_ctr { rockchip,debug = ; lcd_pwr_en: lcd-pwr-en { gpios = ; pinctrl-names = default; pinctrl-0 = ; rockchip,delay = ; }; lcd_rst: lcd-rst { gpios = ; pinctrl-names = default; pinctrl-0 = ; rockchip,delay = ; }; }; ... &pinctrl { lcd-panel { lcd_panel_reset: lcd-panel-reset { rockchip,pins = ; }; lcd_panel_pwr_en: lcd-panel-pwr-en { rockchip,pins = ; }; }; };
这里定义了lcd的电源控制引脚:
lcd_pwr_en:(gpio3_c0)gpio_active_high lcd_rst:(gpio2_d3)gpio_active_high
都是高电平有效,具体的引脚配置请参考《gpio》一节。
配置背光
aio-3399j开发板外置了一个背光接口用来控制屏幕背光,如下图所示:
在dts文件:kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-core.dtsi中配置了背光信息,如下:
/ { compatible = rockchip,rk3399-firefly-core, rockchip,rk3399; backlight: backlight { status = disabled; compatible = pwm-backlight; pwms = ; brightness-levels = ; default-brightness-level = ; };
pwms属性:配置pwm,范例里面默认使用pwm0,25000ns是周期(40 khz)。lvds需要加背光电源控制脚,在kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-lvds.dts中可以看到以下语句:
&backlight { status = okay; enable-gpios = ; brightness-levels = ; };
因此使用时需修改dts文件。
brightness-levels属性:配置背光亮度数组,最大值为255,配置暗区和亮区,并把亮区数组做255的比例调节。比如范例中暗区是255-221,亮区是220-0。 default-brightness-level属性:开机时默认背光亮度,范围为0-255。 具体请参考kernel中的说明文档:kernel/documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt
配置显示时序
lvds屏
与edp屏不同,lvds屏的 timing 写在dts文件中,在kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-lvds.dts中可以看到以下语句:
disp_timings: display-timings { native-mode = ; timing0: timing0 { clock-frequency = ; hactive = ; vactive = ; hsync-len = ; //20, 50 hback-porch = ; //50, 56 hfront-porch = ;//50, 30 vsync-len = ; vback-porch = ; vfront-porch = ; hsync-active = ; vsync-active = ; de-active = ; pixelclk-active = ; }; } }
时序属性参考下图:
init code
lvds屏
lvds屏上完电后需要发送初始化指令才能使之工作。
dts 可以在kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-lvds.dts中可以看到lvds的初始化指令列表:
&dsi { status = okay; ... panel-init-sequence = [ 29 00 06 3c 01 09 00 07 00 29 00 06 14 01 06 00 00 00 29 00 06 64 01 0b 00 00 00 29 00 06 68 01 0b 00 00 00 29 00 06 6c 01 0b 00 00 00 29 00 06 70 01 0b 00 00 00 29 00 06 34 01 1f 00 00 00 29 00 06 10 02 1f 00 00 00 29 00 06 04 01 01 00 00 00 29 00 06 04 02 01 00 00 00 29 00 06 50 04 20 01 f0 03 29 00 06 54 04 32 00 b4 00 29 00 06 58 04 80 07 48 00 29 00 06 5c 04 0a 00 19 00 29 00 06 60 04 38 04 0a 00 29 00 06 64 04 01 00 00 00 29 01 06 a0 04 06 80 44 00 29 00 06 a0 04 06 80 04 00 29 00 06 04 05 04 00 00 00 29 00 06 80 04 00 01 02 03 29 00 06 84 04 04 07 05 08 29 00 06 88 04 09 0a 0e 0f 29 00 06 8c 04 0b 0c 0d 10 29 00 06 90 04 16 17 11 12 29 00 06 94 04 13 14 15 1b 29 00 06 98 04 18 19 1a 06 29 02 06 9c 04 33 04 00 00 ]; panel-exit-sequence = [ 05 05 01 28 05 78 01 10 ]; ... };
命令格式以及说明可参考以下附件: rockchip drm panel porting guide.pdf
kernel 发送指令可以看到在kernel/drivers/gpu/drm/panel/panel-simple.c文件中的操作:
static int panel_simple_enable(struct drm_panel *panel) { struct panel_simple *p = to_panel_simple(panel); int err; if (p->enabled) return 0; dbg(enter\n); if (p->on_cmds) { err = panel_simple_dsi_send_cmds(p, p->on_cmds); if (err) dev_err(p->dev, failed to send on cmds\n); } if (p->desc && p->desc->delay.enable) { dbg(p->desc->delay.enable=%d\n, p->desc->delay.enable); msleep(p->desc->delay.enable); } if (p->backlight) { dbg(open backlight\n); p->backlight->props.power = fb_blank_unblank; backlight_update_status(p->backlight); } p->enabled = true; return 0; }
u-boot 发送指令可以看到在u-boot/drivers/video/rockchip-dw-mipi-dsi.c文件中的操作:
static int rockchip_dw_mipi_dsi_enable(struct display_state *state) { struct connector_state *conn_state = &state->conn_state; struct crtc_state *crtc_state = &state->crtc_state; const struct rockchip_connector *connector = conn_state->connector; const struct dw_mipi_dsi_plat_data *pdata = connector->data; struct dw_mipi_dsi *dsi = conn_state->private; u32 val; dbg(enter\n); dw_mipi_dsi_set_mode(dsi, dw_mipi_dsi_vid_mode); dsi_write(dsi, dsi_mode_cfg, enable_cmd_mode); dw_mipi_dsi_set_mode(dsi, dw_mipi_dsi_vid_mode); if (!pdata->has_vop_sel) return 0; if (pdata->grf_switch_reg) { if (crtc_state->crtc_id) val = pdata->dsi0_en_bit | (pdata->dsi0_en_bit
海信推低价OLED智能电视,成国内首个获得IMAX Enhanced认证的电视
好芝生物推出HelixPOC全自动微流控PCR一体机
广州今年计划全市建成5G基站2万座,重点热点区域实现全覆盖
igbt和可控硅的区别
基于半监督学习的多示例多标签改进算法
fireflyAIO-3399JLCD使用简介
如何使用Grove Starter Kit plus和LinkIt One进行设置和运行
生态环境部:部署蓝天保卫战改善全国空气质量
台积电梁孟松为何走_台积电的厉害之处
Linux CPU的性能应该如何优化
钳形表和万用表哪个好用
视频接口不同转换器的原理 不同视频接口之间的转换器起什么作用
卫星互联网存在的四大挑战
谷歌将投300万美元解决新冠错误信息
蓝牙5.0室内定位系统算法和硬件集成解决方案的介绍
三星Galaxy Tab S3来了!配备曲面屏和手写笔
2020电动牙刷什么牌子好?声波电动牙刷排行榜
为什么要全频段走向5G?
2024年汽车行业创新趋势:你准备好迎接未来了吗?
浅谈基于大数据的火电站智慧化消防探析