久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3018|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Nand flash驅(qū)動(dòng)工作原理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:373920 發(fā)表于 2018-7-18 10:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在介紹具體如何寫Nand Flash驅(qū)動(dòng)之前,我們先要了解,大概的,整個(gè)系統(tǒng),和Nand Flash相關(guān)的部分的驅(qū)動(dòng)工作流程,這樣,對(duì)于后面的驅(qū)動(dòng)實(shí)現(xiàn),才能更加清楚機(jī)制,才更容易實(shí)現(xiàn),否則就是,即使寫完了代碼,也還是沒搞懂系統(tǒng)是如何工作的了。
讓我們以最常見的,Linux內(nèi)核中已經(jīng)有的三星的Nand Flash驅(qū)動(dòng),來解釋Nand Flash驅(qū)動(dòng)具體流程和原理。
此處是參考2.6.29版本的Linux源碼中的\drivers\mtd\nand\s3c2410.c,以2410為例。
1. 在nand flash驅(qū)動(dòng)加載后,第一步,調(diào)用對(duì)應(yīng)的init函數(shù) ---- s3c2410_nand_init: 去將nand flash驅(qū)動(dòng)注冊(cè)到Linux驅(qū)動(dòng)框架中。
2. 驅(qū)動(dòng)本身真正的開始,是從probe函數(shù): s3c2410_nand_probe->s3c24xx_nand_probe,
在probe過程中:
clk_enable //打開nand flash控制器的clock時(shí)鐘,
request_mem_region //去申請(qǐng)驅(qū)動(dòng)所需要的一些內(nèi)存等相關(guān)資源。
s3c2410_nand_inithw //去初始化硬件相關(guān)的部分,主要是關(guān)于時(shí)鐘頻率的計(jì)算,以及啟用nand flash控制器,使得硬件初始化好了,后面才能正常工作。
3. 需要多解釋一下的,是這部分代碼:
for (setno = 0; setno < nr_sets; setno++, nmtd++) {
pr_debug("initialising set %d (%p, info %p)\n", setno, nmtd, info);
/*調(diào)用init chip去掛載你的nand驅(qū)動(dòng)的底層函數(shù)到"nand flash的結(jié)構(gòu)體"中,以及設(shè)置對(duì)應(yīng)的"ecc mode",掛載ecc相關(guān)的函數(shù) */
s3c2410_nand_init_chip(info, nmtd, sets);
/* scan_ident,掃描nand 設(shè)備,設(shè)置nand flash的默認(rèn)函數(shù),獲得物理設(shè)備的具體型號(hào)以及對(duì)應(yīng)各個(gè)特性參數(shù),這部分算出來的一些值,對(duì)于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)獲得對(duì)應(yīng)nand flash的硬件的各個(gè)參數(shù),
*然后就可以在scan tail中,根據(jù)這些參數(shù),去設(shè)置其他一些重要參數(shù),尤其是ecc的layout,即ecc是如何在oob中擺放的,
*最后,再去進(jìn)行一些初始化操作,主要是根據(jù)你的驅(qū)動(dòng),如果沒有實(shí)現(xiàn)一些函數(shù)的話,那么就用系統(tǒng)默認(rèn)的。 */
nand_scan_tail(&nmtd->mtd);
/*add partion,根據(jù)你的nand flash的分區(qū)設(shè)置,去分區(qū) */
s3c2410_nand_add_partition(info, nmtd, sets);
}
if (sets != NULL)
sets++;
}
4. 等所有的參數(shù)都計(jì)算好了,函數(shù)都掛載完畢,系統(tǒng)就可以正常工作了。
上層訪問你的nand falsh中的數(shù)據(jù)的時(shí)候,通過MTD層,一層層調(diào)用,最后調(diào)用到你所實(shí)現(xiàn)的那些底層訪問硬件數(shù)據(jù)/緩存的函數(shù)中。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久se精品一区精品二区 | 99国内精品| 男女污网站| 日日摸天天添天天添破 | 二区三区av| 国产精品国产三级国产a | 亚洲福利一区 | 91精品在线播放 | 2019天天干天天操 | 伊人春色成人网 | 99久久婷婷国产综合精品电影 | 91亚洲国产成人久久精品网站 | 成人深夜小视频 | 国产一级电影网 | 岛国精品| 亚洲免费av一区 | 黄色a级一级片 | 精品久久久久久亚洲精品 | 欧美理论片在线 | 超碰97免费在线 | av一区在线观看 | 日本粉嫩一区二区三区视频 | 亚洲精品aⅴ | 懂色中文一区二区在线播放 | 最新国产视频 | 成人av免费| 免费在线成人 | 国产精品.xx视频.xxtv | 日韩三级一区 | 美女午夜影院 | 欧美一级免费看 | 午夜免费网 | 免费看a | 四虎最新 | 国产精品久久久久久亚洲调教 | 欧美国产日韩一区二区三区 | 伊人色综合久久天天五月婷 | 国产精品久久久亚洲 | 99精彩视频 | 国产女人叫床高潮大片免费 | 免费观看成人性生生活片 |