FTDI ftd2xx – ustawianie latency timer i buforów w D2XX vs VCP (FT232, FT2232, FT4232)

Pytanie

Jezeli w usb uzywam komunikacji przez ftd2xx to jak ustawic w vcp latency timer i bufory

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Sterownik D2XX (biblioteka ftd2xx.dll), którego używasz w aplikacji, nie widzi ustawień VCP (Virtual COM Port) konfigurowanych w Menedżerze Urządzeń.
  • Gdy pracujesz z D2XX, latency timer i rozmiary buforów ustawia się programowo:
    FT_SetLatencyTimer() – opóźnienie (1-255 ms)
    FT_SetUSBParameters() – wielkości buforów RX/TX (do 64 kB)
  • Jeśli jednak uruchomisz układ FTDI w trybie VCP, parametry te zmieniasz poza aplikacją (Menedżer Urządzeń Windows, edycja pliku INF, wpisy rejestru, a w Linux /sys/.../latency_timer).

Kluczowe punkty
• D2XX ↔ VCP to dwa różne sterowniki.
• Ustawienia VCP nie wpływają na aplikację korzystającą z ftd2xx.
• W D2XX cała konfiguracja odbywa się w kodzie – przykłady poniżej.

Szczegółowa analiza problemu

1. D2XX kontra VCP – co dzieje się “pod maską”

  1. Tryb VCP: sterownik FTDI emuluje klasyczny port COM; system korzysta z API RS-232 (CreateFile, ReadFile, COMMTIMEOUTS …).
  2. Tryb D2XX: aplikacja łączy się bezpośrednio z sterownikiem poprzez ftd2xx.dll, z pominięciem warstwy COM.
    Skutek: parametry ustawione dla VCP są ignorowane przez D2XX – masz dwie oddzielne konfiguracje.

2. Latency Timer – teoria

• W układzie FTDI rozpoczyna się po pojawieniu pierwszego bajtu w buforze RX.
• Pakiet USB wysyłany jest do hosta gdy:
– bufor na chipie się zapełni (End-of-Packet),
– upłynie czas Latency Timer,
– aplikacja wyśle komendę natychmiastowego odczytu.
• Małe wartości (1-2 ms) → niskie opóźnienie, więcej przerwań USB.
• Duże wartości (16-32 ms) → większa przepustowość przy dużych blokach danych.

3. Bufory w sterowniku D2XX

FT_SetUSBParameters() konfiguruje bufory w sterowniku PC, nie sprzętowe w chipie (128 B/256 B).
Zalecenia FTDI: wybierać wielokrotności maks. rozmiaru pakietu USB
Full-Speed (12 Mb/s): 64 B High-Speed (480 Mb/s): 512 B.

4. Przykładowy kod C/C++

#include "ftd2xx.h"
FT_HANDLE h;
if(FT_Open(0,&h)==FT_OK)
{
    FT_SetLatencyTimer(h, 2);           // 2 ms
    FT_SetUSBParameters(h, 65536, 65536); // 64 kB RX/TX
    FT_SetTimeouts(h, 100, 100);        // 100 ms time-out
    /* ... FT_Read/FT_Write ... */
    FT_Close(h);
}

Dla trybu VCP analogiczna zmiana wymaga:
Windows → Menadżer urządzeń → Port COM → Zaawansowane → Latency Timer
Linux  → echo 1 | sudo tee /sys/bus/usb-serial/devices/ttyUSB0/latency_timer

5. Dobór wartości – scenariusze

Scenariusz LatencyTimer Bufor RX/TX Uwagi
Sterowanie w czasie rzeczywistym 1-2 ms 4-8 kB minimalne opóźnienie, większe obciążenie CPU
Logowanie dużych bloków danych 16-32 ms 32-64 kB maksymalna przepustowość, małe narzuty
Nieregularne, krótkie ramki (MIDI) 2-4 ms 4-8 kB kompromis

Aktualne informacje i trendy

• Najnowszy sterownik FTDI D2XX v3.14 (2024-12) wprowadza natywne wsparcie dla Windows 11 ARM i podpisy EV.
• FT232H/FT2232H obsługują pakiety 512 B oraz Super-Speed w nowym FT600/601 – tam dobieraj bufory 4× 1024 B lub większe.
• macOS 11+ (M-series) wymaga usługi DriverKit; LatencyTimer ustawia się w pliku .plist.

