FT2232H: USB --> SPI Kommunikationsfehler

Gast #5097928
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
#5098534
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?
Persönliche Seite #5098790
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.ä.
Gast #5107427
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 :(
Gast #5110649
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

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