題:
在CH340 USB串行設備上設置序列號
jvc26
2014-12-21 18:22:14 UTC
view on stackexchange narkive permalink

閱讀 http://playground.arduino.cc/Linux/Udev似乎有一種方法可以寫出FTDI USB串行EEPROM來設置給定的SerialNumber,從而使您能夠識別

我有一個帶有QinHeng Electronics HL-340 USB串行適配器(顯然不是FTDI芯片)的納米樣式板,並且FTDI程序員因此無法工作。有誰知道替代工具/在哪裡可以找到與該芯片相同的信息?

當前設備使用以下信息標識自己:

  [6850.608080] usb 2 -1.2:使用ehci-pci [6850.701496] usb 2-1.2的新全速USB設備編號7:找到新的USB設備,idVendor = 1a86,idProduct = 7523 [6850.701505] usb 2-1.2:新的USB設備字符串:Mfr = 0,產品= 2,序列號= 0 [6850.701510] USB 2-1.2:產品:USB2.0-串行[6850.702201] ch341 2-1.2:1.0:檢測到ch341-uart轉換器[6850.704210] usb 2-1.2:ch341-uart現在連接到ttyUSB0  

的轉換器實際上是沒有用的,因為我無法識別連接的給定板(當我連接兩個時,它們的詳細信息相同)。

