CH340 USB- 시리얼 장치에서 일련 번호 설정


9

http://playground.arduino.cc/Linux/Udev를 읽으면 주어진 SerialNumber를 설정하기 위해 FTDI USB-Serial EEPROM에 쓸 수있는 방법이있는 것으로 보입니다. UDEV에서.

FTDI 칩이 아닌 QinHeng Electronics HL-340 USB 직렬 어댑터가 장착 된 나노 스타일의 보드가 있으므로 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

주어진 보드를 식별 할 수 없으므로 본질적으로 쓸모가 없습니다 (두 개를 붙일 때 세부 사항은 동일합니다).



1
불행히도 이것은 실제로 FTDI 칩에 대해 할 수있는 것처럼 새로운 일련 번호를 할당 할 수있는 방법이 있는지에 대한 질문이 없거나 udev 일련 번호로 문제를 해결하는 방법에 대한 답변이 아닙니다. 레오나르도처럼 이러한 모든 보드의 경우, 0udev는 동일한 컴퓨터에 연결된 여러 보드를 구별 할 수 없습니다.
jvc26

내 링크는 각 장치마다 udev 규칙을 만드는 방법에 대한 답변입니다.
PhillyNJ

1
중국어를 읽을 수 있다면 (나는 할 수 없습니다)이 페이지가 도움이 될 것입니다 : wch.cn/products.php?page=procontent&id=40
Craig

3
불행히도 @Phil Vallone 의 문제는 udev를 통해 장치를 식별하는 고유 한 직렬이 없다는 것입니다. 고유 한 장치를 감지하고 식별하려면 차별화 할 수있는 고유 한 장치가 필요합니다. 이 장치들은 동일한 iSerial을 가지고 있으므로,이를 구별 할 수 없으며 동일한 제품 및 공급 업체 ID를 공유하므로 차별화 요소가 없습니다. 도움을 주셔서 감사합니다. 불행히도이 문제는 해결되지 않습니다. !
jvc26

답변:


3

CH340 및 UART 제품군에는 고유 ID를 넣을 수있는 스토리지가 없습니다. 이것은 PL2303 유형에도 문제가됩니다. 이 문제에 대한 해결책을 찾으려고 노력했습니다. 가장 쉬운 방법은 USB 버스에서 장치의 위치입니다. 각 장치마다 고유합니다. 리눅스를 사용한다면 / dev / serial / by-path에서 각 장치를 찾을 수 있습니다. / dev / serial / by-id도 있지만이 장치에는 마지막으로 연결된 장치가 표시되므로이 장치에는 하나의 항목 만 있습니다. FTDI 칩에는 각각 고유 한 항목이 있습니다. 저렴한 칩은 그렇지 않지만 / dev / serial / by-path 아래에 항목이 있습니다. 이 위치와 장치 이름은 재부팅시에도 유지되어야합니다. USB 장치를 많이 변경 한 경우 모든 CH340 장치를 동일한 허브에 꽂은 다음 연결하십시오. 장치는 허브에 연결된 순서대로 열거됩니다. 이 one-hub 트릭은 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 기능을 사용하지 않으므로 연결이 끊어지면 죽은 링크를 정리하지 않지만 다시 연결하면 덮어 씁니다. 모든 싼두 이노는 소프트웨어에 다른 장치 ID 세트와 함께이 기능이 있어야합니다. 오랜 시간이 걸리는 매우 복잡한 스크립트를 작성하지 않는 한 모두 스크립트와 동일한 전송 속도를 사용해야합니다. 마지막으로,이 방법은 높은 보오율보다 낮은 보오율에서 훨씬 더 효과적이며, 타이밍 이유로 인해 매번 성공하지 못할 수도 있습니다. (싼두 이노는 싸다!) 9600은 여러 번 시도한 후에 115200보다 훨씬 잘 작동한다. 그러나이 방법을 사용하면 모든 CH340 arduino의 속도가 동일해야하므로 가장 빠른 장치만큼 느리게 이동할 수 있습니다.

이 방법은 작동하지만이 싼 것들을 너무 많이 사서 사용하고 있습니다.

결국, 정품 Arduino 또는 FTDI 칩이있는 제품 또는 고유 한 장치 ID를 보내는 다른 제품을 구입하십시오.

= 리치


2

원하는 것이 기본적으로 동일한 두 개의 장치를 구별하는 것이라면 두 가지 방법이 있습니다.

  • 항상 같은 포트에 연결하고 USB 트리를 사용하여 구별하십시오.
  • 각 Arduino가 이전에 각각의 EEPROM에 저장 한 코드를 사용하는 핸드 셰이크 프로토콜을 생성합니다. UDEV에 대한 헬퍼 기능을 작성하여 헬퍼 기능이 핸드 쉐이크를 수행하고 UDEV에 각 EEPROM에 저장된 직렬을 알려줄 수도 있습니다. 그러면 장치에 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을 설치하십시오. 각 보드에는 고유 한 일련 번호가 있으며 매우 저렴합니다. 이 장치를 사용하는 인터넷에는 많은 소프트웨어 예제가 있습니다. 당신은 나노에 그것을 죽일 수 있습니다. 작동하려면 +5에 연결된 4.7K 저항과 접지 연결이 필요합니다. 장치의 5V 및 접지 연결을 모두 접지에 연결할 수 있습니다. 이 문제를 나노로 쉽게 죽일 수 있습니다. 그러면 한 핀을 통한 간단한 통신으로 일련 번호를 얻을 수 있습니다. 사용 가능한 여러 패키지가 있습니다. 주의해서 입력 핀을 사용하고 직렬을 읽고 나중에 사용하기 위해 저장하십시오. 초기화되면 다시이 작업을 수행합니다. 초기화 과정에서 입력이 낮게 구동되지 않도록하십시오.

행운을 빕니다,


USB 시리얼에서 문제를 해결하지 않고 보드상의 프로세서와의 협력을 필요로하는 것을 발견하면 부트 로더를 수정하여 시리얼 넘버를 포함 할 수 있습니다. 프로그램 (즉, "스케치")
크리스 스트래튼

말도 안돼 DS18S20은 디지털 온도계입니다!
Elmue

그렇습니다. 온도계입니다. 그렇습니다. 각 보드의 코드 나 eeprom을 변경할 필요가없는 고유 한 일련 번호가 있습니다. 저렴하고 간단합니다. 마이크로는 반응해야한다. IDE 또는 펌웨어 등을 변경하지 않고도 작동하지만 필요한 경우 mux로 해결할 수있는 핀이 필요합니다.
Gil

1

나는 그것을 말하기를 싫어하지만 대답은 아니오입니다. 여러 개의 340 기반 USB 직렬 변환기를 고유하게 식별하는 방법이 없습니다.

나는 동일한 문제가 있는데, 여러 개의 (4 +) USB 직렬 변환기가 있는데 어느 포트 에나 연결할 수 있으며 동시에 구입할 수 있으므로 모든면에서 동일합니다 (iSerial 0 포함).

기본적으로, 내가 물건을 움직이면 부착 된 것을보고 dmesg 출력을 읽는 등 수동으로 연결해야합니다. 그것은 큰 고통입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.