Skocz do zawartości

[C] komunikacja pomiedzy TFDI <> ATxmega128


Ultimion

Pomocna odpowiedź

witam

posiadam taki oto moduł FTDI UMFT240XA . moduł ten od strony uC ma 8 bitową szynę danych i 4 sygnały sterujące:

D0-D7 - I/O - 8 bitów danych

RXF# - output - Transmit Control Line

TXE# - output - Receive Control Line

RD# - input 245 FIFO Write Status Line

WR# - input 245 FIFO Read Status Line

Czy ktoś już podpinał taki kontroler USB do uC i mógłby mi wyjaśnić jak tym sterować?

Link do komentarza
Share on other sites

Nie podłączałem tego czegoś do niczego innego ale mimo to spróbuję Ci odpowiedzieć na podstawowe pytanie: jak to zrobić mimo, iż nawet nie chciało Ci się zajrzeć do tego dokumentu, wskaznego w instrukcji do modułu UMFT240XA:

http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT240X.pdf

na stronę 12 i 13.

Z danych zawartych w powyższym dokumencie wynika, że:

1. Scalak służy do komunikacji dwukierunkowej. Z jednej strony ma USB a z drugiej 8-bitową, dwukierunkową szynę danych. Pomiędzy tymi interfejsami stoją dwie FIFO czyli tzw. kolejki - pamięci które potrafią zbuforować do 512 bajtów niezależnie w każdą stronę.

2. Załóżmy, że podłączyłeś to do procesora w najprostszy możliwy sposób, czyli linie D0-7 do jakiegoś pełnego portu a pozostałe 4 sygnały do jakichś 4 linii innych portów. Ustawiasz swój port "danych" na wyjście (żeby w stanie "nieużywania" linie były czymś sterowane), to co podłączone do RXF i TXE ma być wejściami procesora a RD i WR wyjściami. Na RD wystawiasz stan 1 a na WR stan 0.

3. Jeżeli chcesz coś przez USB wysłać to:

a. Sprawdzasz stan linii TXE, która musi być zerem co oznacza, że FIFO nadajnika nie jest "zapchane" i masz w niej miejsce na conajmniej 1 bajt danych.

b. Wystawiasz bajt do wysłania na port "danych" (D0-7).

c. Robisz krótki impuls 1 na linii WR (0-1-0).

4. Jeżeli chcesz coś odebrać z USB to:

a. Sprawdzasz stan linii RXF która musi być zerem co oznacza, że conajmniej jeden bajt jest gotowy do odczytu z FIFO odbiornika.

b. Przestawiasz port "danych" (D0-7) na wejście.

c. Wystawiasz stan niski na linii RD.

d. Odczytujesz co się pojawiło na liniach D0-7 przez port "danych".

e. Podnosisz linię RD do stanu wysokiego

f. Przestawiasz port z powrotem na wyjście.

Oczywiście wykonując pkt 4 w pętli - w przypadku odczytu większej liczby bajtów - nie musisz za każdym razem machać kierunkiem portu danych. Wystarczy, gdy raz na początku zrobisz go "wejściem" i raz na końcu zostawisz go w stanie wyjściowym.

W przypadku procesora mającego EBI możesz podłączyć linie D0-7 do szyny danych pamięci i traktować obie FIFO jak "jednokomórkową" pamięć. W tym przypaku o kierunek pracy bufora szyny procesora będzie sią martwiło EBI. Niestety w przypadku gdy na magistrali będzie jeszcze jakaś pamięć (np. SRAM) musisz bramkować sygnały RD/WR sygnałem wyboru przestrzeni adresowej CS ponieważ - w odróżnieniu od pamięci - takiego kwalifikatora układ FT240X nie ma.

Link do komentarza
Share on other sites

@Marek

Wszystko pięknie ładnie, widziałem te strony z timingami co nie do końca było dla mnie jasne.

Jeżeli chodzi o odbiór danych z FTDI to sprawa wydaje się prosta ... wysyłam z PC powiedzmy paczkę 256 bajtów i ja odczytuje tą paczkę bajt po bajcie w tej kolejności jak je wysłałem z PC. Tutaj trzeba zaznaczyć ze softwerowo musze sprawdzać czy dane są kompletne czy tez nie i czekać aż jakieś bajty znajda się w buforze FIFO. OK sprawa jasna.

Gorzej wygląda sprawa wysyłania bajtów do bufora FIFO gdyż jeżeli chce wysłać powiedzmy 190 bajtów i wyśle je bajt po bajcie to kiedy je wyśle TFDI? wyśle to w jakiejś paczce za jednym razem czy osobno każdy bajt, USB ma jakieś przecież ramki) i choć PC widzi układ jako wirtualny com to jakoś te dane chyba są pakowane ... to mnie tylko zastanawiało 🙂

