Armadilloフォーラム

CP210Xを使用しているUSBシリアルが動かない

chosan

2023年8月18日 16時59分

cuやminicomで試してみたのですが、CP210Xを使用しているUSBシリアルで送受信ができないのです。
デバイスとしては認識しているのですが、どこから調べればよいでしょうか?

FTDI系のUSBシリアルは送受信ができました。

ハードウェア AGX3142
状態はこんな感じです。

root@armadillo:~# uname -a
Linux armadillo 4.9.133-at30 #2 SMP PREEMPT Tue Jun 27 13:04:36 JST 2023 armv7l GNU/Linux
 
root@armadillo:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
 
root@armadillo:~# lsusb
Bus 002 Device 003: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 002 Device 002: ID 0424:3503 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
 
root@armadillo:~# dmesg|grep USB
[    0.324968] GPIO line 85 (EC25_USB_VBUS) hogged as output/low
[    1.707684] pegasus: v0.9.3 (2013/04/25), Pegasus/Pegasus II USB Ethernet driver
[    1.776546] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.793537] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[    1.819480] usbserial: USB Serial support registered for generic
[    1.828562] usbserial: USB Serial support registered for cp210x
[    1.837724] usbserial: USB Serial support registered for FTDI USB Serial Device
[    1.848102] usbserial: USB Serial support registered for GSM modem (1-port)
[    1.858129] usbserial: USB Serial support registered for Sierra USB modem
[    1.868940] usbserial: USB Serial support registered for carelink
[    1.873788] usbserial: USB Serial support registered for zio
[    1.878190] usbserial: USB Serial support registered for funsoft
[    1.882958] usbserial: USB Serial support registered for flashloader
[    1.888049] usbserial: USB Serial support registered for google
[    1.892725] usbserial: USB Serial support registered for libtransistor
[    1.897987] usbserial: USB Serial support registered for vivopay
[    1.902748] usbserial: USB Serial support registered for moto_modem
[    1.907752] usbserial: USB Serial support registered for motorola_tetra
[    1.913122] usbserial: USB Serial support registered for novatel_gps
[    1.918211] usbserial: USB Serial support registered for hp4x
[    1.922712] usbserial: USB Serial support registered for suunto
[    1.927369] usbserial: USB Serial support registered for siemens_mpi
[    2.015848] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
[    2.051660] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
[    2.056595] hub 1-0:1.0: USB hub found
[    2.074197] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2
[    2.101653] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
[    2.106540] hub 2-0:1.0: USB hub found
[    2.228531] USB Video Class driver (1.1.1)
[    2.421656] usb 1-1: new full-speed USB device number 2 using ci_hdrc
[    2.471649] usb 2-1: new high-speed USB device number 2 using ci_hdrc
[    2.635587] usb 1-1: cp210x converter now attached to ttyUSB0
[    2.638090] usbhid: USB HID core driver
[    2.687101] hub 2-1:1.0: USB hub found
[   15.443632] usb 2-1.2: new high-speed USB device number 3 using ci_hdrc
[   15.620474] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   15.700767] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   15.786245] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
[   15.866275] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB4
コメント

溝渕です。

> cuやminicomで試してみたのですが、CP210Xを使用しているUSBシリアルで送受信ができないのです。
> デバイスとしては認識しているのですが、どこから調べればよいでしょうか?

まず、どのように送受信できないか教えてください。

> [ 2.635587] usb 1-1: cp210x converter now attached to ttyUSB0

と、ttyUSB0にアタッチはされているようです。

送受信できないと判断した操作を教えてもらえますか?

>送受信できないと判断した操作を教えてもらえますか?

2種類あります。
①CP210Xを使っているUSBシリアルのTXとRXをつなげた状態
②CP210Xを使っている弊社の機器をUSBにつなげて、コマンドの受信と応答があるかの確認
以前のG3であれば問題なく動いていました。
通信速度は①が115200bps、②は19200bpsです。

動いていたころはこんな感じです。CP210Xをイネーブルにしてカーネルを再コンパイルしています。
Linux LP1010 4.9.133-at15 #3 SMP PREEMPT Wed Jul 8 14:48:11 JST 2020 armv7l GNU/Linux
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster

他に試したことは、カーネルソースを見てみるとat15の頃からRTSCTS周りが変わっているようなので、
ハードウェアフロー制御をオフにしてcuやminicomで試したのですが送受信できませんでした。

溝渕です。

ご回答ありがとうございます。

> >送受信できないと判断した操作を教えてもらえますか?
>
> 2種類あります。
> ①CP210Xを使っているUSBシリアルのTXとRXをつなげた状態

loopbackしたが動作しなかったという理解で良いでしょうか?

次のようにコマンドを実行しても、コンソールに"aaa"と表示されませんか?

