開(kāi)發(fā)板使用手冊(cè) 讓研發(fā)速度快上加快
更新包含了開(kāi)發(fā)環(huán)境搭建、系統(tǒng)編譯與燒寫(xiě)和pmon基礎(chǔ)知識(shí)、啟動(dòng)流程分析、網(wǎng)絡(luò)加載系統(tǒng)、燒寫(xiě)系統(tǒng)到nand以及新增pmon移植教程、新增pmon下操作GPIO章節(jié)和pmon下Ejtag使用章節(jié)等。
pmon 支持倆種接口類(lèi)型的 nand flash,一個(gè)是 nand 控制器接口,一個(gè)是 spi 接口。龍芯核心板上板載了一個(gè) nand 控制器接口的 flash。
9.9.11.1 配置 pmon
首先我們需要在 pmon 里面添加對(duì) nand 的支持,那么我們都要配置哪些內(nèi)容呢?這個(gè)要從 pmon 的啟動(dòng)流程入手,pmon 在啟動(dòng)的時(shí)候是在 Targets/LS2K/ls2k/tgt_machdep.c 里調(diào)用 ls2k_nand_init()函數(shù)對(duì) nand 進(jìn)行初始化的, 如果我們要調(diào)用 ls2k_nand_init()函數(shù),就需要定義宏定義 NNADN 和 CONFIG_LS2K_NAND, 其中 NNADN 的值在 Targets/LS2K/compile/ls2k/m25p80.h 中定義為 1,
所以我們只需要在 Targets/LS2K/conf/ls2k 文件中添加代碼 option CONFIG_LS2K_NAND 即可,這里我們添 加到第 269 行,
在 pmon 默認(rèn)的 bsp 中,默認(rèn)添加了代碼 select nand,所以這里我們不必要在添加代碼 select nand,而select 指定的是后面的參數(shù) nand 被選中,選中了 nand 參數(shù)以后,在 conf/files 文件中使用 file 指定的 c 文件就可以被編譯到 pmon 里面。因?yàn)?file 指定的文件編譯與否取決于后面的參數(shù)有沒(méi)有被選中,needs-flag 表示為該文件生成頭文件。
然我們回過(guò)頭再來(lái)看條件編譯的這部分代碼,
如果我們定義了 NNAND 和 CONFIG_LS2K_NAND,就是執(zhí)行*(volatile int *)0xbfe10420 |= (1<<9) 代碼將GPIO 的管教復(fù)用設(shè)置為 NAND,,如果沒(méi)用定義這倆個(gè)宏定義,就將復(fù)用關(guān)系設(shè)置為 GPIO,如下圖所示:
如果定義了這倆個(gè)宏定義,接著就會(huì)調(diào)用 ls2k_nand_init 函數(shù)來(lái)初始化 nand,我們跳轉(zhuǎn)到 ls2k_nand_init 函數(shù)定義的 sys/dev/nand/ls2k-nand.c 驅(qū)動(dòng)文件,通過(guò)閱讀代碼我們可以找到對(duì) mtd 結(jié)構(gòu)初始化的驅(qū)動(dòng)函數(shù)為 ls2k_nand_init_mtd,通過(guò)訪問(wèn) mtd 就可以訪問(wèn) nand 控制器,
在 ls2k_nand_init_mtd 函數(shù)中,最關(guān)鍵的是對(duì) ECC 的選擇,在 pmon 中默認(rèn)的 ECC 有 NAND_ECC_SOFT 和 NAND_ECC_SOFT_BCH 倆種。BCH 校驗(yàn)比 ECC 校驗(yàn)有更強(qiáng)的糾錯(cuò)能力,龍芯 BSP 里面默認(rèn)使用的是 ECC 校驗(yàn),代碼如下:
如果我們需要使用 BCH 校驗(yàn),需要在在 Targets/LS2K/conf/ls2k 中定義 select nand_bch,,這個(gè)我們選擇 BCH 校驗(yàn),如下圖所示:
9.9.11.2 配置分區(qū)
在 nand 初始化最后的步驟會(huì)建立分區(qū)信息,建立分區(qū)信息的邏輯是先會(huì)調(diào)用 nand_flash_add_parts 函
數(shù)對(duì)環(huán)境變量 mtdparts 進(jìn)行判斷,mtdparts 環(huán)境變量在 Targets/LS2K/include/pmon_target.h 中定義,
如 果 環(huán) 境 變 量 mtdparts 中 設(shè) 置 了 分 區(qū) 信 息 , 則 調(diào) 用 add_mtd_device 來(lái) 指 定 分 區(qū) , sys/dev/nand/ls2k-nand.c 中代碼如下:
環(huán)境變量 mtdparts 中的值我們要怎么設(shè)置呢?
這里環(huán)境變量的設(shè)置我們要和 pmon 里面設(shè)備樹(shù)的保持一致,打開(kāi) Targets/LS2K/conf/LS2K.dts 設(shè)備樹(shù)文件,找到 nand 節(jié)點(diǎn),其中 nand 節(jié)點(diǎn)的子 partition 節(jié)點(diǎn)表示的是分區(qū)信息,如下圖所示:
其中:
compatible = "loongson,ls-nand"; 表示匹配驅(qū)動(dòng)所使用的屬性。
reg = <0x1fe06040 0x0 0x1fe06000 0x20>; 表示控制寄存器的地址和長(zhǎng)度,其中 0x1fe06040 是
NAND_DMA_ADDR_REG 的地址。 地址 0x1fe06000 是 NAND_CMD 的地址。長(zhǎng)度均為 0x20。
interrupt-parent = <&icu>; 中斷控制器是 icu
interrupts = <52>; 分配中斷號(hào)為 52
interrupt-names = "nand_irq"; 中斷名稱
dmas = <&dma0 1>; 表示使用 dma0 控制器,通道數(shù)為 1
dma-names = "nand_rw"; dma 控制器名稱
dma-mask = <0xffffffff 0xffffffff>; 表示設(shè)備 dma 能力,如果設(shè)備只有 32 位 dma 能力,則應(yīng)該配置成
0x00xffffffff,如果設(shè)備有 64 位 dma 能力,則應(yīng)該配置成 0xffffffff 0xffffffff
number-of-parts = <0x2>; 表示分區(qū)數(shù)量,這里設(shè)置成倆個(gè)分區(qū)
partition@0 {
label = "kernel_partition";
reg = <0x0000000 0x01e00000>;
};
分區(qū) 0,分區(qū)名稱為 kernel_partition,其中分區(qū)起始地址為 0x0000000,分區(qū)長(zhǎng)度為 0x01e00000。
partition@0x01400000 {
label = "os_partition";
reg = <0x01e00000 0x0>;
};
分區(qū) 1,分區(qū)名稱為 os_partition,其中分區(qū)起始地址為 0x01e00000,分區(qū)長(zhǎng)度為剩余所有空間。
這里我們需要修改 partition@0 和 partition@0x01400000 子節(jié)點(diǎn)。這里我們把內(nèi)核的分區(qū)大小設(shè)置 成 30M,剩余的 482M 給文件系統(tǒng)。
接著我們需要添加片選信息。一般情況下根據(jù)硬件設(shè)計(jì)規(guī)范,F(xiàn)lash 的片選會(huì)接到 cs0 上,通過(guò)原理圖我們可以確定,片選引腳連接到了 cs0 上,如下圖所示:
但是設(shè)備樹(shù)我們要怎么寫(xiě)呢?這個(gè)就需要我們?nèi)タ打?qū)動(dòng)源碼了,我們打開(kāi)內(nèi)核源碼
drivers/mtd/nand/ls-nand.c 下的 nand 控制器的驅(qū)動(dòng),在第 637 行我們可以看到他是通過(guò) nand-cs 來(lái)獲取的片選信息,
所以我們?cè)谠O(shè)備樹(shù)中添加屬性 nand-cs=<0x00>;,添加完成如下圖所示:
這樣,pmon 下的設(shè)備樹(shù)我們就設(shè)置好了,然后我們回過(guò)頭在來(lái)設(shè)置環(huán)境變量 mtdparts,要與設(shè)備樹(shù)中我們?cè)O(shè)置的保持一致,修改完成如下圖所示:
這樣 pmon 對(duì) nand 的設(shè)置就已經(jīng)完成了。
-
龍芯
+關(guān)注
關(guān)注
3文章
345瀏覽量
31290 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5096瀏覽量
97825 -
國(guó)產(chǎn)芯片
+關(guān)注
關(guān)注
2文章
258瀏覽量
29782 -
2K1000
+關(guān)注
關(guān)注
0文章
21瀏覽量
574
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論