亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
Nand flash驅動工作原理
[打印本頁]
作者:
電13691982107
時間:
2018-7-18 10:58
標題:
Nand flash驅動工作原理
在介紹具體如何寫Nand Flash驅動之前,我們先要了解,大概的,整個系統(tǒng),和Nand Flash相關的部分的驅動工作流程,這樣,對于后面的驅動實現(xiàn),才能更加清楚機制,才更容易實現(xiàn),否則就是,即使寫完了代碼,也還是沒搞懂系統(tǒng)是如何工作的了。
讓我們以最常見的,Linux內核中已經(jīng)有的三星的Nand Flash驅動,來解釋Nand Flash驅動具體流程和原理。
此處是參考2.6.29版本的Linux源碼中的\drivers\mtd\nand\s3c2410.c,以2410為例。
1. 在nand flash驅動加載后,第一步,調用對應的init函數(shù) ---- s3c2410_nand_init: 去將nand flash驅動注冊到Linux驅動框架中。
2. 驅動本身真正的開始,是從probe函數(shù): s3c2410_nand_probe->s3c24xx_nand_probe,
在probe過程中:
clk_enable //打開nand flash控制器的clock時鐘,
request_mem_region //去申請驅動所需要的一些內存等相關資源。
s3c2410_nand_inithw //去初始化硬件相關的部分,主要是關于時鐘頻率的計算,以及啟用nand flash控制器,使得硬件初始化好了,后面才能正常工作。
3. 需要多解釋一下的,是這部分代碼:
for (setno = 0; setno < nr_sets; setno++, nmtd++) {
pr_debug("initialising set %d (%p, info %p)\n", setno, nmtd, info);
/*調用init chip去掛載你的nand驅動的底層函數(shù)到"nand flash的結構體"中,以及設置對應的"ecc mode",掛載ecc相關的函數(shù) */
s3c2410_nand_init_chip(info, nmtd, sets);
/* scan_ident,掃描nand 設備,設置nand flash的默認函數(shù),獲得物理設備的具體型號以及對應各個特性參數(shù),這部分算出來的一些值,對于nand flash來說,是最主要的參數(shù),比如nand flash的芯片的大小,塊大小,頁大小等。 */
nmtd->scan_res = nand_scan_ident(&nmtd->mtd, (sets) ? sets->nr_chips : 1);
if (nmtd->scan_res == 0) {
s3c2410_nand_update_chip(info, nmtd);
/*掃描的后一階段,經(jīng)過前面的scan_ident,我們已經(jīng)獲得對應nand flash的硬件的各個參數(shù),
*然后就可以在scan tail中,根據(jù)這些參數(shù),去設置其他一些重要參數(shù),尤其是ecc的layout,即ecc是如何在oob中擺放的,
*最后,再去進行一些初始化操作,主要是根據(jù)你的驅動,如果沒有實現(xiàn)一些函數(shù)的話,那么就用系統(tǒng)默認的。 */
nand_scan_tail(&nmtd->mtd);
/*add partion,根據(jù)你的nand flash的分區(qū)設置,去分區(qū) */
s3c2410_nand_add_partition(info, nmtd, sets);
}
if (sets != NULL)
sets++;
}
4. 等所有的參數(shù)都計算好了,函數(shù)都掛載完畢,系統(tǒng)就可以正常工作了。
上層訪問你的nand falsh中的數(shù)據(jù)的時候,通過MTD層,一層層調用,最后調用到你所實現(xiàn)的那些底層訪問硬件數(shù)據(jù)/緩存的函數(shù)中。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1