USB to SPI Bridge

OP #1281854
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
Angehängte Dateien:
#1282415
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren