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
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.
@ 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
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...
@ 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
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-01_MPSSE_Cmnd.pdf
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-Proj02_v11.pdf document
for this project
http://www.ftdichip.com/Projects/MPSSE/FT2232C-Proj02_I2C_v11.zip source
code for the project
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.
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.
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