Gast
#274732
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