-
1 # 玩轉嵌入式
-
2 # 一起學微控制器
24C02是比較常用的的E2ROM,可以方便的儲存和讀取資料。它不需要外部晶振,但需要外部提供時鐘訊號,就是你指的SCL。它的通訊是I2C通訊,下面我就詳細以24c02/01為例說明一下它的工作過程。
I2C的兩條線
I2C是2線序列通訊,SCL是時鐘線,SDA是資料線。SDA是開漏輸出,所有平時要加上上拉電阻,使其保持高電平。因為這個特點,SDA的一根線上可以掛多個器件,器件之間的關係是”線與”,所以要用硬體地址來區分,是那個器件的SDA被拉低(寫0)或者變低(讀0)。說白了,大家公用一條線,但是親兄弟明算賬,誰用完了,請釋放SDA,讓SDA保持高電平,不要影響其他人使用。以24C02為例,它有256位元組的儲存空間。器件地址前4位固定的址是1010,後有A2,A1,A0三位邏輯可程式設計地址,, 所以1根SDA線上可以掛8個24C02/01,而不互相沖突。如圖所示,24C02完整的地址就是(1010A2A1A0+0/1,最後一位讀是1,寫為0)
SCL為高電平時,SDA的資料必須穩定有效(高就為1,低就為0),在SCL為低電平時,SDA的資料可以變化。也就是SCL為高前,SDA的資料先準備好。
起始和結束訊號
那麼通訊開始,首先需起始和結束訊號。(圖片2,SDA為上面通道資料,SCl為下面通道資料,注意他們高低電平的變化)
開始訊號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送資料。(後續邏輯分析儀截圖的那個綠點)
結束訊號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送資料。(後續邏輯分析儀截圖的那個紅點)
任何滿足上面的條件都會被自動識別出來(是開始還是結束,還是資料變化,資料穩定)。具體參見下面一個完整流程。(用邏輯分析器抓出完整流程,大家一起研究)
寫流程
I2C寫流程 (圖片3,一個寫流程,寫一個數據,上面通道是SDA,下面是SCL,往7F這個地址裡寫222這個資料)
寫暫存器的標準流程為:(這裡Master是微控制器,Slave是24C02)
1. Master發起START (SCL為高時,SDA產生一個下降沿,通訊開始,那個綠點標識)
2. Master傳送I2C addr(7bit)和w操作0(1bit),等待ACK(24C02的地址是1010A2A1A0,例子中A2A1A0全部接地,所以是器件地址是1010000,加上讀寫位,讀為1,寫為0,所以是0xA0)
3. ACK這個標誌位設定很關鍵
Slave傳送ACK (第9個SCL時鐘時,SDA由器件拉為低電平,表示這個地址有器件,而且通訊成功,否則SDA為高(被上拉為高),通訊無效)後面SDA為高,是發出ACK後,Slave釋放匯流排,不能影響下一節資料傳輸,如果資料第一位是1,你一直拉低,這樣不就出錯了嗎?所以老兄,該放手了。
4. Master傳送reg addr(8bit),等待ACK(這裡往24C02的0x7F的地址裡寫資料,前8位就是資料7F,如果成功了,Slave得通知Master。“老大你地址寫成了,我也準備好了,開始轉賬吧“)
5. Slave傳送ACK (給你個秋波(低電平),我準備好了)
6. Master傳送data(8bit),即要寫入暫存器中的資料,等待ACK(前面還是釋放SDA,當時鍾SCL來到,傳送資料DE)
7. Slave傳送ACK
(Slave接收成功,再給個秋波(低電平),收貨,大聲告訴你(貨是我的---<<無間道>>)
8. 第6步和第7步可以重複多次,即順序寫多個暫存器(可以重複多次上述6,7.這裡只寫一個位元組)
9. Master發起STOP
(好了,該撤了,兄弟們”散“。Master在SCL為高電平時,SDA產生一個上升沿,Master拉高SDA,結束,那個紅點標識)
讀流程
讀暫存器的標準流程為:(圖片4,讀資料的話,前4部,也是寫的過程,就是告訴器件我要往哪個地址寫,然後後面是讀流程,從7F裡讀出220這個資料)
1. Master發起START (SCL為高時,SDA產生一個下降沿,通訊開始)
2. Master傳送I2Caddr(7bit)和 W操作1(1bit),等待ACK(24C02的地址是1010A2A1A0,例子中A2A1A0全部接地,所以是器件地址是1010000,加上讀寫位,讀為1,寫為0,所以還是0xA0)
3. Slave傳送ACK (送秋波)
4. Master傳送reg addr(8bit),等待ACK(往24C02的0x7F的地址偽寫資料,其實是要讀,但得告訴器件我從哪讀,這個過程還是要寫給器件的,希望大家轉過這個彎)
5. Slave傳送ACK(送秋波)
6. Master發起START (這裡不同了,重發start訊號,SCL為高是,SDA產生一個下降沿)
7. Master傳送I2C addr(7bit)和 R操作1(1bit),等待ACK(24C02的地址是1010000,加上讀寫位,讀為1,寫為0,10100001所以是0xA1)
8. Slave傳送ACK(送秋波)
9. Slave傳送data(8bit),即暫存器裡的值(裡面的資料DC傳送出來,SDA上1101100)
10. Master傳送ACK(這裡主機要做動作了,資料後面加上ACK或者NAK,這裡得告訴器件你還讀不讀了,如果還要讀下面的位元組就發低電平ACK,不讀了就發高電平NAK。這裡是讀一個位元組,那麼就是NAK。”兄弟,我就要一批貨,我撤了,給你個1,你懂的“)
11. 第8步和第9步可以重複多次,即順序讀多個暫存器(重複的畫畫8,9一樣,繼續就Master發ACK,不要了就發NAK)
12. Master發起STOP
(好了,該撤了,兄弟們”散“。Master在SCL為高電平時,SDA產生一個上升沿,Master拉高SDA,結束)
好了,完整的流程就是這樣,讀出的資料,自己用陣列或者變數儲存起來就好。不知道怎麼存?那我.....
理解完整的通訊過程,你就明白其實一點也不復雜。每個SCL都是主機微控制器提供,配合SDA完成資料傳輸。
-
3 # 微控制器嵌入式愛好者
iic介面器件支援主/從和多主兩種工作模式,儲存器24C02在系統中只作為從機使用,所以說儲存器24C02的工作時間由外部SCL時鐘引腳提供,看看下面24c02的結構框圖會清楚很多。
在微控制器電路系統中,微控制器的IIC介面可以作為主從兩種模式,但是微控制器如果與儲存器24c02相連,微控制器是作為主裝置,由微控制器的IIC介面的SCL引腳傳送時鐘給儲存器24C02。看下圖微控制器和IIC介面的儲存裝置的連線圖
回覆列表
24C02是EEPROM可以實現掉電存貯,與微控制器類可程式設計主控晶片透過IIC匯流排連線,有兩根線。在24C02的硬體設計上,是不需要晶振的,但是他需要時鐘訊號,由於需要程式設計,這個時鐘訊號是由微控制器的程式透過SCL引腳提供的。
AT24C02的硬體設計AT24C02有八個引腳,三個地址引腳,兩個IIC引腳,一個讀防寫引腳,兩個電源引腳。其硬體電路圖如下圖所示:
SCL和SDA透過電阻上拉至電源,SCL是時鐘輸入引腳,SDA是資料引腳。這兩個引腳與微控制器相連線,微控制器透過透過程式,根據IIC協議將資料存入或者讀取。
AT24C02的時序圖微控制器和24C02進行資料讀寫時需要遵循IIC協議,在其dataset上規定了協議,以起始和結束訊號為例,時序圖如下所示:
在SCL為高電平期間,SDA出現下降沿則是開始訊號;在SCL為高電平期間,SDA為上升沿則為結束訊號。透過IIC協議可以看到,在進行資料操作時都是在SCL為上升沿時操作的。所有的時基都是由SCL來決定的,所以SCL的時鐘訊號很重要。
24C02在硬體上不需要晶振,微控制器在讀寫資料時只要給其提供時鐘訊號,根據IIC的協議操作即可。