Forum: Mikrocontroller und Digitale Elektronik FT220x SPI Daten lesen (mit TI piccolo TMS320F28027)


von Dennis S. (shyd)


Lesenswert?

Hi,

schon seit längerem finde ich in diesem Forum immer passende Antworten 
auf meine Fragen. Doch diesmal ist es anders und ich habe mich hier 
angemeldet, um mein Problem zu erläutern:

Mein Vorhaben:
Per USB möchte ich Daten über einen FT220x an einen µC senden (hier ein 
TMS320F28027). Der µC ist SPI Master, da er die empfangenen Daten an 
einen weiteren Slave weitergeben soll.
Hier der Link zum Datenplatt: 
http://www.ftdichip.com/Products/ICs/FT220X.html

Was funktioniert:
Ohne Probleme lassen sich Daten von dem µC an den FT senden, sodass der 
FT diese über USB an einen virtual ComPort raushaut. (µC -> FT -> VCP)

Was nicht funktioniert:
Ich bekomme es nicht hin, nur die über den VCP an den FT gesendeten 
Zeichen per SPI auszulesen. (VCP -> FT -> µC)
Es kommen zwar die richtigen Zeichen an, allerdings nicht in der 
richtigen Anzahl. Mit anderen Worten: Woher weiß ich, wie viele Zeichen 
der FT noch im FIFO hat, die ich, also der µC, lesen kann? Auch in dem 
Datenblatt von FTDI habe ich nichts von einer Länge des FIFO gefunden.

Hoffentlich hat jemand von euch Erfahrungen mit dem Chip und kann mir 
weiterhelfen!

In diesem Sinne...
Gruß
Dennis

von Dennis S. (shyd)


Angehängte Dateien:

Lesenswert?

Nach erneutem "Auswendiglernen" des Datenblatts und Auswertung der SPI
Leitungen mit einem Oszi, ist es mir nun gelungen, den FT220x mittels
Software SPI anzusteuern!

Der FT220x/FT1248 sendet auf MIOSIO die Daten und gleichzeitig auf MISO
den Status.
Immer, wenn MISO 0xFF liefert, sind keine Daten im Fifo und die
Übertragung soll laut Datenblatt abgebrochen werden.
0xFE bekommen wir beim READ_REQ (0x02), wenn Daten im Fifo sind.
0x7F gibt der FT zurück, wenn der Fifo nach einem gelesenen Zeichen noch
nicht leer ist.

Um der Nachwelt zu helfen, habe ich meinen Code angehängt. Da ich in
meinem Projekt zwischen 3- und 4-wire SPI umschalten muss, gibt es
Funktionen im main(), die die GPIO Direction entsprechend ändern und
Pullups setzen. Da diese von µC zu µC unterschiedlich sind, habe ich sie
aus der Lib genommen.

Gruß
Dennis

//gelöscht und repost wegen Fehler in h-Datei

von Sven F. (madman-sf)


Lesenswert?

Super gute Lösung Dennis. Ich bin noch nicht so bewandert mit 
Microcontrolern und kannte noch nicht die Bit Banging Technik.
Sitze jetzt aber auch schon wieder eine Woche daran und bekomme es nicht 
zum laufen.
Mein Problem ist das ich nicht auf die 12 MHz komme die der FT220X für 
die SPI kommunikation benötigt.
Habe es sogar schon versucht über assambler code zu optimieren aber 
selbst dann habe ich zu wenige tacktzyklen zur verfügung um die 
kommunikation zu gewärleisten. Habe den microcontroler auch schon auf 96 
MHz übertaktet.

Wie ist es denn bei dir schaffst du die 12 MHz auf der SCK Leitung. Oder 
triggerst du langsamer?
Habe auch bei mir versucht langsamer zu triggern. Aber da kommt nix. 
Vielleicht habe ich den Tranciver bei mir auch schon kaput gemacht G.

Ich hoffe du kannst mir noch mal aus dem schlammassel helfen.

Ein verzweifelter
Sven

von Dennis S. (shyd)


Lesenswert?

Danke!
Wie schnell SCK läuft kann ich dir leider nicht sagen, da ich das Oszi 
nicht mehr zur Verfügung habe. Wenn mich nicht alles täuscht, lief es 
bei <= 8MHz, da ich auch ein RFM70 Modul mit gleichem Takt anspreche, 
das laut Datenblatt max. 8MHz mitmacht.
Wenn der FTDI bei 3.3V läuft, wirst du ihn wohl nicht kaputt gemacht 
haben. Funktioniert das Senden denn?
Häng doch am besten mal deinen Schaltplan an.

Gruß
Dennis

von Sven F. (madman-sf)


Lesenswert?

Das hat mir schon viel geholfen.
Glaube das ich beim Löten mist gebaut habe. Bin aber über das We nicht 
dahaim G, probier es dann am Montag noch mal.

von Dennis S. (shyd)


Lesenswert?

Beim SSOP kannst du es ja leicht kontrollieren. Wenn du aber QFN 
genommen hast, brauchst du ein Mikroskop!
Bei mir funktionieren zwei QFNs auf Anhieb :)
Wenn du keinen Löt-/Designfehler hast, sollte das Senden klappen. Mein 
µC läuft bei 60MHz und sendet/empfängt mit dem Code meiner Lib.
Man könnte sich also die SCK clock ausrechnen ;)

von ekrasser (Gast)


Lesenswert?

Ich habe den FT220x mit einem Nordic ARM Cortex-M0 laufen. Senden und 
Empfangen der USB-Daten funktioniert, nun möchte ich auch das interne 
EEPROM des FT220x nutzen.
Da gibt es das Kommando 5 (0x12 im Kommando Byte) zum Setzen der 
Adressen, und das Kommando 7 (0x16 im Kommando Byte) zum Auslesen des 
Speichers. Und ich erhalte nur Schrott-Daten.

Hat jemand das schon einmal erfolgreich durchgeführt? Habe beim 
FTDI-Support schon angefragt, die haben mich nur auf eine Application 
Note verwiesen, wesche ich eh schon durchstudiert habe.

Grüße
Edwin

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.