No ale skoro nie mam na to wpływu jak to jest wysyłane, być może niepotrzebnie się tym martwiłem... to wszystko jasne wysyłam na FTDI bajt po bajcie i on trafia do PC w tej samej kolejności przed wysłaniem sprawdzam czy mam wolne miejsce w buforze... natomiast gdy odbieram dane sprawdzam czy bufor jeszcze ma cos u siebie czy już jest pusty.

Pozostaje jeszcze jakaś konfiguracja ... ten układ pozwala na przesyłanie z prędkością do 8Mbps nie trzeba gdzieś ustawić konfiguracji z jaka prędkością maja być przesyłane dane ?

Pamiętam jak dawno temu pisałem w assemblerze wysyłanie po RS232 na PIC16F84 to w zależności od tego z jaka prędkością chciałem wysyłać dane (9600 lub 19200) to musiałem odpowiednio ustawić programowo czas każdego bitu.

Wiec chyba tutaj tez musze chyba ustawić prędkość by od strony PC ustawić dane w porcie COM na odpowiednia i taką samą abym dobre dane odczytywał, no chyba ze konfiguracje FT240 od strony PC robi się za pomocą sterownika.

A tak po za tym to bardzo dziękuje za obszerna odpowiedz 🙂

Link do komentarza
Share on other sites

To może po kolei:

Opisałem Ci tylko piny o kóre pytałeś. Twój moduł ma jeszcze kilka innych fajnych sygnałów:

SI/WU - Send Immediate/WakeUp czyli "Wyślij natychmiast/ Obudź" służy właśnie do wymuszenia wysłania tego, co już jest zgromadzone w FIFO nadajnika. Drugą funkcją jest wybudzenie tej gałęzi USB w przypadku, gdy komputer ją uśpił. Jeśli ten sygnał podłączysz do procesora, to normalnie wystaw tam stan wysoki. Jeśli nagle zapragniesz by dane właśnie wepchnięte do FIFO znalazły się jak najszybciej w PC, to robisz tu krótki impuls do stanu 0 i.. poszło.

CBUS5, CBUS6 - Dwa sygnały, których funkcje możesz sam ustawić przy pomocy specjalnego programu zmieniającego zawartość wewnętrznej, nieulotnej pamięci konfiguracyjnej scalaka FTDI. Soft ściągasz ze strony producenta i masz tam mnóstwo opcji dotyczących np. wpisania numeru seryjnego, nazwy urządzenia jaka będzie prezentowana podczas enumeracji, trybu pracy (self- lub bus-powered) oraz m.in. właśnie funkcji tych dwóch sygnałów. Opis możliwości sygnałów CBUSn jest w tabelce jest na stronie 11 w pdf. Domyślne ustawienia po wyjściu z fabryki są takie:

CBUS5: VBUS_SENSE - podłączasz do VBUS USB w trybie self-powered, dzięki czemu układ wie, że został do USB podłączony i może rozpocząć procedurę "zgłaszania się" do hosta,

SBUS6: Keep_Awake# - wymuszając tu stan niski możesz tu zabronić scalakowi wejście w tryb suspend po odłączeniu od USB

Jeśli czegoś tu nie rozumiesz, pytaj.

Jaką prędkość? To, że od strony PC interfejs "wygląda" jak port szeregowy to tylko ukłon w stronę ludzi umiejących go obsługiwać programowo. Tu nigdzie na drodze danych nie masz rzeczywistego asynchronicznego UARTa więc cokolwiek ustawisz, i tak będzie wykorzystywana maksymalna przepustowowość USB. Inaczej w przypadku układów typu FT232 i podobnych, gdzie rzeczywiście na "końcu" był port szeregowy i dane "wypadały" z tego końca z taką prędkością jaką ustawiłeś w setupie portu szeregowego PC. Na szczęście to nie jest ten przypadek.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

no to w takim razie mam pytanie ...

skoro TFDI widzę jak com port a ja pisze aplikacje to w aplikacji musze ustawić polaczenie, podaje nr com portu no i musze podać jakieś ustawienia prędkość, bit stopu i etc.

wiec co mam tam wpisać ? aby odbierane dane były poprawne ?

Link do komentarza
Share on other sites

Numer portu to jasne bo to definiuje konkretny interfejs ale reszta ustawień formatu danych jest nieistotna - ma nadzieję, że już zrozumiałeś tę abstrakcję portu szeregowego. Dane nie przechodzą nigdzie przez łącze asynchroniczne z bitami startu, stopu i jakimś baudrate'm na który umówiły się obie strony więc transfer zawsze będzie poprawny. Czy flashdisk na USB umawia się z kompem na jakąś prędkość transmisji? No właśnie... Jeśli wciąż potrzebujesz konkretny zestaw to proponuję: 9600,n,8,1 - to jeden z moich ulubionych 🙂

Link do komentarza
Share on other sites

Oki Marek ... załapałem ... później na to wpadłem tez 🙂 ze na wyborze coma się kończy , reszta mnie nie interesuje 🙂 w sumie fajnie 🙂 mniej problemów 🙂

wielkie dzięki za wyczerpującą pomoc.

pozdrawiam

Ultimion

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.