【1】24C02功能概述
24C02是一個2K Bit的串行EEPROM存儲器,內部含有256個字節。在24C02裏面有一個8字節的頁寫緩衝器。該設備的工作電壓爲1.8V到6.0V,芯片的第7引腳WP爲寫保護引腳,將該引腳接地允許正常的讀寫。
【2】設備地址
24C02的設備地址包括固定部分和可編程部分。可編程部分需要根據硬件引腳A0、A1和A2來設置。設備地址的最後一位用於設置數據傳輸的方向,即讀/寫位。格式如下圖:
在IIC總線協議中,設備地址是起始信號後第一個發送的字節。如果硬件地址引腳A0、A1、A2均接地,那麼,24C02的設備的讀操作地址爲:0xA1;而寫操作地址則爲:0xA0。
【3】讀寫操作中的應答信號
在寫操作中,24C02每接收一個8位字節後會產生一個應答信號。在讀操作中,24C02在發送一個8位數據後會釋放SDA線並監視應答信號。一旦收到應答信號,將繼續發送數據。如果主機沒有發送應答信號,從機則停止發送數據且等待一個停止信號。
【4】字節寫操作
24C02接收完設備地址後,產生應答信號;然後接收8位內存字節地址,產生應答信號,接着接收一個8位數據,產生應答信號;最後主機發送停止信號,字節寫操作結束。
【5】頁寫操作
24C02有一個8字節的頁寫緩衝器,也就是說可以一次連續寫入8個字節到緩衝器,然後由緩衝器一次性寫到EEPROM。頁寫操作初始化與字節寫操作相同,只是主機不會在寫完第一個數據後就發送停止信號,而是在24C02應答後,接着發送7個數據。
需要注意的是,24C02接收到每個數據後,其字節地址的低3位會自動加1,高位地址不變,維持在當前頁內。當內部產生的字節地址到達該頁邊界時,隨後的數據將寫入該頁的頁首,先前的寫入的數據將會被覆蓋。
【6】當前地址讀操作
24C02內部的地址寄存器會保存着上次讀/寫操作最後一個地址加1的值。只要芯片有電,該地址就一直保存着。如果上次讀/寫操作的地址爲N,那麼當前地址讀操作就從N+1開始。當讀到最後一個字節(即255處),地址會迴轉到0。
【7】字節讀操作
主機首先發送起始信號,接着發送設備地址和它想要讀取的數據內存字節地址,執行一個僞寫操作。在24C02應答主機之後,主機重新發送起始信號和從設備地址,進行讀操作。24C02響應併發送應答信號,然後輸出所要求的一個8位字節數據。主機接收完這個8位數據後,產生一個“非應答”信號,最後發送停止條件,字節讀操作結束。
【8】連續讀操作
在24C02發送完一個8位字節數據之後,主機產生一個應答信號來響應,告知24C02要求讀取更多的數據,直到讀完最後一個數據,主機向24C02發送一個“非應答”信號,然後發送一個停止信號,結束此操作。
【9】基本讀寫操作流程
24C02的字節寫操作,參考代碼:
void Write_24C02(unsigned char addr, unsigned char dat)
{
IIC_Start(); //IIC總線起始信號
IIC_SendByte(0xa0); //24C02的寫設備地址
IIC_WaitAck(); //等待從機應答
IIC_SendByte(addr); //內存字節字節
IIC_WaitAck(); //等待從機應答
IIC_SendByte(dat); //寫入目標數據
IIC_WaitAck(); //等待從機應答
IIC_Stop(); //IIC總線停止信號
}
24C02的字節讀操作,參考代碼:
unsigned char Read_24C02(unsigned char addr)
{
unsigned char tmp;
//進行一個僞寫操作
IIC_Start(); //IIC總線起始信號
IIC_SendByte(0xa0); //24C02寫設備地址
IIC_WaitAck(); //等待從機應答
IIC_SendByte(addr); //內存自己地址
IIC_WaitAck(); //等待從機應答
//進行字節讀操作
IIC_Start(); //IIC總線起始信號
IIC_SendByte(0xa1); //24C02讀設備地址
IIC_WaitAck(); //等待從機應答
tmp = IIC_RecByte(); //讀取目標數據
IIC_Ack(0); //產生非應答信號
IIC_Stop(); //IIC總線停止信號
return tmp;
}
【10】進階強化實訓
【小蜜蜂筆記:廣東職業技術學院 歐浩源 [email protected]】