www.mikrocontroller.net

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


Autor: Kohler Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

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

Gruß
Martin

Autor: Bert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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().

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.