目录
前言
前面一篇HDMI IN章节,已讲述了RK628D的配置和编译问题,接下来再讲述后续调试遇到的问题;
一、HDMI IN显示APK
在Android11上使用系统相机打不开HDMI IN显示?还真的是无法使用系统相机打开...尴尬;其实HDMI IN也是模拟一个CSI的摄像头,通过HDMI输入的图像转化为MIPI信号,发送给主控的CSI控制器;
既然系统相机打不开,找到一份原厂的HDMI IN demo,把它打包进系统试下;
我这里是打包rkCamera2和HdmiInDemo这两个应用到系统,HdmiInDemo应用之前在Android7.1上使用过;这次也想一起打包进去测试下;
1、 拷贝rkCamera2和HdmiInDemo压缩包,并解压到packages/apps目录下
2、添加到系统编译中:vi device/rockchip/rk356x/device.mk
3、编译报错:packages/apps/HdmiInDemo/Android.mk: error: droidipcam: Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
解决:要求Android.mk必须定义LOCAL_SDK_VERSION或者 LOCAL_PRIVATE_PLATFORM_APIS其中一个。
vi packages/apps/HdmiInDemo/Android.mk
添加即可:LOCAL_SDK_VERSION := current
4、编译完后,在out目录下只生成了rkCamera2 apk,而HdmiInDemo并没有生成:out\target\product\rk3568_r\system\app\
尝试使用mmm来编译OK;
5、测试时,要给RK628D输入个HDMI显示信号,系统中使用这两个编译出来的APP,都没能打开HDMI IN显示;
二、确定RK628D的设备节点
1、确定RK628设备节点,获取当前的连接状态和分辨率;
输入命令:media-ctl -d /dev/media0 -p
找到m00_b_rk628-csi设备:device node name /dev/v4l-subdev3
2、RkCamera2应用代码修改对应节点
RkCamera2应用代码修改节点为"/dev/v4l-subdev3":
vi packages/apps/rkCamera2/jni/native.cpp
3、打开rkCamera2应用,还是没有图像显示
media-ctl -d /dev/media0 -p看下是否获取到分辨率:
上图中并没有获取到分辨率,说明配置上还有问题;
三、再确定下软件配置和硬件连接
1、查看硬件电源上电和复位是否正常,示波器量到是正常的;
根据RK原厂的文档查找,有两处需特别注意的:就是hpd-output和plugin-det电路上是否有取反;
检查了下电路:
hpd-output没有取反,不需要配置hpd-output-inverted;
plugin-det有取反,需要把dts中 plugin-det-gpios有效电平GPIO_ACTIVE_HIGH更改为GPIO_ACTIVE_LOW;
&rk628_csi {
status = "okay";
/*
* If the hpd output level is inverted on the circuit,
* the following configuration needs to be enabled.
*/
/*hpd-output-inverted;*/
- plugin-det-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
+ plugin-det-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
//power-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <0>;
2、更改后,烧入固件,开机可看到获取已输入的分辨率:
media-ctl -d /dev/media0 -p查看已有分辨率:
3、打开rkCamera2应用即可看到显示
四、测试HdmiInDemo应用
在使用rkCamera2应用打开HDMI IN显示后,接着使用系统相机和HdmiInDemo应用去打开试下;
结果:系统相机和HdmiInDemo应用都打不开HDMI IN显示,报找不到相机设备错误;
这可能是RK3568 Android11使用的是camera HAL3框架导致的,也有可能是原厂还没适配好的原因;问原厂也是回复说只能用他们的rkCamera2 demo来打开显示;