BeagleBoard-xm with bc10カメラモジュール †BeagleBoard-xmにbc10のカメラモジュールを接続し動かしました。
BeagleBoard-xm に bc10向けrowboatカーネルをポーティングしました。 カーネルソースの書き換え †arch/arm/mach-omap2/board-omap3bc10.c の書き換え †・bc10 と BeagleBoard-xm では映像出力信号の配線が異なるので、 映像信号の設定を変更します。 @@ -695,6 +695,42 @@ #ifdef CONFIG_OMAP_MUX static struct omap_board_mux board_mux[] __initdata = { + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA18_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA19_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA20_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA21_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA22_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_DSS_DATA23_OFFSET, + .value = 0x0003, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT0_OFFSET, + .value = 0x0103, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT1_OFFSET, + .value = 0x0103, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT3_OFFSET, + .value = 0x0103, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT4_OFFSET, + .value = 0x0103, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT5_OFFSET, + .value = 0x0103, + }, + { .reg_offset = OMAP3_CONTROL_PADCONF_SYS_BOOT6_OFFSET, + .value = 0x0003, + }, { .reg_offset = OMAP_MUX_TERMINATOR }, }; #else ・詳細 ----------------------------------------------------------------------------------- | 映像出力先信号 | 映像入力元信号名 (BC10) | 映像入力元信号名 (BeagleBoard) | ----------------------------------------------------------------------------------- | DVI_DATA0 (R0) | DSS_D0 | DSS_D18 | | DVI_DATA1 (R1) | DSS_D1 | DSS_D19 | | DVI_DATA2 (R2) | DSS_D2 | DSS_D20 | | DVI_DATA3 (R3) | DSS_D3 | DSS_D21 | | DVI_DATA4 (R4) | DSS_D4 | DSS_D22 | | DVI_DATA5 (R5) | DSS_D5 | DSS_D23 | | DVI_DATA6 (R6) | DSS_D6 | DSS_D6 | | DVI_DATA7 (R7) | DSS_D7 | DSS_D7 | | DVI_DATA8 (G0) | DSS_D8 | DSS_D8 | | DVI_DATA9 (G1) | DSS_D9 | DSS_D9 | | DVI_DATA10 (G2) | DSS_D10 | DSS_D10 | | DVI_DATA11 (G3) | DSS_D11 | DSS_D11 | | DVI_DATA12 (G4) | DSS_D12 | DSS_D12 | | DVI_DATA13 (G5) | DSS_D13 | DSS_D13 | | DVI_DATA14 (G6) | DSS_D14 | DSS_D14 | | DVI_DATA15 (G7) | DSS_D15 | DSS_D15 | | DVI_DATA16 (B0) | DSS_D16 | DSS_D16 | | DVI_DATA17 (B1) | DSS_D17 | DSS_D17 | | DVI_DATA18 (B2) | DSS_D18 | SYS_BOOT0 | | DVI_DATA19 (B3) | DSS_D19 | SYS_BOOT1 | | DVI_DATA20 (B4) | DSS_D20 | SYS_BOOT3 | | DVI_DATA21 (B5) | DSS_D21 | SYS_BOOT4 | | DVI_DATA22 (B6) | DSS_D22 | SYS_BOOT5 | | DVI_DATA23 (B7) | DSS_D23 | SYS_BOOT6 | ----------------------------------------------------------------------------------- R0〜R5, B18〜B23に対応する入力信号がbc10とBeagleBoardで異なっています。 driver/media/video/isp/isp.c の書き換え †・カメラからのデータ読み込みタイミングとデータの順序を変更します。 @@ -868,6 +868,8 @@ ispctrl_val &= ~ISPCTRL_SYNC_DETECT_VSRISE; ispctrl_val |= config->hsvs_syncdetect; + ispctrl_val &= ~(0x4); // ブリッジの設定 ( カメラから送信されるデータ UYVY の順番をブリッジで入れ替えないように変更 ) + ispctrl_val |= 0x00000010; // データ取得タイミング ( カメラから送信されるデータを読み込むタイミングをネガティブエッジに変更 ) isp_reg_writel(dev, ispctrl_val, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL); driver/media/video/isp/ispccdc.c †・カメラから受信する色情報の設定を変更します。 @@ -681,7 +682,7 @@ syncif.fldpol = 0; syncif.fldstat = 0; syncif.hdpol = 0; - syncif.ipmod = YUV16; + syncif.ipmod = YUV8; // 入力色情報の設定 ( YUVはそれぞれ8bitずつカメラから送信されるので YUV16 を YUV8に変更 ) syncif.vdpol = 1; syncif.bt_r656_en = 0; ispccdc_config_imgattr(isp_ccdc, 0); ・カーネル変更前 と カーネル変更後 の動作の違い ------------------------------------------------------------------------------------------------- | 設定項目 | 動作 (変更前) | 動作 (変更前) | ================================================================================================= | データ取得タイミング | YUVデータをポジティブエッジで取得 | YUVデータをネガティブエッジで取得 | ------------------------------------------------------------------------------------------------- | ブリッジ | U ⇔ Y, V ⇔ Y を入れ替え | YUVを入れ替えない | ------------------------------------------------------------------------------------------------- | 入力色情報 | CCDC内部での U ⇔ Y, V ⇔ Y | CCDC内部での U ⇔ Y, V ⇔ Y | | | 入れ替えが動作せず | 入れ替えが動作 | ------------------------------------------------------------------------------------------------- -------------------------------------------- | DM37x / OMAP3 | | | | ----------------------------------- | | | ISP | | ----------------- | | ---------- --------- | | --------- | | | | | | | | | | | | | カメラ(cli6010) |=========>| ブリッジ | =====> | CCDC | =========>| Memory | | | | | | | | | | | | | ----------------- | | ---------- --------- | | --------- | ----------------------------------- | -------------------------------------------- -------------------------------------------------------------------------------------------------------------------------- | | カメラ出力 | ブリッジ入力 | ブリッジ出力(CCDC入力) | CCDC出力(メモリ格納データ) | ========================================================================================================================== | bc10 (変更前カーネル) | UYVY | UYVY | YUYV | YUYV | | bc10 (変更後カーネル) | UYVY | UYVY | YUYV | YUYV(有ノイズ小) | | BeagleBoard (変更前カーネル) | UYVY | YUYV | UYVY | UYVY(有ノイズ大) | | BeagleBoard (変更後カーネル) | UYVY | UYVY | UYVY | YUYV | -------------------------------------------------------------------------------------------------------------------------- | データの流れ --------> | -------------------------------------------------------------------------------------------------------------------------- bc10はブリッジ入力の際、ポジティブエッジで画素データを取得するとノイズが発生しません。 ・mdelayで画像の取得を待ちます。 @@ -1561,6 +1562,7 @@ { struct isp_ccdc_device *isp_ccdc = _isp_ccdc; + mdelay(15); return ispccdc_busy(isp_ccdc) | (isp_reg_readl(isp_ccdc->dev, OMAP3_ISP_IOMEM_SBL, ISPSBL_CCDC_WR_0) & mdelayを行わない場合、CCDCがメモリへの画像の格納を終了しないうちに、バッファの切り替えを行ってしまいます。 カーネルコンフィギュレーションの変更 †1.Pad Configuration レジスタへの書き込みを有効にし、映像出力信号の入力元を変更します。 System Type -> TI OMAP Implementations -> OMAP multiplexing support[*] 2.カメラドライバを組み込みます。 Device Drivers -> Multimedia support -> Video capture adapters -> Encoders/decoders and other helper chips -> CLI6010 ISP driver[*] boot.scr の書き換え †こちらにあるboot.src の
omapfb.mode=dvi:1024x768MR-24@60 omapdss.def_disp=lcd cli6010.enable=0' を 動画撮影に使用したアプリケーションのソースファイルを添付します。 今回撮影した画像を添付します。 Keisuke Koike
|