Identifikace USB zařízení - FTDI

Identifikace USB zařízení - FTDI
« kdy: 24. 02. 2024, 09:28:35 »
Zdravím,

převzali naprosto zpackaný systém pro fitness centrum, kde se využívá hardware od nejmenovaného ne moc dobrého a spolehlivého dodavatele pro turnikety a skříňky. S dodavatelem jsme se několikrát bavili, je to akorát banda vychcánků, co převzali nějaký historický produkt, kterému nerozumí a pak ho nabízí dál. Spoustu věcí v systému se nám podařilo napravit, nicméně jedna stále přetrvává a je dost otravná, jak pro nás tak pro zaměstnance fitness centra, potažmo jejich zákazníky.

Do serverovny vedou USB kabely ze zařízení do převodníků, které umožní přenášet data po síti, aby se dostaly na server. Na serveru běží driver FTDI, který to převádí zase na COM zařízení. Na serveru(Windows) mají COM zařízení vlastní číslo ve specifickém pořadí(COM10, 11 ... ). Na jedné lince se komunikuje s vícero zařízeními najednou, kdy se na sběrnici zasílá adresa + nějaká instrukce.

Jádro problému nastává, když ve fitku je krátkodobý výpadek proudu či jakýkoliv způsobem nastane, že se zařízení vyrestartuje a na serveru se následně přehází čísla COMů. Obslužný software pak prostě neběží, protože má nakonfigurované specifické COM porty a nekomunikuje tak se správným zařízením. Server je napojený na UPS, nicméně turnikety, převodníky nikoliv.. Aktuálně se to řeší prostě tak, že recepce všechny kabely vypojí a pak je zapojuje ve správném pořadí, což je fakt neskutečná otrava, ještě když je tam třeba z recepce někdo nový a třeba nemá přístup do serverovny.

Ideální by bylo, pokud by se mi nějak podařilo zařízení identifikovat a následně obslužný software za běhu překonfigurovat na právě platný COM port. Bohužel pokud vyhledám HardwareID ve vlastnostech COMu ve správci zařízení, tak je u každého nějaké generické ID vytvořeno FTDI driverem(FTDIBUS\COMPORT&VID_0403&PID_6001) .. Jediná hodnota kterou jsem u všech COMů našel a trochu se liší je "Physical device object name" - nevím však jestli mi to nějak pomůže ..

Rád bych se tedy zeptal zdejších lidí, pokud má někdo zkušenosti s FTDI, jestli je něco takového řešitelné a jde se nějak dostat k tomu, aby se COM port dal nějak jednoznačně identifikovat?

Čistě teoreticky mě pak napadlo ještě řešení, kdy bych se snažil komunikovat s koncovými zařízeními na každém COM portu a následně z toho vydedukoval, které je které podle toho, jestli by něco odpovídalo nebo nikoliv. Je to takové trochu přes koleno, ale asi by to jako poslední možnost šlo.

Předej děkuji za jakoukoliv odpověď.


Re:Identifikace USB zařízení - FTDI
« Odpověď #1 kdy: 24. 02. 2024, 11:09:37 »

RDa

  • *****
  • 2 682
    • Zobrazit profil
    • E-mail
Re:Identifikace USB zařízení - FTDI
« Odpověď #2 kdy: 24. 02. 2024, 12:15:00 »
Zkus zjistit, zda existuje nejake lsusb pro windows, ktere dokaze poskytnout vypis jak fyzickych cest, tak deskriptoru.

Na asociaci pevneho COM cisla u FTDI, by windows meli pouzivat prave cestu k portu + seriove cislo.. takze pokud tam chybi nebo je neunikatni, tak se to muze zprehazet?

Pokud to nelze resit skrze sw, tak bych to videl na navrzeni krabicky s casovacem (arduinem), ktery bude po nejake prvotni akci (jede proud), spinat jednotlive porty v poradi ktere jsi naznacil ze dela nejaka osoba jakozto reseni problemu.

_Jenda

  • *****
  • 1 601
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Identifikace USB zařízení - FTDI
« Odpověď #3 kdy: 24. 02. 2024, 18:17:46 »
FTDI má unikátní sériové číslo. Na Linuxu podle toho udev vytváří symlinky. Například /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_XXXXXX-if00-port0 kde XXXXX je garantováno výrobcem že bude unikátní (a případně dokonce existuje nějaký tool, kterým to můžeš přeprogramovat).