Wspierające wyjaśnienia i detale

Analogia: Latency Timer to „odjazd autobusu z przystanku” – jeśli autobus (pakiet USB) nie zapełni się pasażerami (danymi), rusza po określonej godzinie (timeout). Zmniejszamy czas odjazdu → więcej kursów, ale mniejsze autobusy (obciążenie magistrali).

Aspekty etyczne i prawne

• Modyfikując plik INF lub rejestr, pamiętaj o konieczności ponownego podpisania sterownika (Windows WHQL / EV).
• Zgodność EMC: krótszy LatencyTimer może zwiększyć aktywność USB, co przy bardzo długich przewodach może podnieść zakłócenia RF – uwzględnij to w badaniach CE/FCC.

Praktyczne wskazówki

  1. Ustaw parametry tuż po FT_Open, zanim uruchomisz własne wątki I/O.
  2. Zawsze sprawdzaj FT_STATUS i loguj błędy – niektóre wartości są ignorowane, gdy systemowi brakuje pamięci.
  3. Testuj konfiguracje automatami: pomiar round-trip-time (RTT) dla 1-bajtowego pakietu oraz maks. throughput dla > 1 MB.
  4. Na Linuxie dodaj regułę udev, żeby LatencyTimer ustawiał się automatycznie przy podłączeniu.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • Minimalne wartości < 2 ms bywają niestabilne na niektórych kontrolerach USB 3.0 z powodu energooszczędnych stanów U1/U2.
  • Bufory > 64 kB nie poprawiają wydajności w urządzeniach Full-Speed – limit magistrali 12 Mb/s staje się wąskim gardłem.

Sugestie dalszych badań

• Sprawdź tryb asynchroniczny API (FT_ReadEx, OVERLAPPED) – pozwala zrównoleglić transfery bez aktywnego czekania.
• Rozważ nowe układy FTDI z wbudowanym FIFO 245 / 600 – umożliwiają przepustowość 200 MB/s w USB-3.
• Zobacz app-note AN_386 „Latency-Tuner Tool” (beta 2025) – automatycznie dobiera parametry pod zadany profil ruchu.

Krótkie podsumowanie

  • W trybie D2XX konfigurujesz wszystko kodem (FT_SetLatencyTimer, FT_SetUSBParameters).
  • Ustawienia VCP nie mają wpływu na aplikację D2XX; jeśli naprawdę potrzebujesz VCP, zmieniasz parametry w systemie.
  • Latencję i bufory dobieraj eksperymentalnie, uwzględniając kompromis między opóźnieniem a obciążeniem magistrali i CPU.

Te wskazówki pozwolą Ci świadomie dostroić komunikację USB-FTDI zarówno pod kątem minimalnego RTT, jak i maksymalnej przepustowości. Powodzenia w implementacji!

Oceń odpowiedź: 2

Pytanie

Jak wylaczyc u1 i u2 dla usb3

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Stany U1 / U2 (Link Power Management) wyłącza się w kontrolerze hosta/hubie USB-3.x, nie w samym urządzeniu.
  • Windows: najprościej narzędziem Microsoft USBLPM (usblpm /disable U1, usblpm /disable U2) lub przez rejestr/zaawansowane ustawienia zasilania.
  • Linux: parametr jądra usbcore.autosuspend=-1 bądź wymuszenie trybu on w /sys/bus/usb/devices/.../power/control.
  • BIOS/UEFI: część płyt umożliwia wyłączenie „USB 3.0 Link Power Management”.

Kluczowe punkty
• Zmiana jest globalna dla danego hosta/huba.
• Po wyłączeniu rośnie pobór mocy, spadają opóźnienia i liczba błędów transmisji.
• W razie potrzeby weryfikuj efekt w USBView (Win) lub lsusb -t (Linux).


Szczegółowa analiza problemu

1. Czym są U1 i U2?

