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
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.

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ą.

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.

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.