在車載智能中控、流媒體后視鏡的產(chǎn)品開發(fā)中,倒車影像的啟動(dòng)速度、切換流暢度是決定用戶體驗(yàn)的核心指標(biāo)。傳統(tǒng)安卓車機(jī)方案常面臨倒車啟動(dòng)慢、系統(tǒng)開機(jī)與倒車功能沖突、畫面切換閃爍等痛點(diǎn),而瑞芯微針對(duì)旗下RK系列芯片平臺(tái)推出的安卓快速倒車影像系統(tǒng)(RIS),可實(shí)現(xiàn)上電最快3秒進(jìn)入倒車畫面,同時(shí)支持安卓系統(tǒng)后臺(tái)開機(jī)、倒車界面與系統(tǒng)界面無縫切換,完美適配車載場(chǎng)景的剛需。
本文基于瑞芯微官方開發(fā)指南,全面拆解這套系統(tǒng)的核心能力、開發(fā)配置、調(diào)試技巧與問題排查方案,覆蓋RK3576/RK3588/RK356x/RK3368/RK3562全主流車機(jī)芯片,幫你快速落地高可靠性的倒車影像功能。

一、系統(tǒng)核心概述
1.1適配平臺(tái)與版本
這套系統(tǒng)針對(duì)瑞芯微車規(guī)級(jí)/工業(yè)級(jí)芯片深度優(yōu)化,適配的芯片、內(nèi)核與安卓版本如下表,可直接對(duì)應(yīng)產(chǎn)品選型參考:
|
芯片型號(hào)
|
支持內(nèi)核版本
|
適配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核心功能亮點(diǎn)
?極速冷啟動(dòng):上電最快約3.0秒即可進(jìn)入倒車影像界面,遠(yuǎn)快于安卓系統(tǒng)完全啟動(dòng)速度;
?后臺(tái)開機(jī)不干擾:倒車影像運(yùn)行過程中,安卓系統(tǒng)可保持后臺(tái)正常開機(jī),互不影響;
?無縫切換:支持倒車影像界面與Android系統(tǒng)界面毫秒級(jí)切換,也可通過APK控制DVD與倒車視頻快速切換;
?控制便捷:通過檢測(cè)IO口電平變化,自動(dòng)完成倒車與系統(tǒng)界面的切換,無需上層應(yīng)用干預(yù);
?全硬件加速:圖像采集、旋轉(zhuǎn)、鏡像、縮放全鏈路硬件IP處理,CPU占用極低,畫面無卡頓。
1.3攝像頭接口支持
系統(tǒng)支持MIPI、DVP兩大類攝像頭接口,不同芯片平臺(tái)的支持能力如下,可直接對(duì)應(yīng)硬件選型:
|
芯片型號(hào)
|
MIPI接口
|
DVP接口
|
|
RK3588/RK356x/RK3576
|
支持YUV輸出攝像頭/轉(zhuǎn)接芯片
|
支持BT601/BT656/BT1120
|
|
RK3368
|
不支持
|
支持BT601/BT656
|
|
RK3562
|
支持YUV輸出攝像頭/轉(zhuǎn)接芯片
|
不支持
|
注意:系統(tǒng)暫不支持MIPI RAW Sensor,需使用直接輸出YUV數(shù)據(jù)的攝像頭或AD轉(zhuǎn)換芯片(如NVP6324、TP2825、AD7181等)。
1.4核心數(shù)據(jù)流架構(gòu)
系統(tǒng)全鏈路硬件加速,核心數(shù)據(jù)流路徑為:
攝像頭輸入→MIPI/DVP PHY→CSI Host/CIF控制器→RGA硬件旋轉(zhuǎn)/鏡像/縮放→VOP顯示控制器→顯示屏

