Armadilloフォーラム

Armadillo-IoT A6:cdc-acmによるUSB通信について

sho_oikawa

2021年7月15日 16時51分

お世話になっております。
及川と申します。

Armadillo-840のカーネルコンフィグの際に、cdc-acmの部分をのようにして[cdc-acm.ko]を用意し、
insmod、rmmodコマンドを用いて仮に対象デバイスが動作停止に陥ってもリブートのような
処理を行っていましたが、IoT A6ではを選択できませんでした。
上記の処理は今回不可でしょうか。

また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、
接続可能かわかっておりません。
今回はどのようなデバイス名のものを用いればよいでしょうか。
お教え頂ければ幸いです。

以上、よろしくお願いします。

コメント

投稿した際に山括弧で括られた箇所が見えなくなってしまっていたので
一部インラインで追記します。

> お世話になっております。
> 及川と申します。
>
> Armadillo-840のカーネルコンフィグの際に、cdc-acmの部分を[M](本来山括弧で括る)のようにして[cdc-acm.ko]を用意し、
> insmod、rmmodコマンドを用いて仮に対象デバイスが動作停止に陥ってもリブートのような
> 処理を行っていましたが、IoT A6では[M](本来山括弧で括る)を選択できませんでした。
> 上記の処理は今回不可でしょうか。
>
> また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
> 以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、
> 接続可能かわかっておりません。
> 今回はどのようなデバイス名のものを用いればよいでしょうか。
> お教え頂ければ幸いです。
>
> 以上、よろしくお願いします。

アットマークテクノの古賀です。

及川さん:
>投稿した際に山括弧で括られた箇所が見えなくなってしまっていたので
>一部インラインで追記します。

>>Armadillo-840のカーネルコンフィグの際に、cdc-acmの部分を[M](本来山括弧で括る)のようにして[cdc-acm.ko]を用意し、
>>insmod、rmmodコマンドを用いて仮に対象デバイスが動作停止に陥ってもリブートのような
>>処理を行っていましたが、IoT A6では[M](本来山括弧で括る)を選択できませんでした。
>>上記の処理は今回不可でしょうか。

menuconfig のトップ画面で
Enable loadable module support
を選択して下さいませ。これで、cdc-acm を 'M' に指定できるようになります。

以上、取り急ぎ一点コメントです。

及川です。

古賀様
返答ありがとうございます。

モジュールでのビルド後、cdc-acm.koとして取りだし、
insmodコマンドで実行することで明示的にロードできました。
(以前と比較して、rmmod や modprobeのどちらでもアンロード
及び強制アンロードができないというところではありますが。。。)

因みにcdc-acm通信に用いるデバイス名称はどうなるでしょうか。
以前は[insmod]にてロードした際に[/dev/ttyACM0]が使えるようになったように
画面表示がありましたが、今回はinsmod後に特に表示はなく、
使用可能な[/dev/]以下のファイル数にも変化がありませんでした。

以上、よろしくお願いします。

> アットマークテクノの古賀です。
>
> menuconfig のトップ画面で
> Enable loadable module support
> を選択して下さいませ。これで、cdc-acm を 'M' に指定できるようになります。
>
> 以上、取り急ぎ一点コメントです。
>

アットマークテクノの古賀です。

及川さん:
>因みにcdc-acm通信に用いるデバイス名称はどうなるでしょうか。
>以前は[insmod]にてロードした際に[/dev/ttyACM0]が使えるようになったように
>画面表示がありましたが、今回はinsmod後に特に表示はなく、
>使用可能な[/dev/]以下のファイル数にも変化がありませんでした。

ごめんなさい。質問を、ちゃんと見ていませんでした。

及川さん(2021年7月15日 16時51分):
>Armadillo-840のカーネルコンフィグの際に、cdc-acmの部分をのようにして[cdc-acm.ko]を用意し、

>また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
>以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、

ということでしたが、Armadillo-840 の時に、どう接続していらしたかと、Armadillo-IoT A6 では、どう接続していらっしゃるのかを、各々のマニュアル記載のインタフェース名で教えて頂けますか。
 https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…
 https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…

お手数をかけますが、どうぞ宜しくお願いします。

及川です。

古賀様、返答ありがとうございます。

Armadillo-840mでしたので、USB通信時に使用していたのは
4.4.3の資料でいうところのUSBマウス、キーボードとなります。
回路的には[A1_DM_1]と記載されているようです。

IoT A6については図4.17のUSB部分となります。(特に接続、番号指定なし)

以上、よろしくお願いします。

