Forum: Mikrocontroller und Digitale Elektronik Cypress CY7C68013A: I2C EEPROM 128k Read/Write Problem


von Kohler Martin (Gast)


Lesenswert?

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

von Bustle (Gast)


Lesenswert?

Guten Morgen,

hast du hierfür eine Lösung gefunden? Bin gerade am selben Problem.

Gruß
Martin

von Bert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.