RK安卓平台快速倒车影像系统:极速启动无卡顿全攻略

电子说

1.4w人已加入

描述

 

 

 

在车载智能中控、流媒体后视镜的产品开发中,倒车影像的启动速度、切换流畅度是决定用户体验的核心指标。传统安卓车机方案常面临倒车启动慢、系统开机与倒车功能冲突、画面切换闪烁等痛点,而瑞芯微针对旗下RK系列芯片平台推出的安卓快速倒车影像系统(RIS,可实现上电最快3秒进入倒车画面,同时支持安卓系统后台开机、倒车界面与系统界面无缝切换,完美适配车载场景的刚需。

 

 

本文基于瑞芯微官方开发指南,全面拆解这套系统的核心能力、开发配置、调试技巧与问题排查方案,覆盖RK3576/RK3588/RK356x/RK3368/RK3562全主流车机芯片,帮你快速落地高可靠性的倒车影像功能。

瑞芯微

 

 

 

一、系统核心概述

 

 

1.1 适配平台与版本

 

 

这套系统针对瑞芯微车规级/工业级芯片深度优化,适配的芯片、内核与安卓版本如下表,可直接对应产品选型参考:

 

 

芯片型号

 

 

支持内核版本

 

 

适配Android版本

 

 

RK3368/PX5

 

 

Linux 4.19

 

 

Android12.0

 

 

RK3566/RK3568

 

 

Linux 4.19/5.10/6.1

 

 

Android11.0~14.0

 

 

RK3588

 

 

Linux 5.10/6.1

 

 

Android12.0~14.0

 

 

RK3562

 

 

Linux 5.10/6.1

 

 

Android13.0~14.0

 

 

RK3576

 

 

Linux 6.1

 

 

Android14.0

 

 

1.2 核心功能亮点

 

 

极速冷启动:上电最快约3.0秒即可进入倒车影像界面,远快于安卓系统完全启动速度;

 

 

后台开机不干扰:倒车影像运行过程中,安卓系统可保持后台正常开机,互不影响;

 

 

无缝切换:支持倒车影像界面与Android系统界面毫秒级切换,也可通过APK控制DVD与倒车视频快速切换;

 

 

控制便捷:通过检测IO口电平变化,自动完成倒车与系统界面的切换,无需上层应用干预;

 

 

全硬件加速:图像采集、旋转、镜像、缩放全链路硬件IP处理,CPU占用极低,画面无卡顿。

 

 

1.3 摄像头接口支持

 

 

系统支持MIPIDVP两大类摄像头接口,不同芯片平台的支持能力如下,可直接对应硬件选型:

 

 

芯片型号

 

 

MIPI接口

 

 

DVP接口

 

 

RK3588/RK356x/RK3576

 

 

支持YUV输出摄像头/转接芯片

 

 

支持BT601/BT656/BT1120

 

 

RK3368

 

 

不支持

 

 

支持BT601/BT656

 

 

RK3562

 

 

支持YUV输出摄像头/转接芯片

 

 

不支持

 

 

注意:系统暂不支持MIPI RAW Sensor,需使用直接输出YUV数据的摄像头或AD转换芯片(如NVP6324TP2825AD7181等)。

 

 

1.4 核心数据流架构

 

 

系统全链路硬件加速,核心数据流路径为:

 

 

摄像头输入→MIPI/DVP PHY→CSI Host/CIF控制器→RGA硬件旋转/镜像/缩放→VOP显示控制器显示屏

 

 

 

瑞芯微

不同平台的数据流差异极小,仅硬件IP的适配细节不同,核心链路完全一致,开发适配成本极低。

 

 

二、关键开发配置全解析

 

 

快速倒车影像系统的核心配置均在设备树(DTS)与内核配置中完成,以下是落地开发必须完成的核心配置项,覆盖全流程关键节点。

 

 

2.1 Kernel基础配置

 

 

首先需要在内核defconfig配置文件中,开启倒车功能核心宏,不同内核版本需额外补充对应配置:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 必开:快速倒车影像核心配置CONFIG_VIDEO_REVERSE_IMAGE=y# kernel-5.10/6.1 平台必开:DRM直显功能CONFIG_ROCKCHIP_DRM_DIRECT_SHOW=y# 对应Sensor/AD芯片配置(以NVP6188为例)CONFIG_VIDEO_NVP6188=yCONFIG_VIDEO_REVERSE_NVP6188=y

2.2 倒车检测GPIO配置

 

 

倒车触发的核心是电平检测,需在DTS中配置倒车检测引脚,包括GPIO节点与pinctrl引脚复用配置,示例如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 倒车GPIO检测节点gpio_det: gpio-det {    status = "okay";    pinctrl-names = "default";    pinctrl-0 = <&vehicle_gpios>;    car-reverse {        car-reverse-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;        linux,debounce-ms = <5>; // 消抖时间        label = "car-reverse";        gpio,wakeup;    };};# pinctrl引脚配置&pinctrl {    vehicle {        vehicle_gpios: vehicle-gpios {            rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;        };    };};

2.3 Vehicle核心节点配置

 

 

Vehicle节点是倒车系统的核心配置节点,需根据对应芯片平台配置时钟、复位、电源域、显示图层、图像旋转等核心参数,以下是主流平台的核心配置示例。

 

 

RK3576平台核心配置

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
vehicle: vehicle {    compatible = "rockchip,vehicle";    status = "okay";    // 时钟配置    clocks = <&cru ACLK_VICAP>, <&cru HCLK_VICAP>, <&cru DCLK_VICAP>,             <&cru CLK_VICAP_I0CLK>, <&cru CLK_VICAP_I1CLK>,             <&cru CLK_VICAP_I2CLK>, <&cru CLK_VICAP_I3CLK>,             <&cru CLK_VICAP_I4CLK>;    clock-names = "aclk_cif""hclk_cif""dclk_cif",                  "i0clk_cif""i1clk_cif""i2clk_cif",                  "i3clk_cif""i4clk_cif";    // 复位配置    resets = <&cru SRST_A_VICAP>, <&cru SRST_H_VICAP>, <&cru SRST_D_VICAP>,             <&cru SRST_VICAP_I0CLK>, <&cru SRST_VICAP_I1CLK>,             <&cru SRST_VICAP_I2CLK>, <&cru SRST_VICAP_I3CLK>,             <&cru SRST_VICAP_I4CLK>;    reset-names = "rst_cif_a""rst_cif_h""rst_cif_d",                  "rst_cif_iclk0""rst_cif_iclk1""rst_cif_iclk2",                  "rst_cif_iclk3""rst_cif_iclk4";    // 核心参数    power-domains = <&power RK3576_PD_VI>;    cif,drop-frames = <4>; // 启动丢弃前4帧不稳定数据    cif,chip-id = <3>; /* 芯片ID:0-rk3568 1-rk3588 2-rk3562 3-rk3576 */    rockchip,grf = <&ioc_grf>;    rockchip,cru = <&cru>;    rockchip,cif = <&rkcif>;    rockchip,gpio-det = <&gpio_det>; // 关联倒车GPIO节点    rockchip,cif-sensor = <&cif_sensor>; // 关联Sensor节点    rockchip,cif-phy = <&cif_phy>; // 关联PHY接口节点    // 视频格式固定配置    ad,fix-format = <0>; // 0-自动检测 1-PAL 2-NTSC 3-720p50    // 旋转镜像配置    vehicle,rotate-mirror = <0x00>; // 0-无 1-90° 2-180° 4-270° 0x10-Y镜像 0x20-X镜像    // 显示图层配置    vehicle,crtc_name = "video_port1";    vehicle,plane_name = "Esmart1-win0";};

RK3588平台核心配置

 

 

RK3576配置逻辑一致,仅需修改时钟、复位、电源域、chip-id、显示图层等平台相关参数,chip-id配置为1crtc_nameplane_name可根据屏幕配置调整。

 

 

2.4 Sensor/AD转换芯片配置

 

 

需在DTS中配置摄像头或AD转换芯片的控制引脚、I2C地址、通道等信息,以NVP6324为例,核心配置如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
cif_sensor: cif_sensor {    compatible = "rockchip,sensor";    status = "okay";    nvp6324 {        status = "okay";        powerdown-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;        pwdn_active = <1>;        orientation = <90>;        i2c_add = <0x60>; // 8位I2C地址        i2c_chl = <5>; // I2C总线号        cif_chl = <0>; // CIF通道号        ad_chl = <0>;        mclk_rate = <24>;        rockchip,camera-module-defrect0 = <1920 1080 0 0 1920 1080>; // 图像裁剪配置    };};

2.5 MIPI/DVP接口配置

 

 

需根据硬件使用的物理接口,在cif_phy节点中开启对应PHY,关闭未使用的接口,以下是RK3576平台的接口配置示例:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
cif_phy: cif_phy {    status = "okay";    // MIPI DCPHY0 接口    csi2_dcphy0 {        status = "disabled";        // 对应时钟、复位、PHY配置    };    // MIPI DPHY0 接口    csi2_dphy0 {        status = "disabled";        // 对应时钟、复位、PHY配置    };    // MIPI DPHY3 接口(实际使用开启)    csi2_dphy3 {        status = "okay";        clocks = <&cru CLK_MIPI_CAMERAOUT_M2>,                 <&cru PCLK_CSIDPHY1>,                 <&cru PCLK_CSI_HOST_3>;        clock-names = "xvclk""pclk""pclk_csi2host";        resets = <&cru SRST_P_CSIDPHY1>, <&cru SRST_P_CSI_HOST_3>;        reset-names = "srst_p_csiphy""srst_csihost_p";        csihost-idx = <3>;        rockchip,sys-grf = <&sys_grf>;        rockchip,dphy-grf = <&mipidphy1_grf>;        rockchip,csi2-dphy = <&csi2_dphy1_hw>;        rockchip,csi2 = <&mipi3_csi2_hw>;    };};

2.6 显示图层关键配置

 

 

显示配置是避免画面闪烁、保证倒车画面正常显示的核心,分为内核图层配置与HWC图层预留两部分。

 

 

内核图层配置

 

 

RK3588/RK3562/RK3576平台可直接在vehicle节点中通过vehicle,crtc_namevehicle,plane_name配置显示屏幕与图层,无需修改驱动代码。

 

 

HWC图层预留

 

 

必须在安卓侧配置HWC预留对应图层,否则会出现倒车画面与安卓界面闪烁、抢占图层的问题。

 

 

永久配置:在device.mk中添加如下属性

 

 

  •  
  •  
  •  
PRODUCT_PROPERTY_OVERRIDES +=     debug.hwui.use_partial_updates=false     vendor.hwc.reserved_plane_name=Esmart0-win0

临时调试配置:直接修改设备/vendor/build.prop,添加vendor.hwc.reserved_plane_name=Esmart0-win0,重启生效。

 

 

2.7 CMA内存预留配置

 

 

倒车影像需要连续物理内存用于图像帧缓存,需在DTS中预留专用CMA内存,避免内存分配失败,配置示例如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
reserved-memory {    #address-cells = <2>;    #size-cells = <2>;    ranges;    drm_vehicle: drm-vehicle@0{        compatible = "shared-dma-pool";        inactive;        reusable;        reg = <0x0 (512 * 0x1000000x0 (256 * 0x100000)>; // 512M偏移,预留256M        linux,cma-default;    };};// 显示子系统关联预留内存&display_subsystem {    memory-region = <&drm_logo>, <&drm_vehicle>;    memory-region-names = "drm-logo""drm-vehicle";};

三、实战调试技巧

 

 

完成基础配置后,可通过以下调试方法快速定位问题、验证功能。

 

 

3.1 全链路Log开关打开

 

 

倒车核心Log开关

 

 

修改drivers/video/rockchip/vehicle/vehicle_cfg.h,调整debug参数即可打开对应模块Log

 

 

  •  
  •  
  •  
  •  
  •  
  •  
// 0x1f 打开所有模块Log,可按需单独开启static int debug = 0x1f;// 对应模块:// 0x1: AD转换芯片Log  0x2: CIF控制器Log// 0x4: 图像送显Log    0x8: 主线程Log// 0x10: GPIO检测Log

DRM直显Log开关

 

 

RK3588/RK3562/RK3576平台,修改rockchip_drm_direct_show.c,将drm_ds_debug1,即可打开显示链路Log

 

 

CIF控制器Log开关

 

 

执行以下命令可动态开启CIF/CSI控制器Log,无需重新编译内核:

 

 

  •  
  •  
echo 1 > /sys/module/video_rkcif/parameters/debugecho 1 > /sys/module/video_rkcif/parameters/debug_csi2

3.2 高频调试命令

 

 

功能

 

 

调试命令

 

 

查看CIF中断状态

 

 

cat /proc/interrupts

 

 

查看图层显示状态

 

 

cat /d/dri/0/summary

 

 

抓取HWC运行Log

 

 

adb shell setprop vendor.hwc.log debug && logcat > hwc.log

 

 

RK3576查看VICAP寄存器

 

 

io -4 -l 0x1000 0x27C10000

 

 

RK3588查看CSI-HOST寄存器

 

 

io -4 -l 0x100 0xfdd10000

 

 

3.3 强制控制倒车状态

 

 

无需硬件GPIO触发,可通过命令直接控制倒车功能的进入、退出,适合无硬件的调试场景:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
# 强制进入倒车影像echo 11 > /dev/vehicle# 强制退出倒车影像echo 10 > /dev/vehicle# 完全退出倒车系统,释放CIF资源,切换到V4L2框架echo 88 > /dev/vehicle

3.4 图像全链路抓图调试

 

 

当出现不出图、画面异常时,可开启各环节图像数据dump,定位问题出在采集、处理还是显示环节:

 

 

1.修改vehicle_flinger_I2O1.c,开启dump开关:

 

 

  •  
  •  
  •  
static int vehicle_dump_cif = 1// 保存CIF采集输出数据static int vehicle_dump_rga = 1// 保存RGA处理前后数据static int vehicle_dump_vop = 1// 保存VOP送显数据

2.重新编译内核烧录后,触发倒车,即可在设备/data/目录下获取各环节的YUV原始数据,用于分析问题。

 

 

四、高频问题排查指南

 

 

4.1 倒车开关无效,无法触发倒车

 

 

1.优先检查DTS中倒车GPIO节点配置是否正确,引脚号、有效电平是否与硬件一致;

 

 

2.查看内核Log,确认GPIO中断是否正常申请,是否出现引脚冲突、被其他模块占用的情况;

 

 

3.用万用表测量倒车触发时,主控引脚的电平是否正常变化,排查硬件电路问题。

 

 

4.2 触发倒车,但画面无输出

 

 

按从后往前的链路逐步排查,定位问题节点:

 

 

1.确认Sensor/AD芯片是否正常工作:优先在V4L2框架下调通Sensor,确保I2C通信正常、有图像数据输出;

 

 

2.确认CIF控制器是否收到数据:执行cat /proc/interrupts | grep vehicle_cif,查看中断计数是否持续增长,无中断则说明前端数据未进入控制器;

 

 

3.确认MIPI PHY状态:以RK3588为例,执行io -4 0xfdd10014查看PHY状态寄存器,确认时钟、数据通道是否正常接收数据;

 

 

4.确认显示链路是否正常:查看DRM相关Log,是否出现找不到crtcplane的报错,确认图层配置与HWC预留是否一致。

 

 

4.3 倒车画面与安卓界面交替闪烁

 

 

核心原因是HWC未成功预留倒车专用图层,导致安卓系统与倒车系统抢占同一图层:

 

 

1.确认vendor.hwc.reserved_plane_name配置的图层名称,与内核vehicle节点配置的plane_name完全一致;

 

 

2.抓取HWC Log,查看是否有plane reserved相关的成功日志,确认预留生效;

 

 

3.执行cat /d/dri/0/summary,查看倒车画面占用的plane是否与预留的一致。

 

 

4.4 启动报错,DRM内存分配失败

 

 

报错提示alloc buffer failed,是因为预留的CMA内存不足,无法分配图像帧缓存:

 

 

1.增大DTSdrm_vehicle节点的预留内存大小;

 

 

2.确认预留的内存地址范围无冲突,且被显示子系统正确引用。

 

 

4.5 如何新增自定义Camera/AD芯片支持

 

 

1.先在标准V4L2框架下调通该芯片的驱动,确保Sensor正常出图;

 

 

2.参考已适配的TP2825/NVP6324代码,实现sensor_initsensor_deinitsensor_stream等核心接口;

 

 

3.vehicle_generic_sensor.c中注册芯片的适配接口;

 

 

4.MakefileKconfig中添加对应的编译配置,在defconfig中开启对应宏;

 

 

5.如需支持倒车与V4L2框架切换,需修改Sensor驱动,用CONFIG_VIDEO_REVERSE_IMAGE宏隔离驱动注册入口。

瑞芯微

 

 

 

五、开发总结

 

 

瑞芯微这套快速倒车影像系统,通过内核态全链路硬件加速实现了倒车画面的极速启动与流畅切换,大幅降低了车载产品的开发门槛。

 

 

开发落地的核心建议:

 

 

1.优先在标准V4L2框架下调通摄像头/AD芯片,再移植到快速倒车框架,可大幅降低调试难度;

 

 

2.显示图层配置与HWC预留必须严格对应,这是避免画面闪烁的核心;

 

 

3.调试不出图问题时,优先通过中断、寄存器、数据dump定位问题链路,再针对性解决。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分