> アットマークテクノの古賀です。
> 及川さん(2021年7月15日 16時51分):
> >Armadillo-840のカーネルコンフィグの際に、cdc-acmの部分をのようにして[cdc-acm.ko]を用意し、
> …
> >また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
> >以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、
>
> ということでしたが、Armadillo-840 の時に、どう接続していらしたかと、Armadillo-IoT A6 では、どう接続していらっしゃるのかを、各々のマニュアル記載のインタフェース名で教えて頂けますか。
>  https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…
>  https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
>
> お手数をかけますが、どうぞ宜しくお願いします。
>

アットマークテクノの古賀です。

及川さん:
>Armadillo-840mでしたので、USB通信時に使用していたのは
>4.4.3の資料でいうところのUSBマウス、キーボードとなります。
>回路的には[A1_DM_1]と記載されているようです。
>
>IoT A6については図4.17のUSB部分となります。(特に接続、番号指定なし)

「図4.17のUSB部分」とおっしゃっているのは、IoT A6 のマニュアルの「4.6 インターフェイスレイアウト」記載の、CON5 の USB コネクタという認識で、合っているでしょうか?

及川さん(2021年7月15日 16時51分):
>また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
>以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、

これについて、二点質問です。

1.) お使いの USB-USB コネクタの、製品名・機種名が分かりましたら、教えて頂けますか。

2.) お使いの USB-USB コネクタの、IoT A6 に接続していらっしゃる方のコネクタを、ATDE が起動している状態の PC に接続した場合、ATED の Linux では認識するでしょうか?
  認識する場合、/var/log/messages の内容か lsusb の出力を見るなどして、VID と PID が分かりましたら、教えて下さい。

及川です。

古賀様、回答ありがとうございます。

> 「図4.17のUSB部分」とおっしゃっているのは、IoT A6 のマニュアルの「4.6 インターフェイスレイアウト」記載の、CON5 の USB コネクタという認識で、合っているでしょうか?

はい、その認識で合っております。

> 及川さん(2021年7月15日 16時51分):
> >また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
> >以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、
>
> これについて、二点質問です。
>
> 1.) お使いの USB-USB コネクタの、製品名・機種名が分かりましたら、教えて頂けますか。

使用しているコネクタの製品名などはわかりませんでした。
USB A-A オスオスケーブルで、ケーブルに記載されている表示としては[28AWG/1P+20AWG/2C]がありました。

> 2.) お使いの USB-USB コネクタの、IoT A6 に接続していらっしゃる方のコネクタを、ATDE が起動している状態の PC に接続した場合、ATED の Linux では認識するでしょうか?
>   認識する場合、/var/log/messages の内容か lsusb の出力を見るなどして、VID と PID が分かりましたら、教えて下さい。

USBケーブルについて認識はしていないようです。

Armadillo, ATDEにて認識するケーブルを用意し、[insmod]でcdc-acm.koを有効にすれば
[/dev/ttyACM0]といった通信口が表示されるのでしょうか。
最終的にはその口でUSB(Armadillo)-USB(他製品)間のシリアル通信を行うようにしたいと
考えております。

以上、よろしくお願いします。

アットマークテクノの古賀です。

及川さん:
>>「図4.17のUSB部分」とおっしゃっているのは、IoT A6 のマニュアルの「4.6 インターフェイスレイアウト」記載の、CON5 の USB コネクタという認識で、合っているでしょうか?
>
>はい、その認識で合っております。

了解しました。以下、引用の順序が前後しますが、ご容赦下さい。

>Armadillo, ATDEにて認識するケーブルを用意し、[insmod]でcdc-acm.koを有効にすれば
>[/dev/ttyACM0]といった通信口が表示されるのでしょうか。

そのようなケーブルが実際にあるのかどうかは不明ですが、少なくとも、USB CDC-ACM デバイスクラスとして振舞う USB デバイスを、IoT A6 の CON5 USB コネクタに接続すれば、/dev/ttyACM0 が出現します。

以下は、LTE モジュールの評価ボードを IoT A6 に接続した場合のログです:

----------------------ここから----------------------
root@armadillo:~#
[ 181.659902] usb 2-1: new high-speed USB device number 4 using ci_hdrc
[ 182.006315] cdc_ether 2-1:1.0 usb0: register 'cdc_ether' at usb-ci_hdrc.1-1, CDC Ethernet Device, 02:10:81:72:08:50
[ 182.029964] cdc_acm 2-1:1.2: ttyACM0: USB ACM device

root@armadillo:~# ls /dev/ttyA*
/dev/ttyACM0
----------------------ここまで----------------------

上のログを見ると、IoT A6 のUSB ホストドライバが CDC-ACM クラスのデバイスが接続されたことを検出し、その結果、/dev/ttyACM0 が出現しています。このデバイスとの接続を切り離すと、/dev/ttyACM0 は消えます。

