這裡比較特別的是, A8 是指要傳送的EEPROM位址的第 9個bit是存放在指令中的第 4個bit. 所以除非你要存取資料的EEPROM位置只在 0x00(0) ~ 0xFF(255)(0b000000000 ~ 0b011111111)的範圍內, 如果要存放的位置是0x80 (0b10000000) 時就得自行處理這address欄位中的第9個bit.
讀取順序(Read Sequence)
1. 先將CS腳位pull low.
2. 傳送8 bit 的Read指令
3. 傳送一個0x00的資料(主要是要將資料從buffer中推出來)
4. MCU端的SDI開始接收資料直到資料讀取完成
5. 最後將CS腳位pull high
寫入順序(Write Sequence)
1. 先將CS腳位pull low
2. 傳送WREN指令 (這裡是做Write Enable的命令發送)
3. 再將CS腳位pull high (如果這裡沒有先做將CS腳位pull high則接下來的寫入工作將都無法完成)
4. 接著再將CS腳位pull low
5. 傳送WRITE指令
6. 接著開始 “1個byte 1個byte將資料送到SDO上”
7. 完成所有資料寫入後再將CS腳位pull high
這裡需要注意的地方是:
1. 圖上所指的Lower Address Byte 中的A8 是指要傳送的EEPROM位址的第 9個bit是存放在指令中的第 4個bit. 所以除非你要存取資料的EEPROM位置只在 0x00(0) ~ 0xFF(255)(0b000000000 ~ 0b011111111)的範圍內, 如果要存放的位置是0x80 (0b10000000) 時就得自行處理這address欄位中的第9個bit.
簡單來說, 如果Lower Address Byte為256時,則要記得處理A8這個bit啦.
用最簡單的方法就是:
如果address >255時就設定A8這個位元.
2. 寫入(Write)資料時有分成兩種行為:
甲、 1個byte的資料寫入
乙、 1次寫一個page (一次寫一個page時要需注意page size)
{???}一個page有多大? 參考下圖就大概能明白… 裡頭寫著最大為16個bytes
讀取暫存器資料: EEPROM也有狀態暫存器(Status Register)
讀取暫存器資料順序: (RDSR)
1. 下達RDSR命令
2. 檢查:
a. WIP(Write In Progress)是否為 1 ? 如果WIP為1時則表示目前EEPROM正在進行寫入工作.
寫入保護(Write Protect)
一般而言,EEPROM都有一個WP的腳位,這主要是用來防止非期望的資料寫入.所以正常來說,比較嚴謹的做法應該要考慮到平常時設定EEPROM的狀態為Write Protect. 只有真正有需要要寫資料時才將WP腳位pull low.完成後再pull high. (當然啦,如果懶得做,好像也不會發生什麼事才是…)
讀取暫存器資料順序: (RDSR)
1. 下達RDSR命令
2. 檢查:
a. WIP(Write In Progress)是否為 1 ? 如果WIP為1時則表示目前EEPROM正在進行寫入工作.
寫入保護(Write Protect)
一般而言,EEPROM都有一個WP的腳位,這主要是用來防止非期望的資料寫入.所以正常來說,比較嚴謹的做法應該要考慮到平常時設定EEPROM的狀態為Write Protect. 只有真正有需要要寫資料時才將WP腳位pull low.完成後再pull high. (當然啦,如果懶得做,好像也不會發生什麼事才是…)