EEPROM AT24C16讀寫注意事項

2021-09-27 06:41:12 字數 2214 閱讀 7406

at24c16每頁有16個位元組,128頁,共2048位元組。128頁分成8塊,每塊256位元組。

i2c開始訊號後,第乙個位元組為器件位址,由1010+3位塊位址+1位讀寫標誌組成, 3位塊位址剛好可以表示8個塊, 8塊的器件位址分別為:0xa0、0xa2、0xa4、0xa6、0xa8、0xaa、0xac、0xae;

此處需特別說明,寫第一塊時,位址從0xa000~0xa0ff;寫滿後,需更新器件位址,從0xa200開始。如果寫到0xa0ff後繼續增加位元組,位址變為0xa100,此時資料不會寫到第二塊,而是從第一塊首位址開始覆蓋。 0xa100其實是讀資料位址。

讀資料時,不受頁、塊限制,可以從給定位址一直讀下去。

補充說明一點:

寫資料時,還受頁限制,用迴圈寫入資料時,一次最多只能寫入16個位元組,超出1頁位址的資料不能被寫入,也不會從頁開始覆蓋原有資料(這個跟塊有區別)

詳細一點說

/* 迴圈傳送 numbytetowrite 個資料 */

while(numbytetowrite--)   }

這樣乙個迴圈是不可以跨頁寫資料的。

儲存自己寫的兩個函式,以備以後用到,這兩個函式經實際應用無誤。

/*** @brief   在eeprom的乙個寫迴圈中可以寫多個位元組,但一次寫入的位元組數

*          不能超過eeprom頁的大小,at24c16每頁有16個位元組

* @param   

*        @arg pbuffer:緩衝區指標

*        @arg writeaddr:寫位址

*     @arg numbytetowrite:寫的位元組數

* @retval  無

*/uint32_t i2c_ee_pagewrite(u8* pbuffer, u16 writeaddr, u16 numbytetowrite)

i2c_generatestart(eeprom_i2c, enable);     /* 產生起始訊號 */

i2ctimeout = i2ct_flag_timeout;    

while(!i2c_checkevent(eeprom_i2c, i2c_event_master_mode_select))  /* 檢測 ev5 事件並清除標誌*/

i2c_send7bitaddress(eeprom_i2c, equipaddr,i2c_direction_transmitter); /* 傳送 eeprom 裝置位址 */

i2ctimeout = i2ct_flag_timeout;    

while (!i2c_checkevent(eeprom_i2c,i2c_event_master_transmitter_mode_selected)) /* 檢測 ev6 事件並清除標誌*/

i2c_senddata(eeprom_i2c, pageaddr);

//i2c_send7bitaddress(eeprom_i2c, pageaddr , i2c_direction_transmitter);  /* 傳送要寫入的 eeprom 內部位址(即 eeprom 內部儲存器的位址) */

i2ctimeout = i2ct_flag_timeout;    

while(!i2c_checkevent(eeprom_i2c, i2c_event_master_byte_transmitted)) /* 檢測 ev8 事件並清除標誌*/

/* 迴圈傳送 numbytetowrite 個資料 */

while(numbytetowrite--)   }

/* 傳送停止訊號 */

i2c_generatestop(eeprom_i2c, enable);

return 1;

}/**

* @brief   將緩衝區中的資料寫到i2c eeprom中

* @param   

*        @arg pbuffer:緩衝區指標

*        @arg writeaddr:寫位址

*     @arg numbytetowrite:寫的位元組數,不能超過要寫入塊的容量

* @retval  無

*/void i2c_ee_bufferwrite(u8* pbuffer, u16 writeaddr, u16 numbytetowrite)

else 

}else

while(numofpage--)

if(numofsingle != 0)

}}  

}

EEPROM(AT24C16)頁寫演算法

學習微控制器或者從事嵌入式開發的,對於eeprom絕不會陌生,尤其的24系列的eeprom很是經典,或者與此相容的fram系列,如at24c02 at24c16 fm24c16等。驅動起這個系列的eeprom,可以說是沒有任何難點,各類教程 原始碼 驅動都可以輕鬆找到並作稍微改動即可使用。但是,對於...

IIC方式讀驅動AT24C16晶元

閒來無事,找了塊msp430的板子編寫了個iic驅動at24c16的程式。iic作是一種簡單,雙向,同步的二進位制匯流排,由sda資料線和scl時鐘線組成,所有接到iic匯流排上的各裝置的sda資料線都連線到匯流排的sda資料線上,用來進行資料的傳輸 所有接到iic匯流排上的各裝置的scl時鐘線都連...

24C02 24C16進行位元組 頁讀取 頁訪問操作

以下這篇文章是自己折騰了三天儲存晶元後,並且能夠成功進行位元組操作 頁操作的一篇應用型文章,不太想研究原理的可以直接採用本文的 和注意事項。在對24c02或者24c16進行位元組 頁讀取 頁訪問前,我們需要弄清楚i c協議 24c02 24c16儲存空間 位元組操作和頁操作的時序 void i2cs...