Pokud ta Windows spustíš ve virtuálu, což je ta správná věc, co se má udělat s takovými divnými nepodporovanými věcmi, tak pak můžeš nastavit, aby COMx virtuálu byl to zařízení v Linuxu podle pevného jména. Teda pokud jich není moc a nezjistí že, se PCčka mají nějaké omezení na počet COMx :). Pak bys je alespoň mohl připojovat (softwarově) postupně jak naznačil RDa.
« Poslední změna: 24. 02. 2024, 18:20:55 od _Jenda »

Re:Identifikace USB zařízení - FTDI
« Odpověď #4 kdy: 24. 02. 2024, 20:28:14 »
Taky jsme bojovali s tim ze se nam FTDI pripojovali ma jine porty. Kvuli tomu mame tento zapis do registru aby to nedelali:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags]
"IgnoreHWSerNum04036001"=hex:01
"IgnoreHWSerNum0403A540"=hex:01
"IgnoreHWSerNum04036015"=hex:01


RDa

  • *****
  • 2 682
    • Zobrazit profil
    • E-mail
Re:Identifikace USB zařízení - FTDI
« Odpověď #5 kdy: 25. 02. 2024, 12:52:59 »
Teda pokud jich není moc a nezjistí že, se PCčka mají nějaké omezení na počet COMx :). Pak bys je alespoň mohl připojovat (softwarově) postupně jak naznačil RDa.

Klasicke PC ma max 4 seriove porty - na pevne definovancyh I/O portech (ISA sbernice).

Tam, kde mas PCI pak muzes pak pridat vicero radicu a poradi si to s alokaci, a vypada to, ze to Qemu takhle dela:
Kód: [Vybrat]
-device pci-serial,chardev=hostserial
Win ma omezeni na max 256 seriovych portu:
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000PAhzSAG&l=cs-CZ

(a v Linuxu by to mohlo byt podobne? nevim jaky rozsah maji major/minor device nody)

Re:Identifikace USB zařízení - FTDI
« Odpověď #6 kdy: 26. 03. 2024, 09:35:18 »
FTDI má unikátní sériové číslo. Na Linuxu podle toho udev vytváří symlinky. Například /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_XXXXXX-if00-port0 kde XXXXX je garantováno výrobcem že bude unikátní (a případně dokonce existuje nějaký tool, kterým to můžeš přeprogramovat).
Tím toolem můžeš dokonce přepsat nejen sériové číslo, ale i další identifikační údaje, my si tam přepisujeme položku "manufacturer" naší firmou a položku "product" identifikací zařízení. Podle to se nám na linuxu FTDIčka přiřazují na vhodně pojmenované device aniž bychom se starali o sériová čísla.

Re:Identifikace USB zařízení - FTDI
« Odpověď #7 kdy: 26. 03. 2024, 13:20:39 »
Doporučuji najít FT_Prog u FTDI... Tam se nastaví vše.

Re:Identifikace USB zařízení - FTDI
« Odpověď #8 kdy: 26. 03. 2024, 13:49:50 »
Pokud může být python/pyserial, pak
Kód: [Vybrat]
serial.tools.list_ports.comports()vrátí všechno možné, včetně sériového čísla a multiplatformně. Pak nějakou inicializaci na základě těch sériových čísel. Bohužel, sám nevím, jak zjistit nějaké označení USB, kde je to zapojeno (ve Windows).





Re:Identifikace USB zařízení - FTDI
« Odpověď #9 kdy: 27. 03. 2024, 06:31:19 »
Trochu sme to riesili vo firme, v linuxe sme s tym mali problem, ale tam sa to da nastavit. Problem moze byt, ze nejaky pulz dokaze restartnut USB-UART IC ale nie hlavny CPU, tym padom sa pripoja odpoja porty.

Dal som toto do Google Gemini, na windowse vraj treba pouzit FTDI D2XX dll, cez ktoru sa daju enumerovat FTDI devices.

Re:Identifikace USB zařízení - FTDI
« Odpověď #10 kdy: 27. 03. 2024, 14:37:03 »
Z toho popisu jsem moc nepochopil jak je to zapojené, ale zdá se mi, že tam máš nějaké převodníky USB na RS485 (to usuzuji z toho, že je na jedné lince více zařízení s adresou)? Je to tak?
A  problém je v tom, že ten převodník obsahuje nějaký FTDI chip, který je ve Windows jako virtuální COM port a ty COM porty nedrží své číslo při restartu?
Pak tipuji v tom převodníku chip FT232BM bez externí EEPROM. Můžeš to nějak ověřit?