Forum: Mikrocontroller und Digitale Elektronik FT232R CBUS paralleles Interface Geschwindigkeit.


von Gustl B. (-gb-)


Lesenswert?

Hallo,

es gibt da ja den FT232R, den habe ich auch schon oft als UART verwendet 
mit 3 MBaud. Aber der hat ja noch den CBUS und kann da synchrones 
Bitbang machen. Dazu habe ich zwei Fragen:

1. Welche Datenrate bekommt man da maximal hin?
2. Kann man den CBUS irgendwie als GPIOs verwenden? Ich hätte gerne 
einen USB nach GPIO Stein.

Vielen Dank!

von Gerd E. (robberknight)


Lesenswert?

Gustl B. schrieb:
> Aber der hat ja noch den CBUS und kann da synchrones
> Bitbang machen. Dazu habe ich zwei Fragen:
>
> 1. Welche Datenrate bekommt man da maximal hin?

Schnarchlangsam. Die Schnecken überholen rechts und links.

Das Problem vom CBUS ist, daß Du in einem ganzen URB nur ein Update des 
CBUS machen kannst und dann auf die Antwort warten musst bevor Du den 
nächsten senden kannst.

Bei UART, normalem Bitbang etc. kannst Du viele neue Daten in einem URB 
zusammenfassen und auf einmal senden. Der FTDI haut die dann 
nacheinander raus.

> 2. Kann man den CBUS irgendwie als GPIOs verwenden? Ich hätte gerne
> einen USB nach GPIO Stein.

Ja klar, das geht. Aber es gehen nur 4 GPIOs über CBUS, schau im 
Datenblatt welche es sind.

Für normale GPIOs ist meist das Bitbang besser geeignet, weil schneller 
und mehr Pins. Die CBUS-Pins sind eher für langsame Zusatzdinge 
geeignet. Z.B. funktionieren die gut um einen Reset des µC oder 
Aktivierung eines Bootloaders zu machen.

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


Lesenswert?

OK, also wenn ich das als GPIOs verwende wäre mir die Datenrate 
eigentlich egal solange ich ein definiertes Timing bekomme. Geht das, 
also dass man den einen GPIO genau x us nach einem anderen GPIO setzt?

Was will ich machen? Ich will einen Baustein 
http://www.ti.com/lit/ds/symlink/acf2101.pdf testen der ein paar IOs hat 
für Reset und Hold. Da möchte ich eine kleine Platine bauen mit USB und 
einem Stein der GPIOs hat dann kann ich mal die verschiedenen Zeiten 
durchsweepen.

von Gerd E. (robberknight)


Lesenswert?

Gustl B. schrieb:
> OK, also wenn ich das als GPIOs verwende wäre mir die Datenrate
> eigentlich egal solange ich ein definiertes Timing bekomme. Geht das,
> also dass man den einen GPIO genau x us nach einem anderen GPIO setzt?

Nein. Der Jitter ist viel zu hoch. Je nach Auslastung des 
USB-Controllers, Betriebssystems und und und springt das heftig.

Eigentlich sollte das synchrone Bitbanging genau das können was Du 
willst. Aber leider hat der FT232R in genau dem Bereich nen paar dicke 
Bugs, so daß auch da das Timing ziemlich durcheinander ist.

Hier sieht man schön was ich meine:
https://twitter.com/marcan42/status/695292366639378433

Dafür müsstest Du Dir einen neueren ICs von FTDI holen, diese Bugs sind 
bei den 2232H und der FTX-Serie gefixt.

> mal die verschiedenen Zeiten
> durchsweepen.

An etwas, was dem Begriff "durchsweepen" auch nur ansatzweise gerecht 
wird, ist mit CBUS nicht zu denken.

von Gustl B. (-gb-)


Lesenswert?

Danke. Hm, dann verbaue ich doch lieber ein paar Buchsen und schließe 
das an ein FPGA-Board an.

von Gerd E. (robberknight)


Lesenswert?

Gustl B. schrieb:
> Danke. Hm, dann verbaue ich doch lieber ein paar Buchsen und schließe
> das an ein FPGA-Board an.

Das klingt viel vernünftiger. Da wird das Timing wird um Größenordnungen 
stabiler sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Geht das, also dass man den einen GPIO genau x us nach einem anderen
> GPIO setzt?

Vor allem nicht mit dieser zeitlichen Auflösung, das ist um drei 
Zehnerpotenzen langsamer. USB-Transaktionen gibt es nur im 
Millisekundentakt, d.h. Du kannst nur alle paar Millisekunden die GPIOs 
ändern.

von Gustl B. (-gb-)


Lesenswert?

OK, wie sieht es mit einen uC aus der USB kann wie manche kleinen PICs. 
Da könnte ich doch ein Programm drauf laufen lassen, das je nach 
USB-Befehl eine bestimmte Timingsequenz durchfährt. Bekommt man da 
stabile Timings mit us Auflösung?

von Gerd E. (robberknight)


Lesenswert?

Gustl B. schrieb:
> OK, wie sieht es mit einen uC aus der USB kann wie manche kleinen PICs.
> Da könnte ich doch ein Programm drauf laufen lassen, das je nach
> USB-Befehl eine bestimmte Timingsequenz durchfährt.

klar, das ginge. Du musst halt das Programm für den µC schreiben.

> Bekommt man da
> stabile Timings mit us Auflösung?

Ich kenn mich mit den kleineren PICs nicht aus.

