mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB to SPI Bridge


Autor: Andreas Petschar (petsche)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Petschar (petsche)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, die anderen Attachments fehlen noch.

Autor: John-eric K. (mockup)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

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

Autor: Emperor_L0ser (Gast)
Datum:

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

mfg Emperor_L0ser

Autor: Andreas Petschar (petsche)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

>* Clock Frequency 13MHz

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

Gruß aus Berlin
Michael

Autor: Robert Teufel (robertteufel)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.