User manual
RP6 ROBOT SYSTEM - 3. RP6 CONTROL Library
Wie gesagt – normalerweise benötigen Sie die SPI Funktionen nicht. Diese werden
aber von den im Folgenden beschriebenen Funktionen verwendet, um auf das am SPI
Bus angeschlossene EEPROM zuzugreifen.
uint8_t SPI_EEPROM_readByte(uint16_t memAddr)
Liest ein einzelnes Byte an Adresse „memAddr“ aus dem EEPROM aus. Die Addresse
darf bei unserem 32 KB großen EEPROM im Bereich von 0 bis 32767 liegen.
Beispiel:
// Wir lesen in der folgenden Zeile ein Byte von Adresse 13860 aus dem EEPROM:
uint8_t data = SPI_EEPROM_readByte(13860);
void SPI_EEPROM_readBytes(uint16_t startAddr, uint8_t *buffer, uint8_t length)
Liest beginnend bei Adresse „startAdr“ bis zu 255 Bytes (length) in ein entsprechend
großes Array (buffer).
void SPI_EEPROM_writeByte(uint16_t memAddr, uint8_t data)
Speichert ein Byte (data) an einer bestimmten Adresse (memAddr) im EEPROM.
void SPI_EEPROM_writeBytes(uint16_t startAddr, uint8_t *buffer, uint8_t length)
Speichert bis zu 64 Bytes (length) im Array „buffer“ beginnend bei „startAddr“ im
EEPROM.
Bitte beachten Sie, dass nur 64 Bytes auf einmal geschrieben werden
können. 64 Bytes ist die Seitengröße (Pagesize) des EEPROMs und
mehr kann es nicht zwischenspeichern bevor es die Daten schreibt.
Ausserdem müssen die Daten die hintereinander geschrieben werden
sollen immer innerhalb einer Seite liegen, also z.B. zwischen 0 und 63,
64 und 127, 128 und 191 ...! Bei überschreiten der Seitengröße, über-
schreibt das EEPROM sonst wieder die Daten zu beginn der jeweiligen
Seite. Sie können natürlich z.B. bei Adresse 50 mit dem Schreiben be-
ginnen, aber wenn mehr als 14 Bytes geschrieben werden, beginnt der
Adresszähler wieder bei 0 und überschreibt die dort im Zwischenspei-
cher bereits vorhandenen Daten.
Beim Lesen von Daten aus dem EEPROM müssen Sie die Seitengröße
übrigens nicht beachten und können theoretisch auch das komplette
EEPROM auf einmal auslesen.
Das EEPROM benötigt 5ms um die Daten zu schreiben. In dieser Zeit kann man nicht
auf das EEPROM zugreifen. Um den aktuellen Status abzufragen kann die Funktion
uint8_t SPI_EEPROM_getStatus(void);
verwendet werden. Man kann dann z.B. mit
if(!(SPI_EEPROM_getStatus() & SPI_EEPROM_STAT_WIP)) {
// ...
}
abfragen ob das EEPROM nicht mehr mit dem Schreiben von Daten beschäftigt ist.
Das machen die Funktionen oben aber auch schon selbst, also benötigt man das nur,
wenn man in der Zeit noch andere Dinge erledigen muss!
- 17 -