Hallo zusammen, Ich programmiere einen Controller von Cypress: CY7C68013A Daran angeschlossen ist ein Microchip 24LC128 I2C EEPROM. Als Software Umgebung kommt die Umgebung zum Einsatz, die mit dem EvalBoard CY3684 mitgeliefert wurde. - Cypress Libraries - Keil Compiler/Linker (4k limitierte Ausgabe) - uVision IDE Auf dem EEPROM will ich nun an bestimmten Adressen Daten schreiben und wieder zurücklesen. Dazu benötige ich Random Write und Random Read. Random Write funktioniert problemlos mit folgendem Code-Fragment: ----------------------------- ... // 128kbit eeprom i2c address BYTE eepromBaseAddress = 0x51; // data element to write to eeprom BYTE xdata eeprom_addr_data[] = { 0xFF, 0xFF, 0xFF }; ... eeprom_addr_data[0] = 0x00; eeprom_addr_data[1] = 0x02; eeprom_addr_data[2] = VENDOR_ID_H; EZUSB_WriteI2C(eepromBaseAddress, 0x03, &(eeprom_addr_data[0])); EZUSB_WaitForEEPROMWrite(eepromBaseAddress); ----------------------------- Für das Random Read muss gemäss Datenblatt des EEPROM folgende Sequenz eingehalten werden: - Start Condition - Control Byte: write - 2Byte Adresse - Re-Start Condition (ohne Stop) - Control Byte: read - Data Byte read - Stop Condition In der Cypress Lib stehen mir für den Zugriff auf das EEPROM folgende Methoden zur Verfügung: extern void EZUSB_InitI2C(void); extern BOOL EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata *dat); extern BOOL EZUSB_ReadI2C_(BYTE addr, BYTE length, BYTE xdata *dat); extern BOOL EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat); extern BOOL EZUSB_ReadI2C(BYTE addr, BYTE length, BYTE xdata *dat); extern void EZUSB_WaitForEEPROMWrite(BYTE addr); Wie erzeuge ich nun mit diesen Methoden die gewünschte Sequenz? Hat das schon mal jemand gemacht und kann mir Tipps geben? Dankbar für jede Hilfe, Martin
Guten Morgen, hast du hierfür eine Lösung gefunden? Bin gerade am selben Problem. Gruß Martin
Hallo zusammen, eventuell kapseln die I2C funktionen der Cypress Lib die ganzen I2C-Bus start und I2C-Bus stop schon weg. das würde auch erklären warum' s funktioniert mit deinem code. Schau doch mal in den definitionen der I2C funktionen der cypress lib nach aufrufen wie I2CStop() oder I2CStart().
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.