[armadillo]# cat ttyUSB0 &
[armadillo]# echo aaa > ttyUSB0

また、次のコマンドの出力を教えてください。

stty -a -F /dev/ttyUSB0

> 動いていたころはこんな感じです。CP210Xをイネーブルにしてカーネルを再コンパイルしています。
> Linux LP1010 4.9.133-at15 #3 SMP PREEMPT Wed Jul 8 14:48:11 JST 2020 armv7l GNU/Linux
> VERSION_ID="10"
> VERSION="10 (buster)"
> VERSION_CODENAME=buster
>
> 他に試したことは、カーネルソースを見てみるとat15の頃からRTSCTS周りが変わっているようなので、
> ハードウェアフロー制御をオフにしてcuやminicomで試したのですが送受信できませんでした。

linux-4.9-at15では動いていたが、linux-4.9-at30で動かなくなったという理解で良いでしょうか?

CP210Xへの修正は、linux-4.9-at25とlinux-4.9-at26の間でのみ行なわれています。可能であれば、linux-4.9-at25とlinux-4.9-at26でも動作確認していただけますか?

こんな感じでした。コンソールに"aaa"と表示されませんでした。at25とat26は試してみます。

root@armadillo:~# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3  /dev/ttyUSB4
 
root@armadillo:~# stty -a -F /dev/ttyUSB0
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc
 
root@armadillo:~# cd /dev
root@armadillo:/dev# cat ttyUSB0 &
[3] 2693
root@armadillo:/dev# echo aaa > ttyUSB0
root@armadillo:/dev#

溝渕です。

> こんな感じでした。コンソールに"aaa"と表示されませんでした。at25とat26は試してみます。

宜しくお願いします。

> root@armadillo:~# stty -a -F /dev/ttyUSB0
:(省略)
> -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts

ハードウェアフローが有効になっていますね。

[armadillo]# stty -F /dev/ttyUSB0 -crtscts

のように無効にするとどうなりますか?

試してみましたが、戻ってこないのでctrl+cで止めて、-aつけてみましたが、こんな感じです。

root@armadillo:~# stty -F /dev/ttyUSB0 -crtscts
^C
root@armadillo:~# stty -a -F /dev/ttyUSB0 -crtscts
stty: when specifying an output style, modes may not be set
root@armadillo:~#

溝渕です。

> 試してみましたが、戻ってこないのでctrl+cで止めて、-aつけてみましたが、こんな感じです。

了解です。ご確認ありがとうございます。

at25とat26での動作確認をお願いします。

at26を入れて再起動したらCP210Xで送受信が動きました。とりあえず、このカーネルを使わせていただきます。

ちなみに下記コマンドも応答がありました。

root@armadillo:~# stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost
-isig -icanon -iexten -echo
root@armadillo:~#

溝渕です。

> at26を入れて再起動したらCP210Xで送受信が動きました。とりあえず、このカーネルを使わせていただきます。

at26と現在最新のat30は、CP210Xドライバに関しては完全に同じものです(at25とat26の間では異なります)。

なので、at26で動くという事は恐らくat30でも動くように思います。お時間ありましたら、at26で動いた手順と同じ手順でat30で動かしてみてください。

at26入れて送受信できたのは幻だったみたいです。
色々組み合わせてみましたが、送受信できないのは変わりません。

AT15のカーネルは、AT30のユーザーランドでは使えないのでしょうか?

抜き差しした後のcp210x.cのデバッグメッセージですが、なんで後からCRTSCTSをイネーブルにしてこようとするんですかね?

usb 1-1: new full-speed USB device number 6 using ci_hdrc
cp210x 1-1:1.0: cp210x converter detected
usb 1-1: cp210x converter now attached to ttyUSB8
cp210x ttyUSB8: cp210x_get_termios_port - baud rate = 115200
cp210x ttyUSB8: cp210x_get_termios_port - data bits = 8
cp210x ttyUSB8: cp210x_get_termios_port - parity = NONE
cp210x ttyUSB8: cp210x_get_termios_port - stop bits = 1
cp210x ttyUSB8: cp210x_get_termios_port - flow control = NONE
cp210x ttyUSB8: cp210x_change_speed - setting baud rate to 115200
cp210x ttyUSB8: cp210x_tiocmset_port - control = 0x0303
cp210x ttyUSB8: cp210x_set_termios - read ulControlHandshake=0x00000000, ulFlowReplace=0x00000000
cp210x ttyUSB8: cp210x_set_termios - flow control = CRTSCTS
cp210x ttyUSB8: cp210x_set_termios - write ulControlHandshake=0x00000009, ulFlowReplace=0x00000080

溝渕です。

> at26入れて送受信できたのは幻だったみたいです。
> 色々組み合わせてみましたが、送受信できないのは変わりません。

