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