[在Linux中,如何識別通過USB連接的多個Arduino?]的可能重複項目。(http://arduino.stackexchange.com/questions/3680/in-linux-how-to-identify-multiple-arduinos-connected-over- USB)
不幸的是,這並不是一個真正的答案:問題(因為它無法回答是否有一種方法可以分配新的序列號,就像對FTDI芯片一樣)或解決問題(如udev序列號)因為所有這些板,例如Leonardo,都是“ 0”,因此udev不能區分連接到同一台計算機的多個板。
我的鏈接是我的答案,它涉及為每個設備創建udev規則。
如果您會讀中文(我不會),則此頁面可能會有所幫助:http://wch.cn/products.php?page=procontent&id=40
是的-我已經看到了,但不幸的是,遇到了同樣的語言問題!
不幸的是,[@Phil Vallone](http://arduino.stackexchange.com/users/490/phil-vallone)的問題是,沒有唯一的序列可通過udev識別設備。為了檢測和識別獨特的設備,您需要獨特的東西來區分它們。這些設備具有相同的iSerial,因此您無法在其上進行區分,並且它們共享相同的產品和供應商ID-因此沒有任何區別...謝謝您的幫助,很遺憾,它無法解決此問題!
五 答案:
Rich Humphrey
2016-12-06 07:47:50 UTC
view on stackexchange narkive permalink

CH340和UART系列上沒有存儲可放置唯一ID的存儲區。這也是PL2303類型的問題。我一直在努力尋找解決此問題的方法。首先,最簡單的是設備在USB總線上的位置。對於每個設備,它都是唯一的。如果您使用的是Linux,則可以在/ dev / serial / by-path下找到每個設備。還有一個/ dev / serial / by-id,但是此設備在那裡只有一個條目,因為它顯示了最後一個已連接的條目。 FTDI芯片將在此處分別具有唯一的條目。便宜的芯片不會,但是它們每個都在/ dev / serial / by-path下有一個條目,該位置和設備名稱應該在重啟後仍然存在。如果您的USB設備有很多更改,請將所有CH340設備插入同一集線器,然後再插入。這些設備將按照插入集線器的順序進行枚舉。這種單中心的技巧也適用於MacOS和Windows,它們應該以相同的順序出現。

Harder方法-udev規則。對於具有唯一ID(例如FTDI)的設備,您可以設置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“

當設備與以下產品和供應商匹配時cheap arduino,它以設備作為參數運行腳本“ cheapduino.py”,例如

cheapduino.py ttyUSB0

然後,cheapduino腳本通過串行連接到設備並發送字符串“ ID”和設備上的軟件響應DEVID = THX1138或其他。然後,腳本創建一個指向/ dev / ttyUSB0的符號鏈接/ dev / THX1138

此方法有很多缺點。如果cheapduino上的軟件沒有響應,則腳本必須超時。同樣,這沒有使用udev的SYMLINK函數,因此它不會在斷開連接時清除死鏈接,但在重新連接時會覆蓋它們。您所有的cheapduinos必須在其軟件中具有此功能,並且設置了不同的設備ID。它們都必須使用與腳本相同的波特率,除非您想編寫一個非常複雜的腳本,並且需要很長時間。最後,此方法在低波特率下比在高波特率下效果更好,由於時序原因,這種方法可能不會每次都成功。 (cheapduinos很便宜!)9600比115200更好,後者在幾次嘗試後仍能工作。但是,由於使用此方法您所有的CH340 arduino必須保持相同的速度,因此只能與最快的設備一樣慢。這些便宜的東西太多了。

最後,購買正版的Arduino,或者至少購買帶有FTDI芯片或其他能夠發送唯一設備ID的東西。 >

Igor Stoppa
2015-08-30 07:18:14 UTC
view on stackexchange narkive permalink

如果要區分兩個基本相同的設備,則有兩種方法:

  • 始終將它們插入相同的端口並使​​用USB樹來區分它們
  • 創建一個握手協議,其中每個Arduino使用您先前存儲在其各自EEPROM中的代碼。甚至可以為UDEV編寫一個輔助函數,以便該輔助函數進行握手並告知UDEV存儲在每個EEPROM中的序列。這樣可以為您的設備編寫一個UDEV規則。
zoobab
2019-02-12 16:43:04 UTC
view on stackexchange narkive permalink

CH340B(不是G)具有一個EEPROM,您可以在其中存儲序列號。

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

還有一個用於讀取/寫入它的Windows工具:

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

將嘗試安裝並查看G版本的行為...

您能告訴我在哪裡單擊該中文內容以下載該工具嗎?我找到了一些指向RAR文件的鏈接,但是它們超時了。
Gil
2015-10-30 05:03:32 UTC
view on stackexchange narkive permalink

在板上放置一個Maxim DS18S20,每個都有一個唯一的序列號,而且非常便宜。互聯網上有很多使用此設備的軟件示例。您可以將其調試到nano。要運行它,需要一個連接到+5的4.7K電阻和一個接地連接。您可以將設備的5V和接地連接都接地。將其錯誤地存入nano會很容易,然後通過一個引腳進行簡單的通信即可獲得序列號。有幾種可用的軟件包。您可以小心使用輸入引腳,讀取序列並將其保存以備將來使用。當它啟動時,它將再次執行此操作。只要確保在初始化過程中輸入沒有被拉低即可。

祝你好運

Gil

一旦您沒有解決USB串行中的問題,而是要解決需要板上板上的處理器配合才能發現的問題,您不妨修改引導加載程序,使其包含可在其中和應用程序中讀取的序列號程序(即“草圖”)
廢話DS18S20是數字溫度計!
是的,它是溫度計;是的,它具有唯一的序列號,不需要更改每個板上的代碼或eeprom。便宜又簡單。缺點是微必須響應。它可以在不更改IDE或任何固件等的情況下工作,但是需要一個可以與多路復用器配合使用的引腳(如果需要)。
Tom
2015-12-22 07:02:08 UTC
view on stackexchange narkive permalink

我不想這麼說,但是答案是否定的,沒有辦法唯一地識別多個基於340的USB串行轉換器。

我遇到了同樣的問題,我有多個(4+ )USB串行轉換器,任何一個都可以插入任何端口,並且它們是同時購買的,因此在各個方面都是相同的(包括iSerial為0)。

基本上,如果我移動東西周圍,我必須手動連接以查看連接的附件,仔細閱讀dmesg輸出等。這是一個很大的痛苦。

tom



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...