SPI EEPROM - Qualche domanda

Ciao a tutti, ho scritto un programma per leggere i dati memorizzati su una eeprom da 1kbyte.
Il programma funziona ma non so se sto leggendo l’intero file o viene perso qualcosa all’inizio, mi spiego meglio:

SPI.transfer(0x03);
SPI.transfer(0x00);
SPI.transfer(0x00); <----???

for(int i=0;i<1000;i++){
byte bbb = SPI.transfer(0x00);
buffer1 = bbb;

  • }*
    Il programma funziona, ho allegato il datasheet e a pag 23 si può vedere come funziona la trasmissione.
    Quello che non ho capito è se SPI.transfer legge contemporqaneamente alla scrittura oppure restituisce un calore bufferizzato oppure restituisce il byte trasmesso successivamente alla scrittura.
    en.DM00043274.pdf (776 KB)

Per come funziona il protocollo SPI, durante il clock, avviene sia la lettura che la scrittura dei bit ...
... non per nulla, per leggere solamente si fanno delle finte scritture (es. con 0x00) dato che NON esiste una fase di sola lettura o una fase di sola scrittura.

QUI un po' di dettagli tecnici.

Guglielmo

Grazie per aver risposto, ho fatto alcune prove ed sembra che il clock si fermi e che il programma funzioni.

Avrei bisogno però di sapere se ho interpretato bene il datasheet, se il primo bit viene effettivamente trasmesso(dalla memoria) esattamente quando la memoria riceve il primo bit che segue i 3 byte dell'istruzione da eseguire.

Devi considerare che NON esiste una trasmissione senza ricezione, quindi c'è sempre uno scambio di bit ... quando tu mandi i comandi comunque arrivano dei bytes inutili e quando tu vuoi ricevere i dati che ti servono comunque devi scrivere dei bytes inutili proprio perché sul clock viene sia letto lo stato del pin MISO (master input slave output) che scritto il valore su MOSI (master output slave input).

Guglielmo

Ok, grazie ancora per aver risposto, credo di aver capito.
La parte che legge è finita, il codice scritto nel primo messaggio era corretto.
Secondo il datasheet per leggere la memoria da 1000Byte basta fare 1000 letture consecutive, ed è una cosa facile, ma la scrittura va eseguita una pagina alla volta.
Questi sono i dati riportati sul datasheet:
8 Kb (1 Kbyte) of EEPROM
Page size: 32 bytes

1000 non è perfettamente divisibile per 32, quindi come mi devo comportare con l'ultima pagina?

Emmm ... 1 KB = 1024 bytes che diviso 32 da esattamente 32 blocchi.

E lo dice pure nel datasheet ... pagina 6:

The M95080 devices are Electrically Erasable PROgrammable Memories (EEPROMs) organized as 1024 x 8 bits, accessed through the SPI bus.

Guglielmo

Ottimo... mi ero dimenticato che 1kbyte non sono 1000 byte.