mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mehr Speed in FT245 BitBang


Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

neulich hatte ich ein Frage zu I²C via FT245.
Beitrag "I2C @USB via FT245"

Die Umsetztung im BitBang Modus funktioniert so weit - damit ist keine 
"zweite Intelligenz" (Tiny15) nötig, die die WR und RD-Leitungen 
bedient.

Soweit so gut, ABER: Die Übertragungsgeschwindigkeit läst sehr zu 
wünschen übrig, mehr wie 250Hz (500 1/s die Pins toggeln) ist nicht 
drin.
Lt. Application Note von FTDI sind theoretisch 3MBaud (!!) möglich.
Verschiedene Einstellungen der Baudrate über FT_SetBaudRate habe ich 
schon probiert, aber die werden ignoriert :-(

Ein zweistelliger kHz-Bereich würde mir schon reichen.....

Weiß jemand, wie ich mehr Speed raushole?


Gerd


Der Code in VB6
private sub TogglePin
For i = 1 To 1000
        Sende2 &HFF
        Sende2 &H0
Next
end sub
--------------------------------------------------------------                          
Public Function Sende2(ByVal Daten As Byte) As Boolean
 
' BitBang initialisieren
    If FT_SetBitMode(lngNumDevices, bytChOut, &H1) <> FT_OK Then ' set 1 for each output, $H1 for bitbang
        Sende2 = False
        Exit Function
    End If
    

If FT_Write(lngNumDevices, Chr(Daten), 1, lngBytesWritten) <> FT_OK Then
        Sende2 = False
    Else
        Sende2 = True
    End If
End Function

-------------------------------------------------------------- 
 
Public Function Open_USB() As Boolean

Open_USB = True
If FT_GetNumDevices(lngNumDevices, vbNullString, FT_LIST_BY_NUMBER_ONLY) <> FT_OK Then
    Open_USB = False
    Exit Function
End If
 
If FT_ListDevices(0, strDescription, FT_LIST_BY_INDEX Or FT_OPEN_BY_DESCRIPTION) <> FT_OK Then
    Open_USB = False
    Exit Function
End If
 
If FT_ListDevices(0, strSerialNumber, FT_LIST_BY_INDEX Or FT_OPEN_BY_SERIAL_NUMBER) <> FT_OK Then
    Open_USB = False
    Exit Function
End If
 
If FT_Open(0, lngNumDevices) <> FT_OK Then
    Open_USB = False
    Exit Function
End If
End Function
 --------------------------------------------------------------
Public Function Close_USB() As Boolean
  If FT_Close(lngNumDevices) <> FT_OK Then
  End If
End Function

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nicht im Bitbangmodus. Für den muss für jedes Gewackel ein 
USB-Paket übertragen werden, und das geht nicht schneller als im 
1msec-Raster.

Wenn Du ein serielles Protokoll wie SPI, I²C oder JTAG implementieren 
willst, solltest Du Dir die MPSSE des FT2232 ansehen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gerd (Gast)

>Soweit so gut, ABER: Die Übertragungsgeschwindigkeit läst sehr zu
>wünschen übrig, mehr wie 250Hz (500 1/s die Pins toggeln) ist nicht
>drin.

Tja, reines "dummes" Bit-Bang ist bei USB langsam. Da kann man max. 1 
kHz Zugriffsrate erreichen, nämlich die USB Rahmenfrequenz.

>Lt. Application Note von FTDI sind theoretisch 3MBaud (!!) möglich.
>Verschiedene Einstellungen der Baudrate über FT_SetBaudRate habe ich
>schon probiert, aber die werden ignoriert :-(

Das muss man in den speziellen Modi machen. Keine Ahnung wie es genau 
funktioniert.

MfG
Falk

Autor: Andreas Weschenfelder (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auszug:

AN232R-01 Bit Bang Modes for the FT232R and FT245R:

FT_Write
Data can be written to the device in Asynchronous Bit Bang mode using 
the
FT_Write command. If multiple bytes are written to the device the values
on the pins will change at the rate set by FT_SetBaudRate.


-> Soll heißen, schreib ein Array runter und nicht immer nur 1 Byte, 
dann wird entsprechend schneller...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Andreas Weschenfelder (rupplyn)

>-> Soll heißen, schreib ein Array runter und nicht immer nur 1 Byte,
>dann wird entsprechend schneller...

Aber nur solange du nur schreibst und nicht zwischendurch liest. Und das 
musst du nach jedem Bit beim lesen von I2C.

MFG
Falk

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke zusammen, wenn auch nicht die erhoffte "frohe Kunde" dabei war! Es 
scheint, als ob ich doch wieder den Weg mit der "zweiten Intelligenz" in 
Betracht ziehen muss...
Ich habe parallel vom FTDI-Support folgende Mail bekommen:

Hello,
The FT245R chip was not meant for I2C transfer and therefore bit banging 
an I2C interface will be very slow.
I recommend that you look at the FT2232D chip if you wish to create an 
I2C interface. This chip has a MPSSE engine that will allow you to set 
up an I2C interface that work at considerable higher speed than the 
FT245R chip in bit bang mode. The relevant documents that you will need 
to look at are below:

http://www.ftdichip.com/Documents/ProgramGuides.htm look at the 
FT_SetBitMode function to put the device into MPSSE mode.

http://www.ftdichip.com/Documents/AppNotes/AN2232C... 
opcode that you need to send to the MPSSE engine to set up the I2C 
interface

http://www.ftdichip.com/Products/FT2232C.htm example I2C project

http://www.ftdichip.com/Projects/MPSSE/FT2232C-Pro... document 
for this project

http://www.ftdichip.com/Projects/MPSSE/FT2232C-Pro... source 
code for the project

Autor: KlaRa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerd,
Ursache für die schlechte Performance ist die Latenzzeit. Nach jedem 
Steuerbefehl tritt sie auf und läßt sich nur auf 2 ms begrenzen.
Es geht aber auch mit I2C über BitBang schneller. Allerdings nur wie 
schon erwähnt durch das Übertragen von Blöcken. Dabei kann beim Senden 
gleichzeitig auch gelesen werden. Leider kann man aber nur einen Block 
am Stück senden und danach den Block zu Lesen am Stück laden. D.h., man 
kann erst nach erfolgtem Transfer analysieren was als Antwort der 
einzelnen Bytes so eingegangen ist.
Dieses Verfahren mag für einen PCF8574 ausreichend sein, nur beim DS1631 
hatte ich schon hier und da Probleme. Man kann hierbei eben nicht auf 
Clockstretching langsamer I2C-Clients reagieren.
FDTI bietet für den FT2232 auch eine I2C-Lib an. Nur scheint man damit 
das Speichern und Auslesen von I2C-Speicher getestet zu haben. Beim 
simplen PCF8574 konnte ich den zwar mit über 100 KHz ansteuern, aber 
leider nicht auslesen.
Ansonsten war dieses Konzept schon bestechend gut.

Jetzt bin ich auf den MSP430 gekommen. TI hat hier das I2C-Protokoll 
sehr präzise umgesetzt und sehr gut dokumentiert. Die I2C-Lib, 
slaa368.pdf, habe ich leider auch nicht zum Laufen bekommen, aber zu 
mindest die Examples wie msp430x20x3_usi_06.c laufen. Ich habe sie mit 
Erfolg verwenden können. Man kommt über 100 KHz Taktfrequenz.
Gruss Klaus.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KlaRa wrote:

> Jetzt bin ich auf den MSP430 gekommen. TI hat hier das I2C-Protokoll
> sehr präzise umgesetzt und sehr gut dokumentiert.

Naja, Hardware-I²C gibt's wohl bei einigen gängigen Microcontrollern.
Musst halt dann bloß eine Anbindung zum PC bauen.  Im Prinzip haben
die Mainboards vieler PCs bereits I²C drauf, aber das ist nicht
rausgeführt.

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo KlaRa,

gelten die 2ms Latenzzeit auch, wenn ich nicht BitBang sondern den Weg 
über "COMx:" gehen würde?
Kannst Du  die Init für Deine "schnelle" BitBang-Variante posten?


Gerd

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.