Hallo, Ich habe folgendes Problem. Für die Ansteuerung eines IC's benötige ich einen USB auf SPI Umsetzer. Leider hat das benötigte SPI Protokoll einige Besonderheiten, die von keinem Produkt bis jetzt erfüllt werden konnten: * Clock Frequency 13MHz * Ein Datentransfer besteht aus 3 Datenpaketen mit jeweils 16 Bits + Parity Bit. * Zwischen den einzelnen Datenpaketen wird die Anzahl der Flanken gezählt. Stimmt diese nicht mit den erwarteten 17 überein, wird eine Interrupt Leitung auf High gesetzt. Der Chip erkennt das Ende eines Datenpakets durch Clock Cycle High für eine längere Zeit (siehe SPI_Protocol.jpg)-> Gap Detection. * Es wird eine GPIO Pin benötigt, der den Interrupt erkenne kann * Clock Leitung ist im Idle Zustand High; die Daten werden vom Chip mit der Rising Edge übernommen, die Daten sollen vom SPI Master bei der fallenden Flanke geändert werden. Zur besseren Erklärung ist ein Bild des Protokolls beigefügt (SPI_Protocol.jpg). Mein erster Ansatz war die Verwendung des FTDI Chips FT2232H. Leider bin ich dabei auf das Problem gestoßen, dass die Idle Einstellung des Clocks immer auch das Verhalten beeinflusst, wann die Daten auf den Bus geschrieben werden. Die Bedingung Clock Idle auf High und mit steigender Flanke die Daten gültig, können so nicht erfüllt werden. Weiters kann ich die Bedingung für die Gap Detection (High Time des Clocks verlängern) nicht einfach erfüllen. Ein Versuch den Clock mit einem externen Inverter zu ändern funktioniert insofern, dass das Pattern stimmt (Clock im Idle Zustand und während der Clock Gap zwischen den Daten Paketen High; Anzahl der Flanken ok), jedoch werden die Daten durch den FTDI Chip nicht bei der fallenden Flanke geändert sonderen bereits während dem Clock High Zustand (siehe beigefügte png. Dateien). Die Lösung mit dem FTDI Chip habe daher schon ziemlich aufgegeben. Die nächste Idee wäre ein µC mit USB Schnittstelle. Da ich im Bereich USB nicht so fit bin, wäre eine API Lösung, wie die des FTDI Chips natürlich super. Damit wäre das Thema Datentransfer zwischen dem PC und dem SPI Interface schon gelöst. Am µC würde ich dann eine Firmware schreiben, die mit Hilfe eines Timers und Interrupts das gewünschte Protokoll erzeugt. Vielleicht hat jemand von Euch einen guten Tipp, welchen µC ich für die Problemlösung verwenden kann bzw. bereits Erfahrungen mit einer ähnlichen Problemstellung gemacht. Grüße, Andi
Wie wäre es mit nem FTDI FT232R also USB<-->Seriel und dann den µC! So hast du deine FTDI-API und im µC das Protokoll zu SPI
hi, nimm nen AT91SAM7S64, der hat usb schon drin und spi auch. Der Rest ist nur noch Software.
@Martin oder nimm ne Kanone und nen Spatz, nen ATTiny2313 und FTDI sollten das Problem locker lösen... mfg Emperor_L0ser
Hallo, Danke für die Tipps. Gibt es für den ATTiny2313 einen C-Compiler den man verwenden kann, oder muss man in Assembler programmieren? Könnt Ihr ein Starter-Kit empfehlen? Andi
Da der Tiny2313 zumindest einen Klecks RAM hat, kann er mit C Compilern programmiert werden. AVRGCC unterstützt den bestimmt.
Hallo,
>* Clock Frequency 13MHz
und welcher Tiny2313 macht seine 13MHz SPI-Clock???
Gruß aus Berlin
Michael
Emperor_L0ser schrieb: > @Martin > oder nimm ne Kanone und nen Spatz, nen ATTiny2313 und FTDI sollten das > Problem locker lösen... > > mfg Emperor_L0ser Warum um alles in der Welt muss man denn immer mit den minimalen Mitteln murxen? Der SAM7 ist schon das richtige Werkzeug, manchmal ist ein Bohrschrauber und ein Drehmomentschluessel einfach besser als der Schraubenzieher, vor allem wenn der Bohrschrauber biller ist. Der FTDI kostet ein kleines Vermoegen fuer das was er (alles nicht) kann. Ich wuerde evtl. den kleinsten STM32 dem SAM7 vorziehen, doch das ist ein bischen "Geschmackssache". Im uebrigen ist das mit den 13 MHz ein echtes Problem, falls das wirklich ein Muss ist. Schliesslich ist der SPI synchron und wenn die MCU der Slave ist, dann geht das auch mit 13 MHz, falls die MCU der Master ist, dann sind zusammen mit USB wohl eher 12 MHz angesagt. Gruss, Robert http://www.mcu-related.com
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.