如何正确nandflash的块地址和页地址
[初級知識]如何正確nandflash的塊地址和頁地址
2016年09月07日 16:13:42閱讀數(shù):1891結(jié)論
- 塊地址 從1開始,其范圍位于1~2048(以2Gb nandflash為例)
- 頁地址 從0到63, 其范圍位于0~63(以2Gb nandflash為例)
背景
對于初次接觸nandflash的新手而言,不管是做裸機的驅(qū)動還是復(fù)雜的Linux下的nand驅(qū)動,能看懂nandflash的數(shù)據(jù)手冊中給出的時序圖,已經(jīng)是不錯的,但要想正確的去實現(xiàn)功能,恐怕是還是有一道攔路虎的,當(dāng)然,弄懂了,就一紙老虎,這老虎就是我們要說的 nandflash操作中的塊地址跟頁地址的正確設(shè)置。
塊地址
nandflash中有塊和頁的概念,常見的表述如,
nandflash的大小=塊總數(shù)x每塊的頁總數(shù)x每頁的大小
這里的塊大小和頁大小,均會在相應(yīng)的數(shù)據(jù)手冊中查到,那么,我們關(guān)系的擦除、讀寫這幾個重要的操作而言,其中的塊地址該如何計算而來?
比如說,我們常在控制臺上用nand erase addr size,而這個命令通常是直接傳入addr,我們怎么從addr中解析出塊地址呢?下面給出一份正確的實現(xiàn)代碼
int addr = 0x0ffc0000 ; int block_addr = 0; int page_size = 2048; int page_count_per_block= 64;block_addr = addr/(page_size*page_count_per_block) ; //小問號認(rèn)為按照這句命令的理解:塊地址就是塊數(shù), //求得塊的數(shù)量就是塊的地址,這個數(shù)量是一個塊的總數(shù)量, //塊總數(shù)量等于塊的最大數(shù),并且把最大塊數(shù)定為塊地址, //這與我們平常理解的定義地址一般是最小數(shù)(值)有些不 //同,這一點要注意這一點。- 1
- 2
- 3
- 4
- 5
- 6
- 7
有的時候,我們看網(wǎng)上有的人說,nandflash的塊地址等于頁地址,其實這句話說的是有前提條件的,那就是第0塊第0頁的時候滿足這個說法,其他的一概不滿足
頁地址
還是用上面的nand erase addr size,而這個命令通常是直接傳入addr,我們怎么從addr中解析出頁地址呢?下面給出一份正確的實現(xiàn)代碼
int addr = 0x0ffc0000 ; int block_addr = 0; int page_size = 2048; int page_addr = 0;page_addr = addr/page_size; //小問號同樣認(rèn)為,此語句可以理解為頁地址就是在給定Nand的某個地址后,求得頁的數(shù)量就是 //頁的地址,這個數(shù)量是一個頁的總數(shù)量,總數(shù)量等于頁的最大數(shù),并且把最大頁數(shù)定為頁地址, //這與我們平常理解的定義地址一般是最小數(shù)(值)有些不同,要注意這一點。- 1
- 2
- 3
- 4
- 5
- 6
- 7
有的時候,我們看網(wǎng)上有的人說,nandflash的塊地址等于頁地址,其實這句話說的是有前提條件的,那就是第0塊第0頁的時候滿足這個說法,其他的一概不滿足
實現(xiàn)nandflash的擦除
給出的已知條件為要擦除的地址,以及大小,要去實現(xiàn)擦除的偽代碼?
- 頁大小page_size?
- 每塊的頁總數(shù)page_count_per_block
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
有人或許會很好奇,你這寫法為什么跟我在數(shù)據(jù)手冊上看到的不一樣,數(shù)據(jù)手冊明明跟這不一樣,而且你這種寫法如何對得上數(shù)據(jù)手冊中的地址周期值呢?我們不妨先解決這個疑問,用數(shù)據(jù)手冊上的地址周期寫法來實現(xiàn)一組代碼,我們就按照下面的5個地址周期的數(shù)據(jù)手冊寫法來實現(xiàn)一組:?
因為我們都知道,在擦除程序時,只需要寫三個行地址(為啥?因為數(shù)據(jù)手冊的擦除時序圖要求的,不會的看下面這張圖)?
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
以上這兩種實現(xiàn)方法其實大同小異,第一種方法是用page_addr來實現(xiàn)的,而第二種方法是用block_addr的方法實現(xiàn)的,這兩種方法實現(xiàn)其實是一模一樣的,并沒有什么差別。(小問號認(rèn)為這里為何出現(xiàn)了頁擦除和塊擦除兩種方法?,老師不是講擦除只能是塊擦除嗎?)
總結(jié)
以上是生活随笔為你收集整理的如何正确nandflash的块地址和页地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LM】360N4S解决手机关屏后经常无
- 下一篇: 华为手机大变?余承东被传离职转岗,进军美