CH340 USB-シリアルデバイスでのシリアル番号の設定


9

http://playground.arduino.cc/Linux/Udevを読むと、FTDI USB-Serial EEPROMに書き込みを行って特定のSerialNumberを設定し、特定のnano /その他のarduinoを識別してそれを具体的に処理する方法があるようですUDEVで。

QinHeng Electronics HL-340 USB-シリアルアダプターを備えたナノスタイルのボードがあります。これは明らかにFTDIチップではないため、FTDIプログラマーは機能しません。誰もがこのチップで同じことをするための情報を見つけることができる代わりのユーティリティを知っていますか?

現在、デバイスは次のもので自身を識別しています。

[ 6850.608080] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 6850.701496] usb 2-1.2: New USB device found, idVendor=1a86, idProduct=7523
[ 6850.701505] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 6850.701510] usb 2-1.2: Product: USB2.0-Serial
[ 6850.702201] ch341 2-1.2:1.0: ch341-uart converter detected
[ 6850.704210] usb 2-1.2: ch341-uart converter now attached to ttyUSB0

取り付けられている特定のボードを識別できないため、これは本質的に役に立たない(2つ取り付けても、詳細は同じ)。



1
残念ながら、これは実際にはどちらの答えでもありません:質問(FTDIチップのように新しいシリアル番号を割り当てる方法があるかどうかは答えられないため)、または問題を解決します(udevシリアルとして) Leonardoのようなこれらすべてのボードは0なので、udevは同じコンピューターに接続された複数のボードを区別できません
jvc26

私のリンクは、各デバイスのudevルールの作成について説明している私の回答へのリンクです。
PhillyNJ 2014

1
中国語を読むことができる場合(できません)、このページが役立つ場合があります:wch.cn/products.php?page
Craig

3
残念ながら、@ Phil Valloneの問題は、udevを介してデバイスを識別する固有のシリアルがないことです。ユニークなデバイスを検出して識別するためには、それらを区別するためにユニークなものが必要です。これらのデバイスは同じiSerialを使用しているため、それらを比較することはできません。また、同じ製品IDとベンダーIDを共有しているため、差別化要因はありません...残念ながら、この問題は解決していません!
jvc26 14

回答:


3

CH340およびUARTファミリには、一意のIDを配置できるストレージはありません。これは、PL2303タイプの問題でもあります。私はこの問題の解決策を見つけようと努めてきました。まず簡単なのは、USBバス上でのデバイスの位置です。デバイスごとに一意になります。Linuxを使用している場合、各デバイスは/ dev / serial / by-pathの下にあります。/ dev / serial / by-idもありますが、最後に接続されたものを表示するため、このデバイスのエントリは1つだけです。FTDIチップにはそれぞれ固有のエントリがあります。安いチップはありませんが、それぞれ/ dev / serial / by-pathの下にエントリがあります。この位置とデバイス名は、再起動後も維持されます。USBデバイスに多くの変更を加える場合は、すべてのCH340デバイスを同じハブに接続し、それを接続します。デバイスは、ハブに接続されている順に列挙されます。この1ハブトリックはMacOSとWindowsでも機能し、同じ順序で表示されます。

より難しい方法-udevルール。FTDIなどの一意のIDを持つデバイスの場合、シリアル番号を確認してそのデバイスへのシンボリックリンクを作成するudevルールを設定できます。これは簡単です。

シリアル番号が同じかまったくないデバイスの場合は、はるかに複雑になります。次のようなudevルールを作成しました。

SUBSYSTEM == "tty"、ATTRS {product} == "USB2.0-Serial"、RUN + = "/ usr / local / bin / cheapduino.py%k"、ATTRS {idVendor} == "1a86"、ATTRS { idProduct} == "7523"、ENV {ID_MM_DEVICE_IGNORE} = "1"

デバイスが安いarduinoの製品とベンダーに一致すると、デバイスを引数としてスクリプト 'cheapduino.py'を実行します。たとえば、

cheapduino.py ttyUSB0

次に、cheapduinoスクリプトがシリアルでデバイスに接続し、文字列「ID」を送信すると、デバイスのソフトウェアがDEVID = THX1138などと応答します。次に、スクリプトは/ dev / ttyUSB0を指すシンボリックリンク/ dev / THX1138を作成します

