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/DS-PML2232.pdf 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);
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.