>>>また、通常のカーネルでUSB-USBコネクタでPCと繋いでも、デフォルトの状態でも
>>>以前用いていた[/dev/ttyACM0]のようなデバイス名が表示されていないこともあり、
>>
>>これについて、二点質問です。
>>
>>1.) お使いの USB-USB コネクタの、製品名・機種名が分かりましたら、教えて頂けますか。
>
>使用しているコネクタの製品名などはわかりませんでした。
>USB A-A オスオスケーブルで、ケーブルに記載されている表示としては[28AWG/1P+20AWG/2C]がありました。

型番を見ると、このケーブルのようですね:
 https://retrade.online/index.php?id_product=14166&controller=product

以下のケーブルも、同じく両側とも Type-A オスのコネクタのケーブルですが、これを使っても同じ結果(認識されない)になると思われます。
 https://www.askul.co.jp/p/A685027/
このページの、「商品仕様」の表の「その他3」から「その他4」にかけて、次の記述がありますが、この記述の通りだと思います:

----------------------ここから----------------------
※USBの規格には、USBAオス-USBAオスケーブルの規格はありません。本ケーブルは特殊な規格になりますので、ご使用前に、各機器のご使用方法を確認の上ご利用ください。
----------------------ここまで----------------------

>>2.) お使いの USB-USB コネクタの、IoT A6 に接続していらっしゃる方のコネクタを、ATDE が起動している状態の PC に接続した場合、ATED の Linux では認識するでしょうか?
>>  認識する場合、/var/log/messages の内容か lsusb の出力を見るなどして、VID と PID が分かりましたら、教えて下さい。
>
>USBケーブルについて認識はしていないようです。

回答有難うございました。追加で、二点質問です。

3.) Armadillo-840m での接続の際に使っていらした USB ケーブルは、IoT A6 での接続に使っていらっしゃるものと同じでしょうか?つまり、PC および USB ケーブルが同じで、違いは、PC と USB ケーブルで接続するのが Armadillo-840m か IoT A6 かどうかだけでしょうか。

4.) Armadillo-840m と PC を接続した場合、ATDE で「取り外し可能デバイス」の一覧を表示すると、何が表示されるでしょうか?

>最終的にはその口でUSB(Armadillo)-USB(他製品)間のシリアル通信を行うようにしたいと
>考えております。

USB-Serial デバイス、つまり USB CDC デバイスクラスや USB CDC-ACM デバイスクラスとして振舞うデバイスであれば、問題ありません。それらのデバイスを接続すると、/dev/ttyUSB0 や /dev/ttyACM0 が出現し、それらのデバイスファイルを通じて対向デバイスとシリアル通信できます。

お世話になっております。
及川です。

古賀様、返答ありがとうございます。

> そのようなケーブルが実際にあるのかどうかは不明ですが、少なくとも、USB CDC-ACM デバイスクラスとして振舞う USB デバイスを、IoT A6 の CON5 USB コネクタに接続すれば、/dev/ttyACM0 が出現します。

デバイスが接続されている間のみ出現する、ということで承知しました。

> 3.) Armadillo-840m での接続の際に使っていらした USB ケーブルは、IoT A6 での接続に使っていらっしゃるものと同じでしょうか?つまり、PC および USB ケーブルが同じで、違いは、PC と USB ケーブルで接続するのが Armadillo-840m か IoT A6 かどうかだけでしょうか。

Armadillo-840mの際にはケーブルでの接続を行っていません。
ArmadilloのUSB部(1, 3pin)とマイコンのUSBの口を直接線でつないでおりました。
直接線で接続している状態でinsmodを実行したら対象の個所にて[/dev/ttyACM0]を使用できました。

> 4.) Armadillo-840m と PC を接続した場合、ATDE で「取り外し可能デバイス」の一覧を表示すると、何が表示されるでしょうか?
>
> >最終的にはその口でUSB(Armadillo)-USB(他製品)間のシリアル通信を行うようにしたいと
> >考えております。
>
> USB-Serial デバイス、つまり USB CDC デバイスクラスや USB CDC-ACM デバイスクラスとして振舞うデバイスであれば、問題ありません。それらのデバイスを接続すると、/dev/ttyUSB0 や /dev/ttyACM0 が出現し、それらのデバイスファイルを通じて対向デバイスとシリアル通信できます。

少なくとも今回使用していたUSBのオス-オスコネクタはPCのデータやり取りができないようですので、
リンクケーブル?というPC-PC間でもデータのやり取りができるもので再度試してみたいと思います。

アットマークテクノの古賀です。

