FTDI FT232R – rozmiary sprzętowych buforów FIFO RX/TX, UART, USB, Latency Timer
Pytanie
Chip ftdi 232r jaki jest bufory sprzetowe
Odpowiedź Sztucznej Inteligencji
Bezpośrednia odpowiedź na pytanie
- FTDI FT232R posiada dwa sprzętowe bufory FIFO:
• Bufor odbiorczy (RX): 128 B
• Bufor nadawczy (TX): 256 B
- Rozmiary te są na stałe zdefiniowane w krzemie i nie dają się programowo powiększyć.
Kluczowe punkty
• Bufory kompensują różnicę charakteru transmisji USB (transfer pakietowy) i UART (strumieniowy).
• „Buffer smoothing” minimalizuje jitter i zwiększa przepustowość przy szybkich, nieregularnych burstach danych.
• Czasomierz opóźnienia (Latency Timer, domyślnie 16 ms) decyduje, kiedy częściowo zapełniony bufor RX zostanie wysłany do hosta.
Szczegółowa analiza problemu
-
Architektura
FT232R integruje pełny kontroler USB 1.1 Full-Speed (12 Mb/s) z asynchronicznym UART-em do 3 Mbaud. Przed wejściem/wyjściem z magistrali USB dane trafiają do SRAM-owych kolejek FIFO (First-In, First-Out).
• RX FIFO (128 B) – dane z pin-u RXD → USB.
• TX FIFO (256 B) – dane z USB → pin TXD.
-
Dlaczego RX = 128 B, TX = 256 B?
• W kierunku PC→urządzenie (TX) typowo przesyłamy większe porcje konfiguracyjne, więc dłuższy bufor zmniejsza liczbę transakcji USB.
• W kierunku urządzenie→PC (RX) ważniejsze są opóźnienia; mniejszy bufor + programowalny Latency Timer pozwalają szybciej „spakować” małe pakiety bez nadmiernego narzutu magistrali.
-
Mechanizmy wysyłania danych z RX FIFO
a) Zapełnienie pakietu USB (64 B) – natychmiastowy transfer.
b) Upłynięcie Latency Timer (1–255 ms, domyślnie 16 ms).
c) Klasa urządzenia USB CDC/FTDI D2XX steruje dodatkowymi znacznikiem „immediate transfer”.
-
Kontrola przepływu
• Sprzętowa (RTS/CTS) – linia RTS# uaktywnia się, gdy w RX FIFO pozostanie ≤96 B wolnego miejsca; wyłącza się po zwolnieniu ≥128 B.
• Programowa (XON/XOFF) – obsługiwana przez sterownik, ale mniej deterministyczna.
-
Typowe problemy i rozwiązania
• Overrun – mikrokontroler wysyła szybciej niż PC opróżnia FIFO → włącz RTS/CTS, zmniejsz baud rate albo zwiększ priorytet wątku odbioru na PC.
• Wysokie opóźnienia – zredukuj Latency Timer (np. 2 ms) lub użyj FT_SetUSBParameters() w D2XX, by odczytywać większe bloki.
• Niska przepustowość – zbyt niski Latency Timer generuje zbyt wiele przerwań USB; zwiększ go lub odczytuj większe bufory w aplikacji.
Aktualne informacje i trendy
- Nowsze układy FTDI klasy Hi-Speed (FT2232H, FT232H) oferują 4 kB FIFO i 480 Mb/s USB 2.0; warto rozważyć je przy wymaganiach >3 Mbaud.
- Na rynku pojawiają się tanie alternatywy (CH340E, CP2102N) – jednak ich FIFO są mniejsze (typ. 32–128 B) i nie mają „buffer smoothing”.
Wspierające wyjaśnienia i detale
- Dane w FIFO są taktowane przez niezależne zegary (48 MHz USB, UART-owy od 300 baud do 3 Mbaud).
- Opóźnienie całkowite ≈ Latency Timer + czas skompletowania pakietu USB + czas obsługi stosu na PC.
- Przy 3 Mbaud i 11 bitach/znak bufor 128 B zapełnia się w ≈ 0,47 ms, stąd bez RTS/CTS może dojść do utraty danych, jeśli host akurat odracza IN-token o kilka milisekund.
Aspekty etyczne i prawne
- Sterowniki FTDI są własnościowe (D2XX) lub udostępnione jako signed-VCP; licencja zabrania odtwarzania kodu.
- Historia „FTDI-gate” (2014) – sterownik Windows blokował nieoryginalne układy; zalecana jest weryfikacja autentyczności części (FTDI ChipID).
- Urządzenie musi spełniać EMC/ESD normy USB-IF; przy integracji kabelek USB maks. 1 Ω pętli masy i filtry EMI.
Praktyczne wskazówki
- Zawsze podłącz RTS/CTS, jeżeli baud > 500 k.
- W sterowniku Windows: Advanced → Latency Timer ustaw 2–4 ms dla aplikacji czasu quasi-rzeczywistego.
- W Linuxie użyj ioctl TIOCSSERIAL lub setserial low_latency.
- FT_SetUSBParameters(ftHandle,64*32,64) pozwala ustawić wielkość pakietu buforu sterownika i interwał.
- Grube ścieżki masy + lokalny kondensator 4,7 µF na pinie VCCIO minimalizują glitch-e w FIFO przy burstach.
Ewentualne zastrzeżenia lub uwagi dodatkowe
- FIFO nie chroni przed utratą danych, gdy host wejdzie w suspend (USB S3). Rozważ wybudzenie urządzeniem (remote wake-up).
- FT232R nie obsługuje DMA do FIFO; wszystkie transakcje przechodzą przez BUFTx/Rx w rdzeniu USB, co przy stale pełnym TX powoduje ~1 mA wyższy prąd.
- Niektóre „kompatybilne” klony raportują błędne wartości FIFO w Deskriptorze; odczytaj realne opóźnienia eksperymentalnie.
Sugestie dalszych badań
- Analiza wpływu „USB micro-frame scheduler” na jitter przy isochronicznej symulacji danych.
- Porównanie z CP2102N/CH9102 FIFOs w aplikacjach z audio-streamingiem UART<->USB.
- Implementacja własnego sterownika libusb z Isochronous-Bulk bridge w celu redukcji latency < 1 ms.
Krótkie podsumowanie
FT232R dysponuje sprzętowymi FIFO: 128 B (RX) i 256 B (TX). Ich zadaniem jest wygładzenie ruchu między pakietowym USB a strumieniowym UART. Kluczowe dla niezawodnej i szybkiej pracy są: właściwe ustawienie Latency Timer, zastosowanie RTS/CTS i świadome zarządzanie blokami danych w aplikacji hosta. Przy wyższych wymaganiach (baud > 3 M) warto rozważyć nowsze, hi-speed-owe warianty FTDI.
Zadaj dodatkowe pytanie Sztucznej Inteligencji
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.