iT邦幫忙

2021 iThome 鐵人賽

DAY 15
2

前天在講I2C時序的時候應該接著這部分講的,忘記了這個記憶體的讀寫對了解I2C很有幫助的實際例子,今天就簡單看看這Datasheet吧,至於程式部分我就不講太多了應該也沒甚麼人會想看XD
不然來學著看英文Datasheet吧。
首先我先來講EEPROM寫入時序:

下圖是電子抹除式可複寫唯讀記憶體 (EEPROM) Datasheet上寫的時序說明:
以下有兩個不同容量的記憶體的寫單字節的時序,兩者容量不同,差別在於可寫入暫存器的位置長度不同(紅框)。

https://ithelp.ithome.com.tw/upload/images/20210928/20141979HS8BNOVNeq.png
以上是以兩顆不同容量的記憶體寫入程序,稍微有點不一樣。(左邊的是2K,右邊的128K)

以24C02這樣的 EEPROM 爲例,它的容量是 2 Kbits,或是 2048 / 8 = 256 bytes,因此一個 byte 的 index 暫存器剛好可以用來指向 0-255 的位置,也就可以用來存取整顆 EEPROM 的內容。
假設我要對 EEPROM 的第 0 個 byte 寫入一個 0x87 這樣的值,在 I2C 上就要用這樣的時序:
https://ithelp.ithome.com.tw/upload/images/20210928/201419792WNQ5QK4W1.png
我直接舉1個例子了,這樣應該有比較好看了這些都是我剛學的時候所做的PPT,為了讓自己能複習做個紀錄。

再來I2C有個寫入時序,連續寫入
在I2C的規範書有以下這一段文字,這句話指的意思是關於自動增加和減少地址由設計者定義。
All decisions on auto-increment or decrement of previously accessed memory locations etc. are taken by the designer of the device.
https://ithelp.ithome.com.tw/upload/images/20210928/201419795nTA8OfWym.png
上圖是兩個不同容量的寫入時序根據Datasheet,可以看到綠色框框部分,容量較大的記憶體設備地址有兩段而較小的只有一段,這是因為要讓使用者能自行決定要從哪頁開始寫起哪裡結束,容量較大的話7位地址會不夠表示
寫完地址接著就開始丟Data了,紅框部分。
連續讀取的功能叫「sequential read」,可以從一個位址開始一直讀一直讀,沒有長度的限制,就算你已經讀到 2 Kbit EEPROM 的最後一個位址 0xff,index 暫存器會自動歸零,你可以繼續從第一個位址 0x00 讀起。
不過寫入時狀況就有一點不一樣。由於 EEPROM 寫入需要一點時間,而且這個時間相對 I2C bus 的速度來說並不快,通常在數個 ms 左右,因此 EEPROM 的連續寫入指令長度有限制
EEPROM 在收到來自 I2C bus 的指令後,會先把要寫入的資料暫存在一個寫入用的 buffer 中,再慢慢寫入,因此這個寫入用 buffer 的大小就限制了連續寫入指令的長度,常見的限制是 16 或 32 個 bytes,詳情要看每一顆 EEPROM 的 datasheet。
在 EEPROM 裡面,記憶單元是以一個 page 一個 page 這樣的單位排列的,page 是 EEPROM 更新資料的最小單位,因此這個寫入 buffer 的長度通常會跟 EEPROM 的 page size 一樣,除此之外,大部分的 EEPROM 在單一的連續寫入指令中,不能跨越 page 的邊界。

基本時序-EEPROM寫入時序-順序寫入

以AT24C02來舉例,它的容量是2K, 2048 / 8 = 256 bytes,256/8=32,代表這個記憶體共可寫入32個數據字節,8個數據字節換頁一次(緩存),等於說頭到尾換業需要頭換尾4次。
以AT24C128來說,它的容量是128K, 1024乘128=131072,131072除8=16384 bytes,16384除8=2048,這個記憶體共可連續寫入2048個數據字節。但連續寫入不能一口氣全部寫完,需要緩存資料,以這顆的Datasheet來看,寫64個數據字節存滿了要換頁一次,2048/64=32這代表從頭寫到尾需要換頁32次。

懂了上述就可以開始寫EEPROM的寫入函式啦,上面這些一定要先懂才能來寫,不然你絕對打不出來能用的函示。


上一篇
[DAY 14] _最小系統板規劃
下一篇
[DAY 16] _Si7020溫溼度讀寫
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言