U0 – pełna prędkość;
U1 – „lekki sen” (wejście/wyjście ≈ 10 µs);
U2 – głębszy sen (≈ 200 µs);
U3 – zawieszenie (Selective Suspend).
Błędy implementacji lub długi czas wybudzania powodują zerwania połączenia, dropy pakietów czy zwiększoną latencję, więc czasem trzeba te stany zablokować.

2. Windows (10/11, Server 2019+)

  1. USBLPM (MUTT package, Microsoft)

    usblpm /disable U1
    usblpm /disable U2
    usblpm /enable  U1
    usblpm /enable  U2

    Zmiana wykonywana w sterowniku xHCI – działa natychmiast, wymaga uprawnień admina.

  2. Zaawansowane opcje zasilania

    • Odblokuj opcję:
      reg add HKLM\...\2a737441-1930-4402-8d77-b2bebba308a3\d4e98f31-5ffe-4ce1-be31-1b38b384c009 /v Attributes /t REG_DWORD /d 2 /f
    • Panel sterowania → Opcje zasilania → Zmień zaawansowane ustawienia → USB 3 Link Power Management → Off.
  3. Rejestr sterownika xHCI (Intel/ASMedia/Renesas)

    HKLM\SYSTEM\CurrentControlSet\Control\Class\{36fc9e60-c465-11cf-8056-444553540000}\000n
        LpmDisable (DWORD) = 1

    lub dla sterownika Intela:

    HKLM\SYSTEM\CurrentControlSet\Services\iusb3xhc\Parameters
        UsbLinkPowerManagement (DWORD) = 0

    Restart obowiązkowy.

  4. ACPI _DSM (od Windows 10 v2004)
    Firmware/BIOS może udostępnić metodę _DSM funkcja 5 „Disable U1/U2 for port”. Pozwala selektywnie wyłączyć LPM w konkretnym porcie – wymaga modyfikacji ACPI lub sterownika platformy.

  5. Diagnostyka
    • USB Device Tree Viewer (USBView) – pola „U1 Enabled”, „U2 Enabled”.
    • PowerShell:

    Get-PnpDevice -Class USB | Where FriendlyName -Match "eXtensible Host" |
        Get-PnpDeviceProperty DEVPKEY_USBXHCI_U1U2_STATE

3. Linux

  1. Globalnie przy starcie:
    GRUB → usbcore.autosuspend=-1 (wyłącza przejścia U1/U2/U3).
  2. Selektywnie w runtime:
    echo on | sudo tee /sys/bus/usb/devices/3-2/power/control

    Można utrwalić regułą udev:

    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1d50", \
        ATTR{idProduct}=="615e", ATTR{power/control}:="on"
  3. Kompilacja jądra: od 5.4 CONFIG_USB_LPM_ENABLE domyślnie Y; można wyłączyć.
  4. Podgląd: cat /sys/kernel/debug/usb/devices | grep LPM.

4. BIOS/UEFI

Typowe ścieżki:
Advanced → USB Configuration → USB 3.0 Power Management / Aggressive LPM → Disabled
lub Chipset → xHCI settings → Link Power Management → Disable.
Po zapisie następuje globalne wyłączenie LPM zanim OS wystartuje.

5. Sprzęt / firmware urządzenia

Urządzenie może samo zrezygnować z U1/U2, wystawiając w deskryptorze Link Power Management Attributes odpowiednie bity; lub host może wysłać SET_FEATURE • U1_ENABLE / U2_ENABLE. W praktyce większość ogólnodostępnych sterowników użytkowych nie udostępnia API do tak niskopoziomowego sterowania – wyjątek: własny firmware lub sterownik klasy libusb.


Aktualne informacje i trendy

  • Microsoft promuje USBLPM jako domyślny sposób testów od Windows 10 22H2.
  • W jądrach Linux ≥ 6.1 usprawniono obsługę LPM dla kontrolerów AMD Rembrandt i Intel Alder/Raptor Lake.
  • USB4 zachowuje ideę LPM; specyfikacja definiuje nowe stany szybciej wybudzane (L1/L2), ale koncepcja wyłączania jest analogiczna.
  • Na rynku embedded (Jetson, Raspberry Pi 4+) pojawiają się patche, które domyślnie blokują U1 / U2 z powodu błędów w hubach PCIe-USB (ASM1142/1143).

