Armadilloフォーラム

USB_OTG2にUVC対応のWebカメラを接続するDeviceTreeはどれでしょうか

toyoqu

2020年2月14日 2時04分

豊久と申します。

Armadillo-X1の拡張コネクタCON8を使用して、独自ボードを作成接続しようとしています。

USB_OTG2にUVC対応のWebカメラを接続して使いたいのですが
A-x1評価用拡張ボードで使っている下記のdtsを
armadillo_x1.dts 内にインクルード記述してビルドすればWebカメラは使えるようになるでしょうか?

#include "armadillo_x1-extboard-eva01-usbotg2-host.dtsi"

コメント

> 佐藤です。
>
> armadillo_x1-usbotg2.dts を参考にしてみてください。

armadillo_x1-usbotg2.dtsを元に
「Armadillo−X1 UART1/USBポート初期化について」
「拡張ボードUSBポート追加方法」
を参考に真似をしてdtsを作ってみましたがvideo0と認識しません。

dtsがダメなのか、ボードがダメなのか判りません。
起動時のログにはエラーがでています。
分かる方お力をお貸しください。

imx7d-pinctrl 30330000.iomuxc: pin MX7D_PAD_SD2_RESET_B already requested by 30330000.iomuxc; cannot claim for 30b20000.usb
imx7d-pinctrl 30330000.iomuxc: pin-109 (30b20000.usb) status -22
imx7d-pinctrl 30330000.iomuxc: could not request pin 109 (MX7D_PAD_SD2_RESET_B) from group usbotg2grp on device 30330000.iomuxc
imx_usb 30b20000.usb: Error applying setting, reverse things back
imx_usb: probe of 30b20000.usb failed with error -22

USB_OTG2_VBUS: disabling

ファイル ファイルの説明
armadillo_x1-usbotg2.dts
error_otg2_log.txt 起動時ログ

佐藤です。

> imx7d-pinctrl 30330000.iomuxc: pin MX7D_PAD_SD2_RESET_B already requested by 30330000.iomuxc; cannot claim for 30b20000.usb
> imx7d-pinctrl 30330000.iomuxc: pin-109 (30b20000.usb) status -22
> imx7d-pinctrl 30330000.iomuxc: could not request pin 109 (MX7D_PAD_SD2_RESET_B) from group usbotg2grp on device 30330000.iomuxc
> imx_usb 30b20000.usb: Error applying setting, reverse things back
> imx_usb: probe of 30b20000.usb failed with error -22
MX7D_PAD_SD2_RESET_B ピンの設定が重複しているようにみえます。

dtb ファイルを作成したときのビルド手順を教えてください。
また、実際に実機上に書き込まれている(このエラーが出た) dtb ファイルをアップロードしてもらえますでしょうか。

佐藤様 有難うございます。

USB_OTG2にカメラを接続する為に armadillo_x1-usbotg2.dts を修正した事と、センサー入出力の為のGPIOを追加しています。
GPIOの追加は armadillo_x1.dts にしています。GPIOを使ってのセンサーとの入出力は出来ています。

>MX7D_PAD_SD2_RESET_B ピンの設定が重複しているようにみえます。
はarmadillo_x1-usbotg2.dts の中でコメントにしているのですがこれが生きていたらarmadillo_x1.dtsと重複メッセージが出ますか。

&iomuxc {
x1_ext {
pinctrl_usbotg2: usbotg2grp {
fsl,pins = <
/* MX7D_PAD_SD2_RESET_B__USB_OTG2_ID 0x00 */
MX7D_PAD_LCD_DATA23__GPIO3_IO28 0x00
>;
};
};
};

うろ覚えになるのですが、コメントにする前のuImageとコメントにした後のarmadillo_x1-usbotg2.dtbの
2ファイルを実機で使用しているかもしれません。
(今は手元に実機がないので実機の中の2ファイルを確認できません)

ATDE7の中にあるarmadillo_x1-usbotg2.dtbをアップします

