mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FT2232D in einem PML2232


Autor: Clemens Horak (chorak)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen PML2232 mit einem FT2232D und versuche Daten mittels SPI 
an ein externes Device zu versenden. Mein Logicanalyzer erkennt aber 
keinen Pin der High wäre.

Ich habe mich an die Codevorlagen und Beispielprogramme von 
www.ftdichip.com gehalten und ich erhalte auch immer ein Success bei 
Write oder auch bei SetGPIOs, trotzdem ist keine Veränderung zu 
erkennen. GetGPIOs gibt immer zurück, dass alle Pins low sind.

Mit dem FT_Prog von FTDI habe ich gesehen, dass es eine Blankdevice 
ist(EEPROM ist leer), das sollte aber eigentlich nicht stören.

Ich habe auch beide dlls (FTCSPI.dll und FTD2XX.dll) mit deren Methoden 
ausprobiert, auch erfolglos.

Vielleicht hat irgendjemand eine Idee was ich falsch mache.

mfg CH

Datasheets:

FT2232: http://www.ftdichip.com/Documents/DataSheets/DS_FT2232D.pdf

PML2232: 
http://www.b-redemann.de/download/88Downloads-Shop...

Sourceauszüge (kompletter Source angehängt):

FT_Status = SPI_Open(ref ftHandle);
...
FT_Status = SPI_InitDevice(ftHandle, clockDivisor);
...
FTC_CHIP_SELECT_PINS chipSelectPins;
chipSelectPins.bADBUS3ChipSelectPinState = true;
chipSelectPins.bADBUS4GPIOL1PinState = true;
chipSelectPins.bADBUS6GPIOL3PinState = true;
chipSelectPins.bADBUS7GPIOL4PinState = true;

FTC_INPUT_OUTPUT_PINS inputOutputPins;
inputOutputPins.bPin1InputOutputState = true;
inputOutputPins.bPin1LowHighState = false;
inputOutputPins.bPin2InputOutputState = true;
inputOutputPins.bPin2LowHighState = true;
inputOutputPins.bPin3InputOutputState = true;
inputOutputPins.bPin3LowHighState = true;
inputOutputPins.bPin4InputOutputState = true;
inputOutputPins.bPin4LowHighState = true;

FT_Status = SPI_SetGPIOs(ftHandle, ref chipSelectPins,ref 
inputOutputPins);
...
FTC_INIT_CONDITION initConditions;
initConditions.bChipSelectPinState = false;
initConditions.bClockPinState = false;
initConditions.bDataOutPinState = false;
initConditions.ChipSelectPin = ADBUS3ChipSelect;

byte[] WriteControlBuffer = new byte[WRITE_CONTROL_BUFFER_SIZE];
byte[] WriteDataBuffer = new byte[WRITE_DATA_BUFFER_SIZE];

bool bWriteWait = false;

uint NumDataBitsToWrite = 2;
uint NumDataBytesToWrite = 2;

FTC_WAIT_DATA_WRITE WaitDataWriteComplete;
WaitDataWriteComplete.bWaitDataWriteComplete = true;
WaitDataWriteComplete.WaitDataWritePin = ADBUS2DataIn;
WaitDataWriteComplete.bDataWriteCompleteState = true;
WaitDataWriteComplete.DataWriteTimeoutmSecs = 50;

FTC_HIGHER_OUTPUT_PINS HighPinsWriteActiveStates;
HighPinsWriteActiveStates.bPin1State = true;
HighPinsWriteActiveStates.bPin1ActiveState = true;
HighPinsWriteActiveStates.bPin2State = true;
HighPinsWriteActiveStates.bPin2ActiveState = true;
HighPinsWriteActiveStates.bPin3State = true;
HighPinsWriteActiveStates.bPin3ActiveState = true;
HighPinsWriteActiveStates.bPin4State = true;
HighPinsWriteActiveStates.bPin4ActiveState = true;

int WriteDataWordAddress = 0;

int ControlLocAddress1 = 0xA0;
ControlLocAddress1 = (ControlLocAddress1 + ((WriteDataWordAddress / 8) & 
0x0F));
int ControlLocAddress2 = ((WriteDataWordAddress & 0x07) * 32);

WriteControlBuffer[0] = (byte) '\x20';
WriteControlBuffer[1] = (byte) '\x10';

short DataWord = 0;

WriteDataBuffer[0] = (byte)(DataWord & 0xFF);
WriteDataBuffer[1] = (byte)((DataWord >> 8) & 0xFF);

FT_Status = SPI_Write(ftHandle, ref initConditions, true, false, 2,
WriteControlBuffer, 2, bWriteWait, NumDataBitsToWrite, WriteDataBuffer,
NumDataBytesToWrite,ref WaitDataWriteComplete,ref 
HighPinsWriteActiveStates);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Clemens,

ich besitzte auch ein PML2232 Modul und hatte am Anfang ähnliche 
Probleme. Wie hast du denn VCCIOA und VCCIOB verdrahtet?. Die sind beim 
PLM2232 offen und müssen je nach verwendeter Spannung mit 3,3V oder 5V 
verbunden werden.

Grüße Peter

Autor: Clemens Horak (chorak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe beide nicht verdrahtet, wusste nicht, dass das nötig ist, die 
Jumper sind auf Bus-Powered gestellt, daher dachte ich die 
Stromversorgung rennt über USB und muss nicht extern hergestellt werden.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat nichts mit externer Stromversorgung zu tun. Über die beiden 
VCCIOs Pins wird festgelegt mit welcher Spannung die IOs arbeiten. Lässt 
man die Pins offen kommt halt nichts aus den Ausgängen heraus. Man 
könnte auch z.B. VCCIOA mit 3.3V verbinden und VCCIOB mit 5V dann 
arbeiten die A-IOs mit 3.3V und die B-IOs mit 5V.

Grüße Peter

Autor: Clemens Horak (chorak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, dass werd ich gleich ausprobieren, danke!

lg Clemens

Autor: Clemens Horak (chorak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nun für Port A die Pins 1 und 16 verbunden und siehe da es 
funktioniert.

Vielen Dank für Deine Hilfe.

lg Clemens

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.