Witam!
Jak zapisać bajt to określonej komórki w pamięci EEPROM większej niz 256 bajtów skoro wszystkie dane wysyłane przez I2C muszą byc typu BYTE?? A gdybym miał pamięć np 512 bajtów i chciałbym zapisac do np. 300 komórki??
Pamięc EEPROM
Z instrukcji zamieszczonej w tym pliku (pdf) wynika, że pierwszy bajt ma postać: dla pamięci 128B i 256B (co oznacza 128B = 128*8b = 1Kb, 256B = 256*8b = 2Kb).
Dla pamięci 512B (4Kb) pierwszy bajt ma postać: Przy czym końcówka oznaczona jako A0 jest nie podłączona.
Pamięć taka ma 2 strony (po 256B), które zmienia się bitem oznaczonym jako P0 w pierwszym bajcie (adresowym).
Pamięć można traktować jak 2 pamięci (2Kb każda) z identycznie podłączonymi A2 i A1, natomiast pinem A0 połączonym w jednej z nich do + , a w drógiej do - .
Dla pamięci 8Kb mamy tylko pin A2, natomiast wyprowadzenia A1 i A0 nie są podłączone, i analogicznie mamy 4 strony pamięci do wyboru adresem.
Następna w kolejności jest ostatnia pamięć 16Kb, ponieważ w przypadku większych pamięci mamy do czynienia z dwoma bajtami wyboru adresu pamięci.
Kod: Zaznacz cały
1, 0, 1, 0, A2, A1, A0, R/WDla pamięci 512B (4Kb) pierwszy bajt ma postać:
Kod: Zaznacz cały
1, 0, 1, 0, A2, A1, P0, R/WPamięć taka ma 2 strony (po 256B), które zmienia się bitem oznaczonym jako P0 w pierwszym bajcie (adresowym).
Pamięć można traktować jak 2 pamięci (2Kb każda) z identycznie podłączonymi A2 i A1, natomiast pinem A0 połączonym w jednej z nich do + , a w drógiej do - .
Dla pamięci 8Kb mamy tylko pin A2, natomiast wyprowadzenia A1 i A0 nie są podłączone, i analogicznie mamy 4 strony pamięci do wyboru adresem.
Następna w kolejności jest ostatnia pamięć 16Kb, ponieważ w przypadku większych pamięci mamy do czynienia z dwoma bajtami wyboru adresu pamięci.
- gwozdex
- Użytkownik
- Posty: 879
- Rejestracja: 24 lut 2006, 10:04
- Lokalizacja: Czechowice-Dziedzice
- Kontakt:
Kod: Zaznacz cały
Sub Zap_eeprom(byval Adres As Word , Byval Dana As Byte) 'procedura zapisu danej do EEPROM
Adr_h = High(adres) 'zapis do Adr_h bardziej znaczacej polowki adresu
Adr_l = Low(adres) 'zapis do Adr_l mniej znaczacej polowki adresu
I2cstart 'start transmisji
I2cwbyte Adr_w 'zapis adresu ukladu pamieci do zapisu
I2cwbyte Adr_h 'bardziej znaczacy adres komorki pamieci
I2cwbyte Adr_l 'mniej znaczacy adres komorki pamieci
I2cwbyte Dana 'zapis danej
I2cstop 'koniec transmisji
Waitms 7 'opoznienie 7 ms
End Sub 'koniec procedury
To ile w takim razie muszą wynosic Adr_h i Adr_l gdybym chciał zapisac do 512 komórki pamięci??
[ Dodano: 2008-04-13, 11:54 ]
Aha już wiem... Wszystko jest ok
Dla komórki np. z numerem 536 zmienna Adr_h będzie wynosiła 2 (2 * 256 = 512), a zmienna Adr_l będzie 24 (536 - 512 = 24)
Serdeczne dzięki i pozdrowienia
[ Dodano: 2008-04-13, 11:54 ]
Aha już wiem... Wszystko jest ok
Dla komórki np. z numerem 536 zmienna Adr_h będzie wynosiła 2 (2 * 256 = 512), a zmienna Adr_l będzie 24 (536 - 512 = 24)
Serdeczne dzięki i pozdrowienia