|

【Maker電子學】Flash 記憶體的原理與應用—PART14

   
作者:Bird

上一回【Maker電子學】Flash 記憶體的原理與應用—PART13,我們說明了寫入指令的使用方式,以及寫入時需要注意的事項。這一回我們要介紹 SPI NOR flash 很重要的一道防線:寫入保護機制,這個機制可以設定某些記憶體區域不會被意外寫入或抹除。

層層關卡

SPI NOR flash 很常用來儲存嵌入式系統的 firmware 或是開機引導程式如 boot loader 之類的,這些以 binary 形式存在的程式碼,只要錯了一個 byte,通常就會讓整個系統爛掉(flash 雖然設計成可以重複抹寫,但我們也不希望它裡面的資料在不預期的狀況下被意外改變),因此 W25Q32JV 設計了一些保護機制來處理這個問題,說穿了,其實就是讓寫入或抹除的程序變得稍微複雜一點,意外就沒那麼容易發生。

W25Q32JV 可以針對記憶體中的不同區域各別設定寫入保護,當一個區域被設定寫入保護後,對這個區域執行抹除或寫入的指令就不會有作用,必須先將寫入保護解除,才能對這個區域執行抹除或寫入。

設定保護區塊的方式有兩種:Block Protect 與 Inidividual Block Lock,我們先來說說 Block Protect,這是比較常使用的功能。

Block Protect

這個功能可以保護 W25Q32JV 整個 4M byte 的記憶體空間中,最前面(從位址 0 開始)或最後面(從位址 0x3FFFFF 開始倒著算回去)特定大小的連續區域。設定的方法稍微複雜了點,但原理很簡單。

首先,我們要決定保護的區域是在最前面還是最後面。如果要保護最前面,在狀態暫存器 SR1 中的 TB bit 就要設為 1,反之則設為 0(TB 這個 bit 的意思是 TOP/BOTTOM,換句話說位址 0 就是 top,位址 0x3FFFFF 就是 bottom)。

(圖片來源:Bird 提供)

接著我們要決定保護的大小的單位,是要以 64K bytes 的 block 為單位,還是要以 4K bytes 的 sector 為單位。如果要以 64K bytes 的 block 為單位,就把狀態暫存器 SR1 裡的 SEC bit 設為 0,如果要以 4K bytes 的 sector 為單位,就把狀態暫存器 SR1 裡的 SEC bit 設為 1。

接下來我們要決定保護區域的大小了,這是由狀態暫存器 SR1 裡的 BP0、BP1、BP2 這三個 bit 決定的。這個設定稍微複雜一點:這三個 bit 代表的值可以從 0(000) 到 7(111);當它們的值是 1 時,代表保護 1 個 block 或 1 個 sector;當他們的值是 2 時,就代表保護 2 個 block 或 2 個 sector;當它們的值是 3 時,保護的不是 3 個 block/sector,而是 4 個;當它們的值是 4 時,保護的大小是 8 個 block 或是 sector。

聰明的讀者一定看得出來,它保護的 block/sector 數量是 2^(n-1)個,因此當設定到 7 的時候,會保護 64 個 block;不過這裡還有個例外:如果保護大小的單位是 block,BP0-BP2 可以設定為 0 到 7,但如果保護的單位設定是 sector,BP0-BP2 的值就只能設定為 0-4。

換句話說,當保護單位是 64K bytes 的 block 時,最大可以設定保護 64K bytes * 2 ^(7-1)= 64K bytes * 64 = 4096K bytes,也就是 4M bytes,剛好就是整顆 W25Q32JV 的容量;如果當保護單位時 4K byes 的 sector 時,最大可以設定保護 4K bytes * 2 ^(3-1)= 4K bytes * 8 = 32K bytes。

舉個例子:我們設定 TB=1、SEC=0、BPx = 3(0b011),表示我們要保護的區域是從 top 開始,以 64K bytes block 為單位,保護 2 ^(3-1)= 4 個 block,也就是 256K bytes,所以保護的區域就是:

本文為會員限定文章

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

                               

已經是會員? 按此登入

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

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

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Liang Bird

Author: Liang Bird

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

Share This Post On

Submit a Comment

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