Wspierające wyjaśnienia i detale

  • Pobór mocy portu SuperSpeed bez U-states rośnie ~200–400 mW, co dla desktopa jest pomijalne, natomiast w ultrabookach skraca czas pracy o kilka-kilkanaście minut.
  • Wyjście ze stanu U1 to ~10 µs → przy transferach krótszych niż 125 µs opóźnienie jest wyraźne; dla U2 ~200 µs może popsuć streaming audio/video lub oscyloskopów USB.
  • Kable >1 m niskiej jakości wzmagają błędy CRC i częstotliwość przejść LPM – jeszcze bardziej eksponując problemy; wyłączenie U-states stabilizuje link.

Aspekty etyczne i prawne

  • Korzystanie z narzędzi systemowych (USBLPM, rejestr) nie narusza licencji OS.
  • Większy pobór energii wpływa negatywnie na czas pracy baterii i ślad węglowy – decyzję należy uzasadnić rzeczywistą potrzebą niezawodności lub czasu rzeczywistego.

Praktyczne wskazówki

  1. Testuj zmianę na jednym porcie – oszczędzisz energię tam, gdzie nie jest to krytyczne.
  2. Zrób kopię zapasową rejestru lub snapshot BIOS-u.
  3. Po zmianach wykonaj:
    • test ciągłości transferu (iperf, dd, własny loopback) min. 30 min,
    • pomiar poboru prądu (notebook – powercfg /energy, Linux – powertop),
    • porównanie ilości błędów CRC w usbmon/Wireshark.
  4. Na Linuksie automatyzuj udev rule, aby nie tracić ustawienia po re-enumeracji.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • Nie każdy kontroler respektuje LpmDisable=1 (starsze Renesas 0.96).
  • Wirtualizacja (VMWare/Hyper-V passthrough) czasem nadpisuje ustawienia hosta.
  • W ekosystemie Apple macOS LPM działa inaczej (U1/U2 mapowane na Ustate 1/2 w IOKit); brak oficjalnej metody globalnego disable – wymagana ingerencja kext/ACPI.

Sugestie dalszych badań

  • Analiza wpływu LPM na jitter ISO/INT w USB Video Class 2.0.
  • Implementacja dynamicznego algorytmu: wyłącz U1/U2 przy wykryciu transferu ciągłego > x MB/s.
  • Porównanie USB3 vs. USB4 L1/L2 pod kątem latencji w czasie rzeczywistym.
  • Śledzenie specyfikacji USB-IF „USB4 Low-Power Link States” (draft 1.4).

Krótkie podsumowanie

Wyłączenie U1/U2 to operacja na warstwie hosta/huba.
• Windows: USBLPM lub rejestr/power options; Linux: usbcore.autosuspend=-1 lub power/control=on; BIOS: „USB 3.0 Link Power Management → Disable”.
• Poprawia stabilność i zmniejsza latencję, kosztem kilkuset mW na port.
• Zweryfikuj skuteczność w USBView/lsusb -t; zawsze wykonuj kopię ustawień przed zmianą.

Pytanie

Podaj wpisy do rejestru zeby wyłaczyc lpm win 11

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Aby całkowicie wyłączyć Link Power Management (stany U1/U2) w Windows 11 wystarczy dodać (i zrestartować system):

    Windows Registry Editor Version 5.00
    
    ; Sterownik Microsoft xHCI – globalne wyłączenie LPM
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBXHCI\Parameters]
    "DisableU1U2"=dword:00000001
  • Dla kontrolerów Intela lub kiedy powyższa metoda nie działa:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iusb3xhc\Parameters]
    "UsbLinkPowerManagement"=dword:00000000   ; 0 = OFF

    Kluczowe punkty
    • Po zmianach konieczny restart.
    • Zmian dokonuj z uprawnieniami administratora i po wykonaniu kopii rejestru.

