Forum: PC-Programmierung FT2232H: USB --> SPI Kommunikationsfehler


von Lukas (Gast)


Lesenswert?

Hallo,

ich versuche im Rahmen einer Studienarbeit einen AD-Wandler mit 
SPI-Schnittstelle mit dem PC anzusprechen und zu steuern.
Deshalb habe ich ein FT2232H Mini Module gekauft.

Ich verzweifle an der Programmierung. An sich habe ich den Vorgang und 
den Ablauf verstanden, er funktioniert nur nicht.
Ich versuche im Moment als erstes mit einer Brücke zwischen MOSI und 
MISO einen Loopback zu erzeugen und meine gesendeten Daten wieder 
einzulesen. Das klappt nicht.

Hier die Fakten:
- Programmierung direkt mit der D2XX_Net (also ohne vorgefertigte 
Libary)
- Hardwareaufbau wurde mehrfach geprüft
- Wenn ein Byte gesendet wurde, bekomme ich immer "FA" und das gesendete 
Byte zurück --> Der uC denkt, dass es sich um einen Befehl handelt, 
erkennt also nicht, dass ich Daten senden möchte. Hier muss irgendwo der 
Fehler liegen.
- Programierung erfolgt in C#, da später ein automatisierter Ablauf mit 
mehreren Kommunikationsschnittstellen mit graphischer Überwachung am 
Bildschirm realisiert werden soll.

Im Anhang habe ich die relevanten Codeelemente zusammenkopiert.
Wenn noch Infos fehlen, bitte nachfragen!

Ich danke euch schonmal im Vorhinein für eure Mühen, mir bei meinem 
Problem zu helfen!

Gruß
Lukas

: Bearbeitet durch Moderator
von Gustl B. (-gb-)


Lesenswert?

Lukas schrieb:
> AD-Wandler mit
> SPI-Schnittstelle

Welchen denn? Oft übertragen die keine Bytes, sondern mehr als 8 Bits 
und man muss auch nicht von einer Adresse lesen sondern nur die 
Convert/Chipselect und eine Clock anlegen. Im Datenblatt ist bestimmt 
ein Timing abgebildet, hast Du das eingehalten? Was sagt der 
Logicanalyzer/Oszi?

Lukas schrieb:
> Ich versuche im Moment als erstes mit einer Brücke zwischen MOSI und
> MISO einen Loopback zu erzeugen und meine gesendeten Daten wieder
> einzulesen. Das klappt nicht.

Müsste das funktionieren? Kann SPI gleichzeitig senden und empfangen?

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Kann SPI gleichzeitig senden und empfangen?

Es kann gar nicht anders.

von Gustl B. (-gb-)


Lesenswert?

Ist das jetzt eine Spitzfindigkeit? Ich kenne SPI nur so wie hier im 
Bildchen: http://www.corelis.com/images/screenshots/spi-read-command.jpg 
Betrachtest Du das Anlegen einer Clock schon als Senden?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, das ist keine Spitzfindigkeit. Die von Dir dargestellte 
SPI-Variante ist schon eher eine Ausnahme; SPI sendet und empfängt 
gleichzeitig. Und ja, gesendet wird, sobald ein Takt anliegt, synchron 
zum Takt, ein Bit pro Zyklus.

Du hast da ein "intelligentes" Gerät, das erst antwortet, wenn es ein 
Kommando ("Instruction") erkennt, das ist also schon ein Protokoll, das 
über SPI abgewickelt wird.

Die SPI-Hardware in Deinem µC aber wird nichts davon wissen, die 
empfängt synchron mit dem Senden eines Bytes ein Byte (oder welche 
Wortgröße auch immer sie überträgt).

Wenn Du ein simples Schieberegister per SPI ansteuerst, wird es 
vielleicht klarer, das hat keine Kommandos, Adressen o.ä.

von Gustl B. (-gb-)


Lesenswert?

OK, habe ich bisher noch nicht gesehen. Bisher habe ich einen ADXL362, 
einen LIS3DH und diverse SPI ADCs angesprochen wie den LTC2325, bei den 
ADCs wird sogar nur empfangen siehe 
http://cds.linear.com/docs/en/datasheet/232516fa.pdf ab Seite 14.

Ich denke daher dass je nach ADC wird er mit einem SPI wie er es mit dem 
FT2232H betreiben kann nicht weiter kommen.

von Lukas (Gast)


Lesenswert?

So, die SPI-Kommunikation läuft seit ein paar tagen. Ich poste meinen 
Quellcode sobald ich ihn richtig kommentiert und formatiert habe.

Das nächste Problem ist jetzt aber der ADC: Das ID-Register kann ich 
richtig auslesen, alles andere Funktioniert nicht richtig.
Ich bin hier echt langsam am Verzweifeln :(

von Gustl B. (-gb-)


Lesenswert?

Wie wäre es mit mehr Information? Welcher ADC ist es denn?

von Lukas (Gast)


Lesenswert?

Es handelt sich um einen AD7176-2.

Das Problem hat sich aber nach einem Tag knobeln auch schon wieder 
erledigt. Eine falsche Registereinstellung hatte einen Error 
hervorgerufen.

(für alle, die es interessiert):
Anbei ist mein Code zur SPI-Kommunikation.

Gruß
Lukas

: Bearbeitet durch Moderator
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.