Forum: Mikrocontroller und Digitale Elektronik USB to SPI Bridge


von Andreas P. (petsche)


Angehängte Dateien:

Lesenswert?

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

von Andreas P. (petsche)



Lesenswert?

Sorry, die anderen Attachments fehlen noch.

von John-eric K. (mockup)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

hi, nimm nen  AT91SAM7S64, der hat usb schon drin und spi auch.
Der Rest ist nur noch Software.

von Emperor_L0ser (Gast)


Lesenswert?

@Martin
oder nimm ne Kanone und nen Spatz, nen ATTiny2313 und FTDI sollten das 
Problem locker lösen...

mfg Emperor_L0ser

von Andreas P. (petsche)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

Da der Tiny2313 zumindest einen Klecks RAM hat, kann er mit C Compilern 
programmiert werden. AVRGCC unterstützt den bestimmt.

von Michael U. (amiga)


Lesenswert?

Hallo,

>* Clock Frequency 13MHz

und welcher Tiny2313 macht seine 13MHz SPI-Clock???

Gruß aus Berlin
Michael

von Robert T. (robertteufel)


Lesenswert?

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
Noch kein Account? Hier anmelden.