何を組み合わせたのでしょうか?

> AT15のカーネルは、AT30のユーザーランドでは使えないのでしょうか?

ユーザーランドのバージョンは"v20230726"のように日付になっています。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3…

「AT30のユーザーランド」は何を示していますか?

> 何を組み合わせたのでしょうか?
> ユーザーランドのバージョンは"v20230726"のように日付になっています。
> https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3…

調べたのですがユーザーランドのバージョン確認方法がわかりません。カーネルat30が入っていた出荷時のままです。

確認したことは、カーネルを変えながらの動作確認です。動作確認は教えていただいたsttyで状態確認と「cat ttyUSB0 &」と「echo aaa > ttyUSB0」です。
USBシリアルをつなげて送信と受信をループバックしています。このハードウェアはWindowsでは問題なく入力した文字が戻ってきます。
カーネルとDTBファイルは、https://download.atmark-techno.com/armadillo-iot-g3/image/からダウンロードしています
カーネルを変えたときは、再起動しています。

at30カーネル→認識したけど通信できず
at26カーネル→認識したけど通信できず
at25カーネル→CP210X認識せず
at25カーネル(CP210Xイネーブルして再コンパイル)→認識したけど通信できず
at15カーネル(CP210Xイネーブルして再コンパイル)→認識したけど通信できず

それぞれで、sttyを確認。
「stty -a -F /dev/ttyUSB0」で確認するとcrtsctsはイネーブル
「stty -F /dev/ttyUSB0 -crtscts」を実行するとコンソール入力に戻ってこない。
stty実行するとat15,at25だと「cp210x ttyUSB0: failed set request 0x7 status: -32」と表示される。

溝渕です。

> 調べたのですがユーザーランドのバージョン確認方法がわかりません。カーネルat30が入っていた出荷時のままです。

起動後に(簡単に)確認する方法はありません。もし書き換えを行った場合は、そのときに書き込んだバージョンを覚えておくのが良いと思います。

> at15カーネル(CP210Xイネーブルして再コンパイル)→認識したけど通信できず

以前、

> 動いていたころはこんな感じです。CP210Xをイネーブルにしてカーネルを再コンパイルしています。
> Linux LP1010 4.9.133-at15 #3 SMP PREEMPT Wed Jul 8 14:48:11 JST 2020 armv7l GNU/Linux
> VERSION_ID="10"
> VERSION="10 (buster)"
> VERSION_CODENAME=buster

と、動いていたと私は認識しているのですが合っていますか?

もし合っているなら、動いていたときと現在で何か環境に違いはありますか?

ユーザーランドが新しくなっているのでは?と思います。自分が書いたわけではないので確認しようがないです。
ユーザーランドに関しては、G3を購入した状態でapt update,apt upgradeするぐらいです。

最近購入したG3がat30になっていて、CP210Xを刺したら認識したので、今まで使っていたRubyとGemでserialport入れてプログラムを動かしたら応答がない、おかしいなぁ?となり、Rubyをやめてなるべく素のままで確認しよう、となってここまで来ました。

G3に期待するのはUSBシリアルがさくっと動けばいいだけなのですが、難しそうですね。
G1時代からずっと使ってきましたが、これは困った。

時間がかかるのが嫌だったのですが、古いユーザーランドを試してみます。
長く対応していただきましたが、ありがとうございました。

溝渕です。

なかなか進まずすみません...。

> ユーザーランドが新しくなっているのでは?と思います。自分が書いたわけではないので確認しようがないです。
> ユーザーランドに関しては、G3を購入した状態でapt update,apt upgradeするぐらいです。
>
> 最近購入したG3がat30になっていて、CP210Xを刺したら認識したので、今まで使っていたRubyとGemでserialport入れてプログラムを動かしたら応答がない、おかしいなぁ?となり、Rubyをやめてなるべく素のままで確認しよう、となってここまで来ました。

購入した状態でat15のときは動いていたが、購入した状態でat30になったら動かなくなったという事ですね。

https://armadillo.atmark-techno.com/news/20200629/software-update-aiotg3
から取得できるインストールディスクイメージを利用すると動きますか?
# USB_SERIAL_CP210Xが無効なので、Linuxカーネルはビルドする必要があります。

前回購入した時期を思い出して、下記のimgでリカバリして問題なくCP210X使えました。sttyみるとcrtsctsはディセーブルでした。
install_disk_sd_buster_20221026_iotg3_m1.img
カーネルがat25だったので、cp210xをイネーブルして再コンパイルしています。

at15で動いていたというか、購入したままのユーザーランドとの組み合わせがたまたま動いていたんでしょう。
at15自体はG2からG3に切り替わって色々試していた時の名残です。cp210x動けばいいやぐらいだったので。

