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...