Mengatur nomor seri pada perangkat CH340 USB-Serial

9

Membaca http://playground.arduino.cc/Linux/Udev tampaknya ada cara untuk menulis ke EEPROM USB-Serial FTDI untuk mengatur SerialNumber yang diberikan, memungkinkan Anda mengidentifikasi nano / arduino lain untuk menanganinya secara khusus di UDEV.

Saya memiliki muatan gaya nano dengan adaptor USB-Serial QinHeng Electronics HL-340, yang jelas bukan chip FTDI, dan oleh karena itu programmer FTDI tidak berfungsi. Adakah yang tahu tentang utilitas alternatif / di mana saya dapat menemukan informasi untuk melakukan hal yang sama dengan chip ini?

Saat ini perangkat mengidentifikasi dirinya dengan:

[ 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

Yang pada dasarnya tidak berguna, karena saya tidak dapat mengidentifikasi papan yang diberikan terlampir (ketika saya melampirkan dua, detailnya sama).

jvc26
sumber
1
Sayangnya, ini sebenarnya bukan jawaban untuk: pertanyaan (karena tidak menjawab apakah ada cara untuk menetapkan nomor seri baru seperti yang dapat dilakukan untuk chip FTDI), atau menyelesaikan masalah (seperti seri udev untuk semua papan ini, seperti Leonardo, adalah 0, oleh karena itu udev tidak dapat membedakan antara banyak papan yang terpasang pada komputer yang sama.
jvc26
Tautan saya adalah ke jawaban saya yang berbicara tentang membuat aturan udev untuk setiap perangkat.
PhillyNJ
1
Jika Anda dapat membaca bahasa Mandarin (saya tidak bisa) halaman ini mungkin membantu: wch.cn/products.php?page=procontent&id=40
Craig
3
Sayangnya @Phil Vallone masalahnya adalah tidak ada serial unik untuk mengidentifikasi perangkat melalui udev. Untuk mendeteksi dan mengidentifikasi perangkat unik, Anda perlu sesuatu yang unik untuk membedakannya. Perangkat ini memiliki iSerial yang sama, jadi Anda tidak dapat membedakannya, dan mereka berbagi ID Produk dan Vendor yang sama - jadi tidak ada pembeda ... Terima kasih atas bantuan Anda, sayangnya itu tidak memperbaiki masalah ini. !
jvc26

Jawaban:

3

Tidak ada penyimpanan di CH340 dan keluarga UART tempat Anda bisa memasukkan ID unik. Ini juga masalah untuk tipe PL2303. Saya telah berusaha mencari solusi untuk masalah ini. Pertama dan termudah adalah posisi perangkat di bus USB. Ini akan menjadi unik untuk setiap perangkat. Jika Anda menggunakan linux, Anda dapat menemukan setiap perangkat di bawah / dev / serial / by-path. Ada juga / dev / serial / by-id tetapi hanya akan ada satu entri di sana untuk perangkat ini karena itu menunjukkan yang terakhir terhubung. Setiap chip FTDI akan memiliki entri unik di sini. Chip murah tidak akan, tetapi masing-masing memiliki entri di bawah / dev / serial / by-path. Posisi ini, dan nama perangkat, harus bertahan di seluruh reboot. Jika Anda memiliki banyak perubahan pada perangkat USB Anda, colokkan semua perangkat CH340 ke hub yang sama, kemudian hubungkan. Perangkat akan menghitung sesuai urutan mereka terhubung ke hub. Trik satu-hub ini harus bekerja untuk MacOS dan windows juga, mereka harus muncul dalam urutan yang sama.

Aturan metode-udev yang lebih sulit. Untuk perangkat dengan ID unik seperti FTDI, Anda dapat menetapkan aturan udev yang melihatnya sebagai nomor seri dan kemudian membuat symlink ke perangkat itu, langsung saja.

Untuk perangkat dengan nomor seri yang sama atau tidak, itu jauh lebih kompleks. Saya membuat aturan udev yang terlihat seperti ini:

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"

ketika perangkat cocok dengan produk dan vendor arduino murah, ia menjalankan script 'cheapduino.py' dengan perangkat sebagai argumen, misalnya

cheapduino.py ttyUSB0

Kemudian skrip murduino terhubung secara serial ke perangkat dan mengirimkan string 'ID' dan perangkat lunak pada perangkat merespons DEVID = THX1138 atau apa pun. Script kemudian membuat symlink / dev / THX1138 yang menunjuk ke / dev / ttyUSB0

Ada banyak kelemahan dalam metode ini. Script harus habis jika perangkat lunak pada cheapduino tidak menjawab. Juga ini tidak menggunakan fungsi SYMLINK dari udev sehingga tidak akan membersihkan tautan mati saat terputus, tetapi ini akan menimpa mereka saat terhubung kembali. Semua murduino Anda harus memiliki fungsi ini dalam perangkat lunak mereka, dengan ID perangkat yang berbeda ditetapkan. Mereka semua harus menggunakan baud rate yang sama dengan skrip kecuali Anda ingin menulis skrip yang sangat rumit yang membutuhkan waktu lama. Akhirnya, metode ini bekerja lebih baik pada baud rate yang rendah daripada pada baud rate yang tinggi, yang karena alasan waktu mungkin tidak berhasil setiap saat. (cheapduino murah!) 9600 bekerja lebih baik daripada 115200 yang bekerja setelah beberapa kali mencoba. Tetapi karena semua arduinos CH340 Anda harus memiliki kecepatan yang sama dengan metode ini, Anda hanya bisa berjalan sepelan perangkat tercepat Anda.

Metode ini TIDAK berfungsi, dan itu yang saya gunakan karena saya membeli terlalu banyak barang murah ini.

Pada akhirnya, beli Arduino asli atau setidaknya yang dengan chip FTDI atau yang lainnya yang mengirimkan ID perangkat unik.

= Kaya

Rich Humphrey
sumber
2

Jika yang Anda inginkan adalah membedakan 2 perangkat yang pada dasarnya identik, Anda memiliki 2 cara:

  • selalu tancapkan di port yang sama dan gunakan pohon USB untuk membedakannya
  • buat protokol jabat tangan, di mana setiap Arduino menggunakan kode yang sebelumnya Anda simpan di masing-masing EEPROMs. Bahkan mungkin untuk menulis fungsi helper untuk UDEV, sehingga fungsi helper melakukan handshake dan memberi tahu UDEV serial yang disimpan di setiap EEPROM. Itu akan memungkinkan untuk menulis aturan UDEV untuk perangkat Anda.
Igor Stoppa
sumber
2

CH340B (bukan G) memiliki EEPROM tempat Anda dapat menyimpan nomor seri.

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

Ada alat windows juga untuk membaca / menulisnya:

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

Akan mencoba menginstal dan melihat bagaimana versi G berperilaku ...

zoobab
sumber
Bisakah Anda memberi tahu saya di mana harus mengklik barang-barang berbahasa Mandarin untuk mengunduh alat itu? Saya menemukan beberapa tautan ke file RAR tetapi waktu habis.
Elmue
1

Letakkan Maxim DS18S20 di papan Anda, masing-masing memiliki nomor seri yang unik dan sangat murah. Ada banyak contoh perangkat lunak di internet menggunakan perangkat ini. Anda bisa mematikan bug di nano. untuk mengoperasikannya diperlukan resister 4.7K yang terhubung ke +5 dan koneksi ground. Anda dapat menghubungkan koneksi 5V dan Ground dari perangkat ke ground. Akan mudah untuk mematikan bug ini ke nano kemudian dengan komunikasi sederhana melalui satu pin Anda bisa mendapatkan nomor seri. Ada beberapa paket yang tersedia. Dengan hati-hati Anda dapat menggunakan pin input, membaca serial dan menyimpannya untuk digunakan di masa depan. Ketika Inits itu akan melakukan ini lagi. Pastikan input tidak didorong rendah selama proses init.

Semoga berhasil,

Gil

Gil
sumber
Setelah Anda tidak memecahkan masalah dalam serial USB, melainkan dengan sesuatu yang membutuhkan kerja sama prosesor untuk ditemukan, Anda mungkin juga memodifikasi bootloader untuk memuat nomor seri yang dapat dibaca baik di sana maupun di aplikasi. program (yaitu "sketsa")
Chris Stratton
Omong kosong. DS18S20 adalah termometer digital!
Elmue
Ya itu adalah termometer; Ya, ia memiliki nomor seri unik yang tidak memerlukan perubahan kode atau eeprom di setiap papan. Murah dan sederhana. Kerugian mikro harus merespons. Ini akan bekerja tanpa mengubah IDE atau firmware dll tetapi membutuhkan pin yang dapat dikerjakan dengan mux jika diperlukan.
Gil
1

Saya benci mengatakannya, tetapi jawabannya tidak, tidak ada cara untuk mengidentifikasi secara unik beberapa 340 konverter serial usb berbasis.

Saya memiliki masalah yang sama, di mana saya memiliki beberapa (4+) konverter serial usb, ada yang bisa dicolokkan ke porta apa pun, dan mereka dibeli pada waktu yang sama dan karenanya identik dalam segala hal (termasuk iSerial 0).

Pada dasarnya, jika saya memindahkan barang-barang, saya harus terhubung dengan tangan untuk melihat apa yang terpasang, membaca dengan teliti keluaran dmesg, dll. Ini sangat menyebalkan.

tom

Tom
sumber