あともう一つ思いだしたのですが
USB OTGの章 21.7.2.3. 動作確認 の表示で

正しくDTBの指定ができた場合は、起動ログに次のような内容が表示されます。
ci_hdrc ci_hdrc.2: Device No Response
:(省略)
USB_OTG2_VBUS: 5000 mV

最後の「USB_OTG2_VBUS: 5000 mV」が表示されなかったような気がします。

ファイル ファイルの説明
armadillo_x1-usbotg2.dtb
armadillo_x1.dts GPIOを追加している

ビルド手順.txt が文字化けしているので再度投稿します。

ATDE7のVMware環境

「Armadillo-X1製品マニュアル10.2. Linuxカーネルをビルドする」を参考にして

最新のではないです。2018年秋にダウンロードしました。

展開
linux-4.9-x1-at2
initramfs_x1-v1.1.0.cpio.gz

中身GPIOの部分追加
linux-4.9-x1-at2/arch/arm/boot/dts/armadillo_x1.dts

x1_ext {
pinctrl_ext_hog_1: ext_hoggrp-1 {
fsl,pins = <
MX7D_PAD_SD2_DATA3__GPIO5_IO17 0x40000000 /* OUT: SION */
MX7D_PAD_SD2_DATA2__GPIO5_IO16 0x40000000 /* OUT: SION */
MX7D_PAD_SD2_DATA1__GPIO5_IO15 0x40000000 /* OUT: SION */
MX7D_PAD_SD2_DATA0__GPIO5_IO14 0x40000000 /* OUT: SION */
MX7D_PAD_SD2_CMD__GPIO5_IO13 0x00 /* IN: No need */
MX7D_PAD_SD2_CLK__GPIO5_IO12 0x00 /* IN: No need */
MX7D_PAD_SD2_RESET_B__GPIO5_IO11 0x00 /* IN: No need */
>;
};
};

中身修正
linux-4.9-x1-at2/arch/arm/boot/dts/armadillo_x1-usbotg2.dts

initramfsアーカイブへのシンボリックリンク作成
ln -s ../initramfs_x1-[version].cpio.gz initramfs_x1.cpio.gz

コンフィギュレーション
make ARCH=arm x1_defconfig

make ARCH=arm menuconfig
(変更はしない)

ビルド
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage

イメージファイルとDTB作成される
linux-4.9-x1-at2/arch/arm/boot/dts/armadillo_x1-usbotg2.dtb
linux-4.9-x1-at2/arch/arm/boot/uImage

11.2. 特定のイメージファイルだけを書き換える
11.2.2
11.2.3
参考にしてA-x1実機に2ファイルをコピーした
uImage
armadillo_x1-usbotg2.dtb

HOW TO 21.7.2. USB OTGを参考にして
A-x1を保守モードにして起動
=> setenv fdt_file armadillo_x1-usbotg2.dtb
=> saveenv

佐藤です。

> >MX7D_PAD_SD2_RESET_B ピンの設定が重複しているようにみえます。
> はarmadillo_x1-usbotg2.dts の中でコメントにしているのですがこれが生きていたらarmadillo_x1.dtsと重複メッセージが出ますか。
出ると思われます。

> ATDE7の中にあるarmadillo_x1-usbotg2.dtbをアップします
こちらは問題なさそうに見えますので、実機上に正しくファイルが配置されていないのかもしれません。

また、 fdtdump コマンドを使うと dtb から dts に戻せるので、実機上の dtb が正しいかどうか確認できると思います。
ピン名などはすべて数値になってしまっているので imx7d-pinfunc.h ファイルと照らし合わせる必要があります。

$ fdtdump armadillo_x1-usbotg2.dtb > tmp.dts

佐藤様

昨日、実機にuImageとdtbの2ファイルを再度コピーしたところ重複メッセージは表示されず起動しました。
そしてOTG2のUSBに接続したUVCカメラの稼働が出来ました。
有難うございました。助かりました。
豊久