Aber z.B. mit einem STM32F042 oder STM32F072 wäre das gut machbar. Die 
können entweder ohne Quarz betrieben werden und dann den internen 
RC-Oszillator an den USB-Signalen kalibrieren oder mit Quarz betrieben 
werden. Für stabileres Timing würde ich die Variante mit Quarz 
bevorzugen.

Du könntest natürlich auch einen anderen µC ohne USB nehmen den Du noch 
rumliegen hast und mit dem Du schon Erfahrung hast. Dann nimmst Du 
Deinen FT232R und nimmst ihn als USB-UART-Wandler (wofür er eigentlich 
gedacht ist) und sprichst damit per UART mit Deinem µC. Und der macht 
dann Deine Frequenz-Sweeps.

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


Lesenswert?

Stimmt, das ginge auch. Welcher kleine/billige/leicht zu lötende/ohne 
viel externe Beschaltung uC kann denn sowohl über USB angesprochen 
werden (also z. B. wie ein UART über Python) als auch über USB 
programmiert werden? Ich würde gerne nur eine USB Buchse haben und nicht 
noch zusätzlich ein ISP Dingens. Mit uC habe ich fast keine Erfahrung, 
bin eher in der FPGA-Welt zuhause. Gibt es eigentlich einen FPGA den man 
ohne Programmieradapter direkt über USB bespaßen kann? Bei 
https://tinyfpga.com sieht es danach aus. Das wäre natürlich auch eine 
Möglichkeit aber wohl deutlich komplizierter als ein uC.

von Gerd E. (robberknight)


Lesenswert?

Gustl B. schrieb:
> Stimmt, das ginge auch. Welcher kleine/billige/leicht zu lötende/ohne
> viel externe Beschaltung uC kann denn sowohl über USB angesprochen
> werden (also z. B. wie ein UART über Python) als auch über USB
> programmiert werden? Ich würde gerne nur eine USB Buchse haben und nicht
> noch zusätzlich ein ISP Dingens.

Beide von mir oben genannte STM32-µCs haben einen integrierten 
Bootloader für USB. Den kannst Du über einen Pin (BOOT0) im Moment des 
Resets in diesen Bootloader starten lassen und dann per USB eine neue 
Firmware senden.

Serielle Kommunikation (mit der USB-CDC-Klasse) geht natürlich auch.

Viel externe Beschaltung etc. ist für die eigentlich nicht nötig, nen 
paar Kondensatoren zum Entkoppeln und ich würde halt den externen Quarz 
empfehlen.

Ein passendes "ISP-Dingens" ist für die übrigens weder komplex noch 
teuer, such mal nach ST-Link V2, die gibts aus China für 2-3 EUR.

> Mit uC habe ich fast keine Erfahrung,

Du müsstest Dich zumindest ein bischen in die USB-Welt eindenken, mit 
Device-Deskriptoren, den verschiedenen Klassen etc. Und halt wie Du das 
auf dem µC umsetzt. Wobei es da natürlich auch viele Beispiele und 
Libraries für gibt.

Meine Empfehlung wäre nur, von CubeMX und der ST-HAL die Finger zu 
lassen, die machen einem meiner Meinung nach das Leben nur schwerer als 
nötig.

> bin eher in der FPGA-Welt zuhause. Gibt es eigentlich einen FPGA den man
> ohne Programmieradapter direkt über USB bespaßen kann?

Bei vielen FPGA-Develboards ist ein FTDI mit auf dem FPGA-Board mit 
drauf, der dann das SPI-Flash emuliert, welches den Bitstream in das 
FPGA lädt. Zusätzlich sind dann meist auch noch UART-Pins mit dem FPGA 
verbunden, so daß Du mit dem FPGA auch vom PC aus kommunizieren kannst.

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Gerd E. schrieb:
> Bei vielen FPGA-Develboards ist ein FTDI mit auf dem FPGA-Board mit
> drauf, der dann das SPI-Flash emuliert, welches den Bitstream in das
> FPGA lädt. Zusätzlich sind dann meist auch noch UART-Pins mit dem FPGA
> verbunden, so daß Du mit dem FPGA auch vom PC aus kommunizieren kannst.

hier z.B.:
ICE40HX1K-STICK-EVN

Wenn Du dagegen ein fertiges Eval-Board für die STM32er willst, dann 
schau Dir mal das STM32F072B-DISCO an.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es gibt auch 8-Bit-AVRs mit USB-Unterstützung, wie z.B. den Atmega32U4. 
Und der wird sogar von der Arduino-Umgebung unterstützt ("Arduino 
Leonardo" bzw. "Arduino Micro").

Unterstützung für CDC ist dort "bauseits" vorgegeben, das wird auf die 
Arduino-Klasse "Serial" umgebogen.

Wenn man das Arduino-Framework nicht mag, kann man auch die deutlich 
leistungsfähigere USB-Umgebung Lufa verwenden.

Den Atmega32u4 gibt es im QFN- und im TQFP-Gehäuse, letzteres ist dann 
doch etwas lötfreundlicher.

Für erste Experimente --egal ob mit der Arduino-Umgebund oder etwas 
anderem-- kann man aber einen der günstigen Nachbauten des "Arduino 
Micro" verwenden, der kostet nur ein paar Euro und hat gleich eine 
USB-Buchse mit drauf.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Wenn du einen STM32 mit USB nehmen möchtest, schau auch mal das
USB-Tutorial mit STM32 an.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Alternativ gäbe es auch einen MSP430 mit USB-Funktionalität, sogar auf 
einem Launchpad:

http://www.ti.com/tool/MSP-EXP430F5529LP

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.