|

【Maker電子學】Flash 記憶體的原理與應用—PART8(I2C EEPROM)

   
作者:Bird

上一回我們介紹了 I2C EEPROM 的應用情境,以及它的晶片封裝有哪些訊號,這一回我們要繼續介紹如何用 I2C 的通訊來操作 I2C EEPROM 的讀寫。

I2C 通訊

一個 I2C 通訊一定是由 master 發起。當 master 想要與某一個 slave 通訊時,它會在 bus 上送出一個 START condition,接著送出要通訊的 7-bit slave address,再加上一個 bit 的讀寫控制 bit。如果 bus 上有 slave 裝置符合這個 slave address,這個 slave 裝置就會在 I2C bus 上回應一個 ACK,讓 master 知道有人接電話了,Master 收到 ACK 後,確定它不是在對空氣講話,就會繼續接下來的通訊。

I2C 所有的通訊都是以 8-bit,也就是 byte 為單位,由 master 發起的第一個 byte 就是 7 個 bit 的 slave address 加上一個讀寫控制 bit:0 代表寫入、1 代表讀取,但 I2C address 這件事常常會讓人搞混,因為有時候我們會直接把第一個 byte 的內容當作 I2C address;以 24LC64 這個 I2C EEPROM 為例,有時候我們會講:對 0xA0 這個 I2C 位址通訊的話就是寫入、對 0xA1 這個位址通訊的話就是讀取,這種包含讀寫控制 bit 的位址表示方法,通常叫做「8-bit I2C address」,而如果我們將前面 7 個 bit 與讀寫控制 bit 分開來說,那就是「7-bit I2C address」,以 24LC64 來說,它的 7-bit I2C address 就是 0x50。

因此,當我們看到一個裝置的 I2C address 時,最好先確定一下它到底是 7-bit 表示法還是 8-bit 表示法,特別是當它小於 0x80 的時候。

內部位址指標

在 24LC64 EEPROM 的內部有一個位址指標(address pointer),所有的讀寫操作都是經由這個指標完成的,在讀或寫之前,要先設定這個指標到要讀寫的位置上。

24LC64 有 64K bits 的容量,不過 I2C 的資料傳輸單位是 byte,因此 24LC64 內部實際上是以 8K bytes 的形式在儲存資料,要定址 8K 個不同的位址,需要 13 個 bit (2^13 = 8192),所以 24LC64 的內部位址指標是 13 個 bit。

讀取

以下是一個讀取的動作:

(圖片來源:Bird 提供)

當我們要讀取 24LC64 裡的資料時,首先要用 I2C 的寫入動作來設定位址指標,接著不要送出 STOP,而是直接用另一個 START 對 24LC64 的 slave address 開始一個讀取的動作,然後隨著 master 持續送出 SCL 訊號,24LC64 就會在 SDA 上吐出位址指標所指的那個 byte 的資料。每讀出一個 byte 的資料之後,24LC64 內部的位址指標會自動加一。

如果只要讀取一個 byte,那麼當一個 byte 吐完後,master 可以送出 NO ACK 狀態,結束這個回合;如果 master 送出 ACK,代表它還想要繼續讀取,這時 master 可以繼續送出 SCL 訊號,而因為 24LC64 內部的位址指標在剛剛讀完上一個 byte 時就已經自動加一,它當然就會繼續吐出下一個位址的資料。

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Liang Bird

Author: Liang Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *