C programovanie - zapis a citanie z ext. EEPROM
Napísané: 07 Sep 2022, 23:01
Cavte,
Mozete mi prosim pomoct s datasheetom? Nieco vysvetlit, nieco potvrdit/vyvratit
Mam 4Mbit SPI EEPROM M95M04-DR do ktorej budem zapisovat cca 20 znakovy retazec kazdych 15 sek.
EEPROM ma Pages o velkosti 512bajtov. Nemam ziadne skusenosti s EEPROM. Teraz prvy krat stym idem pracovat.
Zapisovat kazdy znak retazca zvlast nie je problem, zadam prikaz write, adresu a znak. (Byte write within 5 ms). Takze 20 znakov cca 100ms. Nie je to problem.
No preco nevyuzit zapis celeho retazca naraz ako sequence write, zadam prikaz write, adresu a postupne posielam 20 znakov, kedze cely Page sa zapise za 5ms (Page write within 5 ms).
Ale neviem ako vyriesit prechod z jednej Page do druhej Page, aby mi neprepisalo data na zaciatku Page. Ako to vyriesit ked napr. 8-mi znak z 20 zapisovanych znakov ma uz byt zapisany na dalsi Page? Ako prerusit ten cyklus po siedmom byte a prehodit Page na dalsi a pokracovat pri 8 byte. Urcite ste to uz niekto sikovne vyriesili. Podelite sa o algoritmus popr. kod v C (bude to pre PIC MCU)? Nechcem vymyslat koleso ak uz existuje.
Citanie z po jednom bajte nechcem robit, lebo vycitat 512kB by mi po jednom bajte trvalo 42min. (512000 bajtov * 5ms = 2560 sek = 42min ).
Nie som si isty ako je to s Page pri citani dat? Tu nespominaju nic o Page.
To znamena ze pri citani sa nemusim zaoberat s problemom Page ako pri zapise?
Poslem prikaz Read, potom adresu a nakoniec tam posielam Dummy data napr. 0x00 a vycitam RX register, zase Dummy data a zase vycitam RX register atd dookola az kym potrebujem?
Pre kompletne vycitanie pamate mi staci poslat Read instrukciu, adresu 0x000000 a potom uz len Dummy bajty 524287 krat? To je vsetko? Samozrejme este Write Enable podla potreby. Este musim zistit ci Write Enable treba aktivovat stale pred kazdym zapisom, alebo len raz pri inicializacii MCU. Ak viete, napiste, nemusim testovat. Usetrite mi cas.
Aku ma ten IO pamat? 0 - 524287 (00000h - 7FFFFh)?
Toto je cisto pamat na data, alebo tam je zaratany aj status register? Asi nie...ze?
A este jedna otazka?
Ako je to s tym identification page? Z tohoto obrazka mi logicky vyplyva ze identification page je vlastne prvy page EEPROM. Cize sucast 0 - 524287 bajtov. Alebo nie a je to nieco navyse?
Dakujem vopred za reakcie, ozrejmenie a pomoc.
Mozete mi prosim pomoct s datasheetom? Nieco vysvetlit, nieco potvrdit/vyvratit
Mam 4Mbit SPI EEPROM M95M04-DR do ktorej budem zapisovat cca 20 znakovy retazec kazdych 15 sek.
EEPROM ma Pages o velkosti 512bajtov. Nemam ziadne skusenosti s EEPROM. Teraz prvy krat stym idem pracovat.
Zapisovat kazdy znak retazca zvlast nie je problem, zadam prikaz write, adresu a znak. (Byte write within 5 ms). Takze 20 znakov cca 100ms. Nie je to problem.
No preco nevyuzit zapis celeho retazca naraz ako sequence write, zadam prikaz write, adresu a postupne posielam 20 znakov, kedze cely Page sa zapise za 5ms (Page write within 5 ms).
Ale neviem ako vyriesit prechod z jednej Page do druhej Page, aby mi neprepisalo data na zaciatku Page. Ako to vyriesit ked napr. 8-mi znak z 20 zapisovanych znakov ma uz byt zapisany na dalsi Page? Ako prerusit ten cyklus po siedmom byte a prehodit Page na dalsi a pokracovat pri 8 byte. Urcite ste to uz niekto sikovne vyriesili. Podelite sa o algoritmus popr. kod v C (bude to pre PIC MCU)? Nechcem vymyslat koleso ak uz existuje.
Citanie z po jednom bajte nechcem robit, lebo vycitat 512kB by mi po jednom bajte trvalo 42min. (512000 bajtov * 5ms = 2560 sek = 42min ).
Nie som si isty ako je to s Page pri citani dat? Tu nespominaju nic o Page.
To znamena ze pri citani sa nemusim zaoberat s problemom Page ako pri zapise?
Poslem prikaz Read, potom adresu a nakoniec tam posielam Dummy data napr. 0x00 a vycitam RX register, zase Dummy data a zase vycitam RX register atd dookola az kym potrebujem?
Pre kompletne vycitanie pamate mi staci poslat Read instrukciu, adresu 0x000000 a potom uz len Dummy bajty 524287 krat? To je vsetko? Samozrejme este Write Enable podla potreby. Este musim zistit ci Write Enable treba aktivovat stale pred kazdym zapisom, alebo len raz pri inicializacii MCU. Ak viete, napiste, nemusim testovat. Usetrite mi cas.
Aku ma ten IO pamat? 0 - 524287 (00000h - 7FFFFh)?
Toto je cisto pamat na data, alebo tam je zaratany aj status register? Asi nie...ze?
A este jedna otazka?
Ako je to s tym identification page? Z tohoto obrazka mi logicky vyplyva ze identification page je vlastne prvy page EEPROM. Cize sucast 0 - 524287 bajtov. Alebo nie a je to nieco navyse?
Dakujem vopred za reakcie, ozrejmenie a pomoc.