及川さん:
>>3.) Armadillo-840m での接続の際に使っていらした USB ケーブルは、IoT A6 での接続に使っていらっしゃるものと同じでしょうか?つまり、PC および USB ケーブルが同じで、違いは、PC と USB ケーブルで接続するのが Armadillo-840m か IoT A6 かどうかだけでしょうか。
>
>Armadillo-840mの際にはケーブルでの接続を行っていません。
>ArmadilloのUSB部(1, 3pin)とマイコンのUSBの口を直接線でつないでおりました。
>直接線で接続している状態でinsmodを実行したら対象の個所にて[/dev/ttyACM0]を使用できました。

了解しました。ということは、マイコンが USB CDC-ACM クラスの USB デバイスとして振る舞うようになっていたのでしょう。
そのマイコンの USB の口が、Mini-B もしくは Micro-B であれば、Type A <-> Mini-B ないし Type-A <-> Micro-B のケーブルを使って IoT A6 と接続すれば、IoT A6 からは、マイコンに対して /dev/ttyACM0 が割り当てられるのではないかと思います。

>>4.) Armadillo-840m と PC を接続した場合、ATDE で「取り外し可能デバイス」の一覧を表示すると、何が表示されるでしょうか?
>>
>>>最終的にはその口でUSB(Armadillo)-USB(他製品)間のシリアル通信を行うようにしたいと
>>>考えております。
>>
>>USB-Serial デバイス、つまり USB CDC デバイスクラスや USB CDC-ACM デバイスクラスとして振舞うデバイスであれば、問題ありません。それらのデバイスを接続すると、/dev/ttyUSB0 や /dev/ttyACM0 が出現し、それらのデバイスファイルを通じて対向デバイスとシリアル通信できます。
>
>少なくとも今回使用していたUSBのオス-オスコネクタはPCのデータやり取りができないようですので、

はい。お使いの USB ケーブルが、Type A コネクタを両端に備えただけのものであれば、コネクタを挿す二つの装置(PC や IoT A6)のうちどちらか一方が、USB デバイスとして振舞わなければいけません。ですが、そうはできないので、データのやり取りは、できません。

>リンクケーブル?というPC-PC間でもデータのやり取りができるもので再度試してみたいと思います。

この手のケーブルのことをおっしゃっているのだと思いますが、専用のデバイスドライバが必要ですので、ARM Linux 用のドライバが提供されていない限りは(※おそらく、提供されていないと思います)、そのケーブルを使っても駄目だと思います:
 https://www.sanwa.co.jp/product/syohin.asp?code=KB-USB-LINK3K

簡単なのは、USB-Serial ケーブルを二つと、シリアルクロスケーブルを一つ使い、

 PC <- USB-Serial -><- シリアルクロスケーブル -><- USB-Serial -> IoT A6

という接続でつなぐことではないかと思います。この場合、IoT A6 と PC から見ると、各々に接続された USB-Serial ケーブルの内蔵 USB-Serial 変換チップが USB CDC クラスのデバイスとして見えますから、IoT A6 からは、/dev/ttyUSB0 が割り当てられて、/dev/ttyUSB0 を介して PC とシリアル通信できるでしょう。

お世話になっております。
及川です。

古賀様、返答いただきありがとうございます。

>
> >リンクケーブル?というPC-PC間でもデータのやり取りができるもので再度試してみたいと思います。
>
> この手のケーブルのことをおっしゃっているのだと思いますが、専用のデバイスドライバが必要ですので、ARM Linux 用のドライバが提供されていない限りは(※おそらく、提供されていないと思います)、そのケーブルを使っても駄目だと思います:
>  https://www.sanwa.co.jp/product/syohin.asp?code=KB-USB-LINK3K
>
> 簡単なのは、USB-Serial ケーブルを二つと、シリアルクロスケーブルを一つ使い、
>
>  PC <- USB-Serial -><- シリアルクロスケーブル -><- USB-Serial -> IoT A6
>
> という接続でつなぐことではないかと思います。この場合、IoT A6 と PC から見ると、各々に接続された USB-Serial ケーブルの内蔵 USB-Serial 変換チップが USB CDC クラスのデバイスとして見えますから、IoT A6 からは、/dev/ttyUSB0 が割り当てられて、/dev/ttyUSB0 を介して PC とシリアル通信できるでしょう。

IoT - [ USB-RS232変換ケーブル ] - [ コネクタ ] - [ RS232-USB変換ケーブル ] - PC
となるように変換を試みたところ、Armadillo側のデバイスとして[/dev/ttyUSB0]を表示することができました。
アドバイス頂き、本当にありがとうございます。
あとはこの内容に対してopen, writeなどの関数を用いてシリアル通信を試みてみたいと思います。