不同平臺(tái)的數(shù)據(jù)流差異極小,僅硬件IP的適配細(xì)節(jié)不同,核心鏈路完全一致,開發(fā)適配成本極低。
二、關(guān)鍵開發(fā)配置全解析
快速倒車影像系統(tǒng)的核心配置均在設(shè)備樹(DTS)與內(nèi)核配置中完成,以下是落地開發(fā)必須完成的核心配置項(xiàng),覆蓋全流程關(guān)鍵節(jié)點(diǎn)。
2.1 Kernel基礎(chǔ)配置
首先需要在內(nèi)核defconfig配置文件中,開啟倒車功能核心宏,不同內(nèi)核版本需額外補(bǔ)充對(duì)應(yīng)配置:
# 必開:快速倒車影像核心配置CONFIG_VIDEO_REVERSE_IMAGE=y# kernel-5.10/6.1 平臺(tái)必開:DRM直顯功能CONFIG_ROCKCHIP_DRM_DIRECT_SHOW=y# 對(duì)應(yīng)Sensor/AD芯片配置(以NVP6188為例)CONFIG_VIDEO_NVP6188=yCONFIG_VIDEO_REVERSE_NVP6188=y
2.2倒車檢測(cè)GPIO配置
倒車觸發(fā)的核心是電平檢測(cè),需在DTS中配置倒車檢測(cè)引腳,包括GPIO節(jié)點(diǎn)與pinctrl引腳復(fù)用配置,示例如下:
# 倒車GPIO檢測(cè)節(jié)點(diǎn)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>;//消抖時(shí)間label ="car-reverse";gpio,wakeup;};};# pinctrl引腳配置&pinctrl {vehicle {vehicle_gpios: vehicle-gpios {rockchip,pins = <1RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;};};};
2.3 Vehicle核心節(jié)點(diǎn)配置
Vehicle節(jié)點(diǎn)是倒車系統(tǒng)的核心配置節(jié)點(diǎn),需根據(jù)對(duì)應(yīng)芯片平臺(tái)配置時(shí)鐘、復(fù)位、電源域、顯示圖層、圖像旋轉(zhuǎn)等核心參數(shù),以下是主流平臺(tái)的核心配置示例。
RK3576平臺(tái)核心配置
vehicle: vehicle {compatible ="rockchip,vehicle";status ="okay";// 時(shí)鐘配置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";// 復(fù)位配置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";// 核心參數(shù)power-domains = <&power RK3576_PD_VI>;cif,drop-frames = <4>;// 啟動(dòng)丟棄前4幀不穩(wěn)定數(shù)據(jù)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>;// 關(guān)聯(lián)倒車GPIO節(jié)點(diǎn)rockchip,cif-sensor = <&cif_sensor>;// 關(guān)聯(lián)Sensor節(jié)點(diǎn)rockchip,cif-phy = <&cif_phy>;// 關(guān)聯(lián)PHY接口節(jié)點(diǎn)// 視頻格式固定配置ad,fix-format = <0>;// 0-自動(dòng)檢測(cè) 1-PAL 2-NTSC 3-720p50// 旋轉(zhuǎn)鏡像配置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平臺(tái)核心配置
與RK3576配置邏輯一致,僅需修改時(shí)鐘、復(fù)位、電源域、chip-id、顯示圖層等平臺(tái)相關(guān)參數(shù),chip-id配置為1,crtc_name與plane_name可根據(jù)屏幕配置調(diào)整。
2.4 Sensor/AD轉(zhuǎn)換芯片配置
需在DTS中配置攝像頭或AD轉(zhuǎn)換芯片的控制引腳、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總線號(hào)cif_chl = <0>;// CIF通道號(hào)ad_chl = <0>;mclk_rate = <24>;rockchip,camera-module-defrect0 = <192010800019201080>;// 圖像裁剪配置};};
2.5 MIPI/DVP接口配置
需根據(jù)硬件使用的物理接口,在cif_phy節(jié)點(diǎn)中開啟對(duì)應(yīng)PHY,關(guān)閉未使用的接口,以下是RK3576平臺(tái)的接口配置示例:
cif_phy: cif_phy {status ="okay";// MIPI DCPHY0 接口csi2_dcphy0 {status ="disabled";// 對(duì)應(yīng)時(shí)鐘、復(fù)位、PHY配置};// MIPI DPHY0 接口csi2_dphy0 {status ="disabled";// 對(duì)應(yīng)時(shí)鐘、復(fù)位、PHY配置};// MIPI DPHY3 接口(實(shí)際使用開啟)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顯示圖層關(guān)鍵配置
顯示配置是避免畫面閃爍、保證倒車畫面正常顯示的核心,分為內(nèi)核圖層配置與HWC圖層預(yù)留兩部分。
內(nèi)核圖層配置
RK3588/RK3562/RK3576平臺(tái)可直接在vehicle節(jié)點(diǎn)中通過vehicle,crtc_name和vehicle,plane_name配置顯示屏幕與圖層,無需修改驅(qū)動(dòng)代碼。
HWC圖層預(yù)留
必須在安卓側(cè)配置HWC預(yù)留對(duì)應(yīng)圖層,否則會(huì)出現(xiàn)倒車畫面與安卓界面閃爍、搶占圖層的問題。
?永久配置:在device.mk中添加如下屬性
PRODUCT_PROPERTY_OVERRIDES+=debug.hwui.use_partial_updates=falsevendor.hwc.reserved_plane_name=Esmart0-win0
?臨時(shí)調(diào)試配置:直接修改設(shè)備/vendor/build.prop,添加vendor.hwc.reserved_plane_name=Esmart0-win0,重啟生效。
2.7 CMA內(nèi)存預(yù)留配置
倒車影像需要連續(xù)物理內(nèi)存用于圖像幀緩存,需在DTS中預(yù)留專用CMA內(nèi)存,避免內(nèi)存分配失敗,配置示例如下:
reserved-memory {ranges;drm_vehicle: drm-vehicle@0{compatible ="shared-dma-pool";inactive;reusable;reg = <0x0(512*0x100000)0x0(256*0x100000)>;// 512M偏移,預(yù)留256Mlinux,cma-default;};};// 顯示子系統(tǒng)關(guān)聯(lián)預(yù)留內(nèi)存&display_subsystem {memory-region = <&drm_logo>, <&drm_vehicle>;memory-region-names ="drm-logo","drm-vehicle";};
三、實(shí)戰(zhàn)調(diào)試技巧
完成基礎(chǔ)配置后,可通過以下調(diào)試方法快速定位問題、驗(yàn)證功能。
3.1全鏈路Log開關(guān)打開
倒車核心Log開關(guān)
修改drivers/video/rockchip/vehicle/vehicle_cfg.h,調(diào)整debug參數(shù)即可打開對(duì)應(yīng)模塊Log:
// 0x1f 打開所有模塊Log,可按需單獨(dú)開啟staticintdebug =0x1f;// 對(duì)應(yīng)模塊:// 0x1: AD轉(zhuǎn)換芯片Log 0x2: CIF控制器Log// 0x4: 圖像送顯Log 0x8: 主線程Log// 0x10: GPIO檢測(cè)Log
DRM直顯Log開關(guān)
RK3588/RK3562/RK3576平臺(tái),修改rockchip_drm_direct_show.c,將drm_ds_debug置1,即可打開顯示鏈路Log。
CIF控制器Log開關(guān)
執(zhí)行以下命令可動(dòng)態(tài)開啟CIF/CSI控制器Log,無需重新編譯內(nèi)核:
echo1 > /sys/module/video_rkcif/parameters/debugecho1 > /sys/module/video_rkcif/parameters/debug_csi2
3.2高頻調(diào)試命令
|
功能
|
調(diào)試命令
|
|
查看CIF中斷狀態(tài)
|
cat /proc/interrupts
|
|
查看圖層顯示狀態(tài)
|
cat /d/dri/0/summary
|
|
抓取HWC運(yùn)行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強(qiáng)制控制倒車狀態(tài)
無需硬件GPIO觸發(fā),可通過命令直接控制倒車功能的進(jìn)入、退出,適合無硬件的調(diào)試場(chǎng)景:
# 強(qiáng)制進(jìn)入倒車影像echo11 > /dev/vehicle# 強(qiáng)制退出倒車影像echo10 > /dev/vehicle# 完全退出倒車系統(tǒng),釋放CIF資源,切換到V4L2框架echo88 > /dev/vehicle
3.4圖像全鏈路抓圖調(diào)試
當(dāng)出現(xiàn)不出圖、畫面異常時(shí),可開啟各環(huán)節(jié)圖像數(shù)據(jù)dump,定位問題出在采集、處理還是顯示環(huán)節(jié):
1.修改vehicle_flinger_I2O1.c,開啟dump開關(guān):
staticintvehicle_dump_cif =1;// 保存CIF采集輸出數(shù)據(jù)staticintvehicle_dump_rga =1;// 保存RGA處理前后數(shù)據(jù)staticintvehicle_dump_vop =1;// 保存VOP送顯數(shù)據(jù)
2.重新編譯內(nèi)核燒錄后,觸發(fā)倒車,即可在設(shè)備/data/目錄下獲取各環(huán)節(jié)的YUV原始數(shù)據(jù),用于分析問題。
四、高頻問題排查指南
4.1倒車開關(guān)無效,無法觸發(fā)倒車
1.優(yōu)先檢查DTS中倒車GPIO節(jié)點(diǎn)配置是否正確,引腳號(hào)、有效電平是否與硬件一致;
2.查看內(nèi)核Log,確認(rèn)GPIO中斷是否正常申請(qǐng),是否出現(xiàn)引腳沖突、被其他模塊占用的情況;
3.用萬用表測(cè)量倒車觸發(fā)時(shí),主控引腳的電平是否正常變化,排查硬件電路問題。
4.2觸發(fā)倒車,但畫面無輸出
按從后往前的鏈路逐步排查,定位問題節(jié)點(diǎn):
1.確認(rèn)Sensor/AD芯片是否正常工作:優(yōu)先在V4L2框架下調(diào)通Sensor,確保I2C通信正常、有圖像數(shù)據(jù)輸出;
2.確認(rèn)CIF控制器是否收到數(shù)據(jù):執(zhí)行cat /proc/interrupts | grep vehicle_cif,查看中斷計(jì)數(shù)是否持續(xù)增長(zhǎng),無中斷則說明前端數(shù)據(jù)未進(jìn)入控制器;
3.確認(rèn)MIPI PHY狀態(tài):以RK3588為例,執(zhí)行io -4 0xfdd10014查看PHY狀態(tài)寄存器,確認(rèn)時(shí)鐘、數(shù)據(jù)通道是否正常接收數(shù)據(jù);
4.確認(rèn)顯示鏈路是否正常:查看DRM相關(guān)Log,是否出現(xiàn)找不到crtc、plane的報(bào)錯(cuò),確認(rèn)圖層配置與HWC預(yù)留是否一致。
4.3倒車畫面與安卓界面交替閃爍
核心原因是HWC未成功預(yù)留倒車專用圖層,導(dǎo)致安卓系統(tǒng)與倒車系統(tǒng)搶占同一圖層:
1.確認(rèn)vendor.hwc.reserved_plane_name配置的圖層名稱,與內(nèi)核vehicle節(jié)點(diǎn)配置的plane_name完全一致;
2.抓取HWC Log,查看是否有plane reserved相關(guān)的成功日志,確認(rèn)預(yù)留生效;
3.執(zhí)行cat /d/dri/0/summary,查看倒車畫面占用的plane是否與預(yù)留的一致。
4.4啟動(dòng)報(bào)錯(cuò),DRM內(nèi)存分配失敗
報(bào)錯(cuò)提示alloc buffer failed,是因?yàn)轭A(yù)留的CMA內(nèi)存不足,無法分配圖像幀緩存:
1.增大DTS中drm_vehicle節(jié)點(diǎn)的預(yù)留內(nèi)存大小;
2.確認(rèn)預(yù)留的內(nèi)存地址范圍無沖突,且被顯示子系統(tǒng)正確引用。
4.5如何新增自定義Camera/AD芯片支持
1.先在標(biāo)準(zhǔn)V4L2框架下調(diào)通該芯片的驅(qū)動(dòng),確保Sensor正常出圖;
2.參考已適配的TP2825/NVP6324代碼,實(shí)現(xiàn)sensor_init、sensor_deinit、sensor_stream等核心接口;
3.在vehicle_generic_sensor.c中注冊(cè)芯片的適配接口;
4.在Makefile和Kconfig中添加對(duì)應(yīng)的編譯配置,在defconfig中開啟對(duì)應(yīng)宏;
5.如需支持倒車與V4L2框架切換,需修改Sensor驅(qū)動(dòng),用CONFIG_VIDEO_REVERSE_IMAGE宏隔離驅(qū)動(dòng)注冊(cè)入口。

五、開發(fā)總結(jié)
瑞芯微這套快速倒車影像系統(tǒng),通過內(nèi)核態(tài)全鏈路硬件加速實(shí)現(xiàn)了倒車畫面的極速啟動(dòng)與流暢切換,大幅降低了車載產(chǎn)品的開發(fā)門檻。
開發(fā)落地的核心建議:
1.優(yōu)先在標(biāo)準(zhǔn)V4L2框架下調(diào)通攝像頭/AD芯片,再移植到快速倒車框架,可大幅降低調(diào)試難度;
2.顯示圖層配置與HWC預(yù)留必須嚴(yán)格對(duì)應(yīng),這是避免畫面閃爍的核心;
3.調(diào)試不出圖問題時(shí),優(yōu)先通過中斷、寄存器、數(shù)據(jù)dump定位問題鏈路,再針對(duì)性解決。
-
瑞芯微
+關(guān)注
關(guān)注
27文章
799瀏覽量
54404 -
影像系統(tǒng)
+關(guān)注
關(guān)注
0文章
46瀏覽量
9465 -
rk3576
+關(guān)注
關(guān)注
1文章
272瀏覽量
1590
發(fā)布評(píng)論請(qǐng)先 登錄
【倒車影像專題制作】倒車影像安裝教程_倒車影像工作原理和設(shè)計(jì)
倒車影像安裝教程_倒車影像工作原理和設(shè)計(jì)
RK安卓平臺(tái)快速倒車影像系統(tǒng):極速啟動(dòng)無卡頓全攻略
評(píng)論