Jezeli w usb uzywam komunikacji przez ftd2xx to jak ustawic w vcp latency timer i bufory
FT_SetLatencyTimer()
– opóźnienie (1-255 ms)FT_SetUSBParameters()
– wielkości buforów RX/TX (do 64 kB) /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.
CreateFile
, ReadFile
, COMMTIMEOUTS
…). ftd2xx.dll
, z pominięciem warstwy COM.• 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.
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.
#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
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 |
• 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
.
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).
• 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.
FT_Open
, zanim uruchomisz własne wątki I/O. FT_STATUS
i loguj błędy – niektóre wartości są ignorowane, gdy systemowi brakuje pamięci. • 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.
FT_SetLatencyTimer
, FT_SetUSBParameters
). 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!
Jak wylaczyc u1 i u2 dla usb3
usblpm /disable U1
, usblpm /disable U2
) lub przez rejestr/zaawansowane ustawienia zasilania. usbcore.autosuspend=-1
bądź wymuszenie trybu on
w /sys/bus/usb/devices/.../power/control
. 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).
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ć.
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.
Zaawansowane opcje zasilania
reg add HKLM\...\2a737441-1930-4402-8d77-b2bebba308a3\d4e98f31-5ffe-4ce1-be31-1b38b384c009 /v Attributes /t REG_DWORD /d 2 /f
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.
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.
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
usbcore.autosuspend=-1
(wyłącza przejścia U1/U2/U3). 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"
CONFIG_USB_LPM_ENABLE
domyślnie Y; można wyłączyć. cat /sys/kernel/debug/usb/devices | grep LPM
.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.
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.
iperf
, dd
, własny loopback) min. 30 min,powercfg /energy
, Linux – powertop
),usbmon
/Wireshark. LpmDisable=1
(starsze Renesas 0.96). Ustate 1/2
w IOKit); brak oficjalnej metody globalnego disable – wymagana ingerencja kext/ACPI.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ą.
Podaj wpisy do rejestru zeby wyłaczyc lpm win 11
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.
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.
Ś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
.
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.
• 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”.
• 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
.
• 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.
• 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.
• 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.
• 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.
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.