Komunikacja przez USB pomiędzy dwoma uP

May 23, 2009 6 Replies

Witam !



Zrobiłem urządzenie na AT91SAM7S256. Ma ono port USB, który obecnie nie jest używany. Pojawiła się potrzeba przesłania do tego urządzenia sygnału z zewnętrznego czujnika. Wystarczy do tego przepustowość na poziomie 1 bajtu na sek. Mogę wbudować do czujnika klasyczny host i przesyłać dane zgodnie ze standardem USB. Zastanawiam się jednak czy nie można zrealizować takiej transmisji w jakiś prostszy sposób. Zmian sprzętowych w urządzeniu nie mogę zrobić ale mogę dowolnie modyfikować jego oprogramowanie. Po stronie czujnika nie ma żadnych ograniczeń.



Paweł


Przy takiej predkosci wykorystaj cokolwiek - 1wire, I2C itd. Calkowicie softwarowa realizacja takiego interfejsu i tak bedzie ktorsza i prostsza niz USB.

Tych urządzeń jest wiele. Są już zamontowane i nie można w nich dokonać żadnych sprzętowych zmian. Mogę jednak dowolnie zmodyfikować ich oprogramowanie. Urządzenie ma wolny tylko interfejs USB. Więc to jest jedyna droga wprowadzenia danych z czujnika. Jak już napisałem realizacja w czujniku hosta USB jest jakimś rozwiązaniem problemu choć nie jest to proste. Jeśli nie wymyślę nic innego to tak zrobię. Być może jednak można wykorzystać port USB w AT91SAM7S w jakiś niestandardowy sposób i przy jego pomocy zrealizować jakąś prymitywną komunikację.

Paweł

Paweł pisze:

W tych ARMach sygnały DDM, DDP są na dedykowanych pinach i nie są współdzielone z liniami I/O ogólnego przeznaczenia. Nie sądzę, aby tranceiver USB dało się wykorzystać w sposób niestandardowy.

Natomiast jeżeli przewidywałeś już wcześniej komunikację przez USB, musisz mieć przecież zrobioną po stronie ARMa detekcję napięcia zasilania z USB oraz wyprowadzony sygnał włączający pull-up linii D+. To wystarczy do trywialnej komunikacji dwukierunkowej z resztą świata a'la UART (dane w kierunku do ARMa lecą linią zasilania USB, dane w kierunku od ARMa to włączanie/wyłączanie pull-up'a linii DDP).

Detekcji nie mam. Potrzebna jest tylko po stronie hosta.

Paweł

Z tym hostem pomyliło mi się z detekcją napięcia na linii DDP. W urządzeniu nie mam jednak detekcji napięcia zasilana. Nie była ona konieczna. Urządzenie jest zasilane przez złącze USB (nie z PC tylko z zewnętrznego zasilacza).

Pytanie przy okazji. W następnych wersjach urządzenia mogę podłączyć jakiś pin IO z uP przez rezystor do linii DDM i użyć go do komunikacji szeregowej. Jednak w AT91SAM7S podczas resetu na chwilę przejdzie on na 1. Czy z tego powodu nie wystąpią problemy z wykrywaniem tego urządzenia na porcie USB w PC ?

Paweł

Paweł pisze:

To zamiast rezystora zastosuj tranzystor P-MOS, którym wysterujesz N-MOSa podciągającego linię DDM. Podczas resetu procki AT91SAM7 wystawiają jedynkę na wszystkich liniach I/O, co nie spowoduje włączenie tranzystora. Parę komplementarną MOS znajdziesz nawet w małych

6-pinowych obudowach SOT.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required