臺(tái)州做網(wǎng)站哪家好最近的電腦培訓(xùn)學(xué)校
這篇文章主要想介紹一下再RK3288平臺(tái)上面調(diào)試BT656 video in的注意事項(xiàng)。以RN6752轉(zhuǎn)接芯片,android10平臺(tái)為例進(jìn)行介紹。
目錄
1. RK3288 VIDEO INPUT 并口
2. 驅(qū)動(dòng)調(diào)試
2.1 RN6752 驅(qū)動(dòng)實(shí)現(xiàn)
①rn6752_g_mbus_config總線相關(guān)配置
②rn6752_querystd配置制式
③rn6752_g_skip_top_lines可以設(shè)置跳過(guò)頭部的幾行
2.2 DTS配置
①rn6752配置
②cif節(jié)點(diǎn)的配置
③pinctrl配置:
3. 注冊(cè)安卓camera
4. 調(diào)試手段
4.1 開(kāi)啟數(shù)據(jù)流
4.2 抓圖像
4.3 查看是否注冊(cè)camera成功
5. 總結(jié)
1. RK3288 VIDEO INPUT 并口
RK3288主控支持MIPI接口和DVP并口的圖像輸入,有ISP控制器和CIF控制器(RK356X以后該控制器改稱(chēng)為VICAP),ISP可以處理MIPI和DVP的圖像,CIF只能支持DVP并口,DVP接口只能支持BT656或者BT601,不支持BT1120,feature如下:
2. 驅(qū)動(dòng)調(diào)試
以Android10? kernel4.19平臺(tái),RN6752 CVBS轉(zhuǎn)BT656為例介紹一下驅(qū)動(dòng)調(diào)試的關(guān)鍵配置。
2.1 RN6752 驅(qū)動(dòng)實(shí)現(xiàn)
RN6752驅(qū)動(dòng)同樣基于V4l2框架接口實(shí)現(xiàn),輸入數(shù)據(jù)是CVBS PAL制或者NTSC制,一般分辨率是720*576或者720*480,隔行輸入,RK3288的CIF控制器支持接收P制或者N制數(shù)據(jù),并將其奇偶場(chǎng)進(jìn)行合并輸出。驅(qū)動(dòng)代碼基于v4l2框架,這里僅介紹一下幾個(gè)關(guān)鍵接口:
①rn6752_g_mbus_config總線相關(guān)配置
參考配置如下,需要設(shè)置總線類(lèi)型,極性等等
static int rn6752_g_mbus_config(struct v4l2_subdev *sd,struct v4l2_mbus_config *config)
{config->type = V4L2_MBUS_PARALLEL;config->flags = V4L2_MBUS_HSYNC_ACTIVE_HIGH |V4L2_MBUS_VSYNC_ACTIVE_LOW |V4L2_MBUS_PCLK_SAMPLE_RISING;return 0;
}
②rn6752_querystd配置制式
該接口需要設(shè)置N制或者P制類(lèi)型,CIF控制器會(huì)從這個(gè)接口獲取制式,并設(shè)置到控制器。注意的是BT601不需要設(shè)置這個(gè)接口。參考如下:
static int rn6752_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
{struct rn6752 *rn6752 = to_rn6752(sd);struct i2c_client *client = rn6752->client;dev_dbg(&client->dev, "%s(%d)\n", __func__, __LINE__);if(rn6752->cvstd_index){*std = V4L2_STD_NTSC;dev_info(&client->dev, "V4L2_STD_NTSC\n");}else{*std = V4L2_STD_PAL;dev_info(&client->dev, "V4L2_STD_PAL\n");}return 0;
}
③rn6752_g_skip_top_lines可以設(shè)置跳過(guò)頭部的幾行
該接口可以設(shè)置跳過(guò)行數(shù),有的轉(zhuǎn)接芯片傳輸?shù)臄?shù)據(jù),有可能會(huì)先傳幾行異常的圖像,直接收下會(huì)導(dǎo)致圖像異常,這個(gè)接口可以設(shè)置跳過(guò)這些行,需要注意的是設(shè)置成偶數(shù),不然有可能會(huì)導(dǎo)致奇偶場(chǎng)顛倒的問(wèn)題。
#define RN6752_SKIP_TOP 0static int rn6752_g_skip_top_lines(struct v4l2_subdev *sd, u32 *lines)
{struct rn6752 *rn6752 = to_rn6752(sd);*lines = RN6752_SKIP_TOP;return 0;
}
其余接口與其他的camera sensor驅(qū)動(dòng)基本一致,這里不再贅述。
2.2 DTS配置
dts關(guān)鍵配置主要有rn6752配置和iomux的引用。
①rn6752配置
rn6752注冊(cè)為一個(gè)i2c設(shè)備,配置如下所示:
rn6752: rn6752@2d {status = "okay";compatible = "richnex,rn6752";reg = <0x2d>;clocks = <&cru SCLK_VIP_OUT>;clock-names = "xvclk";//pwdn-gpios = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>;rockchip,camera-module-index = <1>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "RN6752";rockchip,camera-module-lens-name = "Largan";port {rn6752_out: endpoint {remote-endpoint = <&dvp_in_fcam>;bus-width = <8>;pclk-sample = <0>;};};};
hsync-active/vsync-active不要配置,否則v4l2框架異步注冊(cè)時(shí)會(huì)識(shí)別為BT601,pclk-sample/bus-width可選;pinctrl需要正確引用,后面介紹一下。
②cif節(jié)點(diǎn)的配置
基于v4l2框架同樣需要配置pipeline,這個(gè)case的pipeline就是RN6752->CIF,CIF節(jié)點(diǎn)配置如下:
&cif_new {status = "okay";pinctrl-names = "default";pinctrl-0 = <&isp_mipi &isp_dvp_d2d9 &isp_dvp_d10d11>;port {#address-cells = <1>;#size-cells = <0>;dvp_in_fcam: endpoint@0 {// bus-type = <0>;remote-endpoint = <&rn6752_out>;vsync-active = <0>;hsync-active = <1>;pclk-sample = <1>;// bus-width = <8>;};};
};
其中最關(guān)鍵的是pinctrl對(duì)應(yīng)的io需要正確引用。
③pinctrl配置:
pinctrl-0 = <&isp_mipi &isp_dvp_d2d9 &isp_dvp_d10d11>;
這里配置的pinctrl如上,需要特別注意,pinctlr需要跟硬件原理圖接法一致,需要核對(duì)清楚gpio,如果配置錯(cuò)任何一個(gè),都可能導(dǎo)致無(wú)法接收數(shù)據(jù)。這里的配置是d2-d11,有其他的場(chǎng)景可能是d4-d14或者d0-d7等等。
3. 注冊(cè)安卓camera
驅(qū)動(dòng)完成之后同樣需要注冊(cè)camera,這里注意xml的配置。主要配置如下:
如果成功注冊(cè)camera,就可以直接使用camera的apk打開(kāi)預(yù)覽。
4. 調(diào)試手段
4.1 開(kāi)啟數(shù)據(jù)流
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=720,height=576,pixelformat='NV12' --stream-mmap=4
4.2 抓圖像
v4l2-ctl -d /dev/video0 --set-fmt-video=width=720,height=576,pixelformat='NV12' --stream-mmap=3 --stream-skip=4 --stream-to=/data/720x576_PAL_nv12.yuv --stream-count=5 --stream-poll
4.3 查看是否注冊(cè)camera成功
dumpsys media.camera
5. 總結(jié)
希望這篇文章對(duì)RK3288 RN6752 CVBS的調(diào)試,對(duì)正在調(diào)試類(lèi)似case的人有幫助。