本帖最后由 54zw 于 2016-6-13 20:14 编辑
Fireprime外接RGB888投影仪(光机: opd01m)原理和外接LCD是一样的
1.先看下硬件框图,LCD控制器引出的信号如下: 需要将LCD_D0~LCD_D23这24根管脚配置成LCD数据信号脚 如下图所示:
再加上LCD到行列同步信号: LCD_DEN,LCD_CLK, LCD_VSYNC, LCD_HSYNC
下面是光机到接口,红绿蓝分别是LCD_D0~LCD_D23,外加4个控制信号:
2.在软件上要这些管脚配置成相应到功能脚,且是在LCD控制器的DeviceTree中描述 下面看下LCD控制器在DeviceTree中的描述: 先来看下DeviceTree里LCD控制器的描述: lcdc:lcdc@1010e000 { compatible= "rockchip,rk312x-lcdc"; rockchip,prop= <PRMRY>; reg= <0x1010e000 0x1000>; interrupts= <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names= "default"; pinctrl-0= <&lcdc0_lcdc>; clocks= <&clk_gates6 0>, <&dclk_lcdc0>, <&clk_gates61>, <&sclk_lcdc0>, <&pd_vop>, <&clk_cpll>; clock-names= "aclk_lcdc", "dclk_lcdc", "hclk_lcdc","sclk_lcdc", "pd_lcdc", "sclk_pll"; rockchip,iommu-enabled= <1>; status= "disabled"; };
看到 pinctrl-0= <&lcdc0_lcdc> 这里就是配置LCD控制器上管脚到地方
lcdc0_lcdc:lcdc0-lcdc{ rockchip,pins= <LCDC0_DCLK>, <LCDC0_DEN>, <LCDC0_HSYNC>, <LCDC0_VSYNC>; rockchip,pull= <VALUE_PULL_DISABLE>; }; 可以很明确到看到这里将上面提到到4个控制信号配置成了相应的功能管脚 但是没有看到配置LCD_D0~LCD_D23?
这里解释下:我没有找到RK3128关于所有PIN脚MUX的配置文档,这样的文档在其他平台上都是会有很详细到说明的,所以我对各PIN脚MUX的信息都是通过看代码知道的,在内核中rockchip-rk312x.h这个文件里用宏来描述,但是未发现有LCD_D0~LCD_D9到描述,所以猜测很可能这24根PIN脚初始的功能就是LCD信号,所以只要不MUX成其他功能就可以正常使用。
3.根据光机芯片手册得到光机需要到LCD时序,根据这个时序来配置LCD控制器让其输出符合的时序:
光机需要的时序如下图:
根据这个时序配置,可以写出下面到时序描述文件OPD01M.dtsi /{ disp_timings:display-timings { native-mode= <&timing0>; timing0:timing0 { screen-type= <SCREEN_RGB>; out-face = <OUT_P888>; clock-frequency= <30240000>; hactive= <854>; vactive= <480>; hback-porch= <40>; hfront-porch= <50>; vback-porch= <12>; vfront-porch= <30>; hsync-len= <16>; vsync-len= <3>; hsync-active= <1>;//active low vsync-active= <1>;//active low de-active= <0>;//active high pixelclk-active= <1>;//active low swap-rb= <0>; swap-rg= <0>; swap-gb= <0>; }; }; };
4.如何使用这个新添加到时序 在rk3128-fireprime.dts中include上面这个dtsi #include"OPD01M.dtsi"
引用disp_timings这个节点即可
注意: 1.由于LCD信号和以太网信号复用,所以需要去掉对以太网管脚的配置 2.另外代码中有些摄像头驱动也会复用到LCD信号,需要去掉,否则无法正常显示 |