リカバリは蓋を外してジャンパーピンをさす必要があるので、できればファイルの修正ぐらいでなんとかしたいところです。

溝渕です。

確認ありがとうございます。

> 前回購入した時期を思い出して、下記のimgでリカバリして問題なくCP210X使えました。sttyみるとcrtsctsはディセーブルでした。
> install_disk_sd_buster_20221026_iotg3_m1.img
> カーネルがat25だったので、cp210xをイネーブルして再コンパイルしています。

この状態で、最新のインストールディスクを使用すると、CP210Xが使えなくなったのですね。

今現在動く状態から、カーネルだけを最新にしてみてもらえますか?

それで動けばユーザーランドの差分を確認してみます。動かなければカーネルの差分を確認してみます。

> install_disk_sd_buster_20221026_iotg3_m1.img
でリカバリ後、「uImage-x1-v4.9-at30」と「armadillo_iotg_g3_m1-v4.9-at30.dtb」でカーネル書き換えし再起動してみました。

USBシリアルは認識し、応答も確認できました。
この時、sttyのcrtsctsはディセーブルでした。

catしてechoを実行するとコンソールに戻ってこないのですがechoバックはあったし、
minicom使って弊社の機器ともつながりましたので通信できたと判断しました。


root@armadillo:~# uname -a
Linux armadillo 4.9.133-at30 #2 SMP PREEMPT Tue Jun 27 13:04:36 JST 2023 armv7l GNU/Linux

root@armadillo:~# lsusb
Bus 002 Device 003: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 002 Device 002: ID 0424:3503 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@armadillo:~# stty -a -F /dev/ttyUSB0
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

root@armadillo:~# cat /dev/ttyUSB0 &
[1] 2640

root@armadillo:~# echo aaaa > /dev/ttyUSB0
root@armadillo:~# aaaa

aaaa


溝渕です。

確認ありがとうございます。ユーザーランドが挙動の違いの原因になっているようですね。確認するので少し時間をください。

> catしてechoを実行するとコンソールに戻ってこないのですがechoバックはあったし、
> minicom使って弊社の機器ともつながりましたので通信できたと判断しました。

これは、"-echo"となっているからと思います。

[armadillo]# stty -F /dev/ttyUSB0 echo

のようにすると、エコーバックされるようになると思います。

溝渕です。

ご利用のCP210XのUSBのVendor ID/Product IDですが、10c4/ea60だったりしませんか?

これは、以下のコマンドで確認できます。

[armadillo]# lsusb

もしそうであれば、Armadillo-IoT G3L用のパッケージ"brcm-patchram-plus"が悪さをしているかもしれません。

"brcm-patchram-plus"によってインストールされる、"/lib/udev/rules.d/77-ap6275p.rules"がhitし、tty deviceが使われてしまいます。

もし、上記に該当する場合は、最新のユーザーランドで起動した状態で、

[armadillo]# apt remove brcm-patchram-plus

とした後に再起動し、動作を確認してみてください。

横から失礼いたします。

こちらも同様の事象にてうまく認識されず悩んでいたところ、
brcm-patchram-plusをremoveしてみたら、正常に通信できるようになりました。
ありがとうございました。

3キャリア対応品を触ってて同じ現象になり、ここを見つけ、すっかり忘れていました。

apt remove brcm-patchram-plusで対応できました。
ログを残しておくのは大切ですね。

OSが"Debian GNU/Linux 12 (bookworm)"に変わったようで、すっかり忘れていたここを再発見し、apt remove brcm-patchram-plusしてみたところ、ttyCommModemが見えなくなってしまいました。

なのでapt remove -y brcm-patchram-plusをやめて、rm /lib/udev/rules.d/77-ap6275p.rulesで解決しました。
忘備録まで。

apt remove -y brcm-patchram-plusをやっておけば良さそうです。

ttyCommModemが見えなくなったというのは下記のメッセージがコンソールに表示されてしまうことを言っていて、
connection-recover.serviceを止めていたせいかもしれません。何か余計な設定をしてしまったかもしれないので様子見します。

[  583.175909] usb 2-1.2: new high-speed USB device number 7 using ci_hdrc
[  583.376103] usb 2-1.2: New USB device found, idVendor=2c7c, idProduct=0125, bcdDevice= 3.18
[  583.384519] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  583.392838] usb 2-1.2: Product: Android
nmcli device[  583.397879] usb 2-1.2: Manufacturer: Android
[  583.411850] option 2-1.2:1.0: GSM modem (1-port) converter detected
[  583.418849] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[  583.433124] option 2-1.2:1.1: GSM modem (1-port) converter detected
[  583.445079] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[  583.458102] option 2-1.2:1.2: GSM modem (1-port) converter detected
[  583.464962] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[  583.479695] option 2-1.2:1.3: GSM modem (1-port) converter detected
[  583.491643] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3