この方法には多くの欠点があります。cheapduinoのソフトウェアが応答しない場合、スクリプトはタイムアウトする必要があります。また、これはudevのSYMLINK関数を使用していないため、切断時にデッドリンクをクリーンアップしませんが、再接続時にそれらを上書きします。すべての安価なDuinoは、ソフトウェアにこの機能があり、異なるデバイスIDが設定されている必要があります。時間がかかる非常に複雑なスクリプトを作成する場合を除き、スクリプトと同じボーレートを使用する必要があります。最後に、この方法は、ボーレートが高い場合よりもボーレートが低い場合の方がはるかにうまく機能します。タイミングの理由により、毎回成功しない場合があります。(cheapduinosは安いです!)9600は、数回試行した後に機能する115200よりもはるかに優れています。ただし、この方法ではすべてのCH340 Arduinoが同じ速度でなければならないため、最速のデバイスと同じ速度でしか実行できません。

この方法はうまくいきます、そして私がこれらの安いものをあまりにも多く購入したのでそれが私が使っているものです。

最後に、正規のArduinoを購入するか、FTDIチップを搭載した少なくとも1つのArduinoを購入するか、一意のデバイスIDを送信する何かを購入します。

=リッチ


2

基本的に同一の2つのデバイスを区別する必要がある場合は、2つの方法があります。

  • 常に同じポートに接続し、USBツリーを使用して区別します
  • 各ハンドシェイクプロトコルを作成します。各Arduinoは、以前にそれぞれのEEPROMに保存したコードを使用します。UDEVのヘルパー関数を記述して、ヘルパー関数がハンドシェイクを実行し、各EEPROMに保存されているシリアルをUDEVに通知することもできます。これにより、デバイスのUDEVルールを記述できます。

2

CH340B(Gではない)には、シリアル番号を保存できるEEPROMがあります。

https://www.mpja.com/download/35227cpdata.pdf

それを読み書きするためのWindowsツールもあります:

http://www.downxia.com/downinfo/196126.html

インストールしてGバージョンの動作を確認しようとします...


そのツールをダウンロードするために、その中国語のものをクリックする場所を教えてもらえますか?RARファイルへのリンクをいくつか見つけましたが、タイムアウトします。
Elmue

1

ボードにMaxim DS18S20を配置します。それぞれに固有のシリアル番号があり、非常に安価です。このデバイスを使用してインターネット上に多くのソフトウェア例があります。あなたはそれをnanoにデッドバグさせることができます。動作させるには、+ 5に接続された4.7Kの抵抗と接地接続が必要です。デバイスの5Vとグラウンド接続の両方をグラウンドに接続できます。これをnanoにバグさせるのは簡単で、1つのピンを介した単純な通信でシリアル番号を取得できます。利用可能なパッケージがいくつかあります。注意して、入力ピンを使用し、シリアルを読み取り、将来の使用のために保存することができます。それが初期化されるとき、それは再びこれをします。initプロセス中に入力がLowに駆動されていないことを確認してください。

幸運を、

ギル


USBシリアルの問題を解決するのではなく、検出するためにボード上のプロセッサの協力を必要とする何かで、ブートローダーを変更して、そことアプリケーションの両方で読み取り可能なシリアル番号を含めることもできます。プログラム(「スケッチ」など)
Chris Stratton

なんてナンセンスだ。DS18S20はデジタル温度計です!
Elmue、

はい、それは温度計です。はい、各ボードのコードやeepromを変更する必要のない一意のシリアル番号を持っています。安価でシンプル。マイクロが対応しなければならない欠点。IDEやファームウェアなどを変更せずに動作しますが、必要に応じてマルチプレクサで回避できるピンが必要です。
Gil

1

言いたくないのですが、答えは「いいえ」です。複数の340ベースのUSBシリアルコンバーターを一意に識別する方法はありません。

同じ問題があります。複数の(4+)USBシリアルコンバーターがあり、どれも任意のポートに接続でき、同時に購入されたため、すべての点で同一です(iSerialが0を含む)。

基本的に、物事を移動する場合、何が接続されているかを確認するために手で接続しなければならない、dmesg出力を熟読するなどです。これは大きな痛みです。

トム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.