Szczegółowa analiza problemu

  1. Czym jest LPM
    • USB 3.x wprowadza stany U0–U3; U1 i U2 to tryby oszczędzania energii, które mogą wprowadzać dodatkowe opóźnienia lub niestabilność urządzeń wysokoprzepływowych.

  2. Ścieżki rejestru i ich przeznaczenie
    • Sterownik klasy Microsoft xHCI
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBXHCI\Parameters
    DisableU1U2 = 1 – wyłącza oba stany.
    UsbLinkPowerManagementIncapable = 1 – starsza nazwa tego samego parametru.
    • Sterowniki Intela (iusb3xhc / IntelUSB3)
    UsbLinkPowerManagement = 0 lub DisableLPM = 1 – wartości odwrotne względem Microsoftu (0 = OFF).
    • Instancja konkretnego kontrolera (dowolny producent)
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}\000x
    LpmDisable = 1 – precyzyjne wyłączenie tylko tego kontrolera.
    • Selektywne wstrzymanie USB (pokrewne, ale szersze)
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USB
    DisableSelectiveSuspend = 1.

  3. Teoria vs. praktyka
    • W laptopach wyłączenie LPM skraca czas pracy na baterii o 1-3 %.
    • W stacjonarnych PC wpływ energetyczny jest pomijalny, a zyskuje się stabilność przy urządzeniach audio, VR, interfejsach FTDI itp.

Aktualne informacje i trendy

• Microsoft od Windows 11 22H2 nie wprowadził nowych interfejsów API do sterowania LPM – nadal obowiązują wpisy z Windows 10.
• Coraz więcej producentów płyt (ASUS/ASRock/MSI) udostępnia w UEFI przełącznik „USB3 LPM Support”; jeśli jest – preferować firmware zamiast rejestru.
• Rozwijane są dynamiczne algorytmy LPM z krótszym czasem wybudzania; w przyszłości prawdopodobnie pojawi się opcja „Adaptive LPM”.

Wspierające wyjaśnienia i detale

• Jak znaleźć poprawny podklucz 000x? – Menedżer urządzeń → Właściwości kontrolera → Szczegóły → „Klucz sterownika”.
• Walidacja: USBView/USB Device Tree Viewer → sekcja LPM Info → „U1 Enabled: No / U2 Enabled: No”.
• Plik .reg można utworzyć w Notatniku i uruchomić dwuklikiem; Powershell: reg import .\DisableLPM.reg.

Aspekty etyczne i prawne

• Brak bezpośrednich implikacji prawnych; jednak w przedsiębiorstwach zmiana polityki zasilania może naruszać wewnętrzne wytyczne Green-IT.
• Niektóre regulacje energetyczne (np. Energy Star) wymagają aktywnych funkcji oszczędzania energii – wyłączenie LPM może obniżyć klasę efektywności.

Praktyczne wskazówki

• Zawsze zaczynaj od metody per-kontroler (LpmDisable), a globalne wpisy stosuj tylko, gdy to nie pomaga.
• Po każdej zmianie czyść „fast startup” (powercfg -h off/on) lub wykonaj pełne „Shut down” → „Power on”.
• Do masowego wdrożenia użyj GPO: Computer Configuration → Preferences → Windows Settings → Registry.

Ewentualne zastrzeżenia lub uwagi dodatkowe

• Na niektórych płytach z chipsetem AMD/ASMedia wpisy Microsoft xHCI mogą nie działać – konieczny podklucz Class.
• Jeśli po wyłączeniu LPM pojawią się błędy „Code 10” lub „Device Descriptor Request Failed”, przywróć domyślne wartości.

Sugestie dalszych badań

• Porównać wpływ wyłączenia LPM na jitter i latencję w aplikacjach audio (np. ASIO).
• Monitorować zapotrzebowanie energetyczne portów USB3 przy pomocy mierników PD/QC (żeby zweryfikować realny wzrost poboru).
• Śledzić dokumentację USB-IF dot. stanów U1’/U2’ (przejściowych) planowanych dla USB4.

Krótkie podsumowanie

Wyłączenie LPM w Windows 11 sprowadza się do ustawienia jednego z trzech kluczy rejestru (DisableU1U2, UsbLinkPowerManagement, LpmDisable) na wartość wyłączającą (0 lub 1 w zależności od sterownika) i ponownego uruchomienia systemu. Rozwiązanie poprawia stabilność niektórych urządzeń USB kosztem nieznacznie większego zużycia energii i powinno być wykonywane świadomie, po uprzednim utworzeniu kopii rejestru.

Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.