[[labs.beatcraft.com]]
#contents

*  BeagleBoard-xm with bc10カメラモジュール [#n3cb8ca2]
BeagleBoard-xmにbc10のカメラモジュールを接続し動かしました。
BeagleBoard-xm に bc10向けrowboatカーネルをポーティングしました。~
bc10向けrowboatカーネルのソースコード入手方法は[[こちら>http://labs.beatcraft.com/ja/index.php?bc10%2Fkernel-2.6.32#oa8705d8]]を参考にしてください。 


**  カーネルソースの書き換え [#p8ee5d94]

***   arch/arm/mach-omap2/board-omap3bc10.c の書き換え [#c4be6a2e]

・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で異なっています。~
DM37xの Pad Configuration レジスタのMUXフィールドを変更することで、
マルチプレクサの設定が変わり、映像出力信号の入力元が切り替わります。


***     driver/media/video/isp/isp.c の書き換え [#o13a78e5]
・カメラからのデータ読み込みタイミングとデータの順序を変更します。

        @@ -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 [#i01c78a6]
・カメラから受信する色情報の設定を変更します。

         @@ -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はブリッジ入力の際、ポジティブエッジで画素データを取得しなければなりません。~
一方 BeagleBoard はネガティブエッジで画素データを取得しなければなりません。
異なるエッジでデータを取得した場合、bc10はノイズが混じます。~
BeagleBoardはデータの順序が入れ替わりノイズも発生します。
カメラは画素データがポジティブエッジに同期する設定となっています。 
//ノイズのタイミング考察
// BeagleBoardで起こっていることの考察

・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がメモリへの画像の格納を終了しないうちに、バッファの切り替えを行ってしまいます。~
これは、CCDC_PCR レジスタの ENABLE フィールドがキャプチャリング中にアサートされておらず、
CCDCの状態( busyかどうか )が取得できないことが原因です。
//未修正の理由

**  カーネルコンフィギュレーションの変更 [#vd1afa6b]

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 の書き換え [#e4106340]
[[こちら>http://labs.beatcraft.com/ja/index.php?cmd=read&page=bc10%2Fprebuilt-20110127&word=dvi#g1d02e0d]]にあるboot.src の
omapfb.mode=dvi:1024x768MR-24@60 omapdss.def_disp=lcd cli6010.enable=0' を~
omapfb.mode=dvi:640x480MR-24@60 omapdss.def_disp=lcd cli6010.enable=1' に
書き換えてください。


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS