久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

S3C2440從NAND Flash啟動(dòng)和NOR FLASH啟動(dòng)的問題

 怡紅公子0526 2022-05-20 發(fā)布于北京

1.為什么NAND FLASH不能直接運(yùn)行程序

? ? NAND FLASH本身是連接到了控制器上而不是系統(tǒng)總線上,。CPU運(yùn)行機(jī)制為:CPU啟動(dòng)后是要取指令執(zhí)行的,如果是SROM,、NOR FLASH 等之類的,,CPU 通過地址線發(fā)個(gè)地址就可以取得指令并執(zhí)行,NAND FLASH不行,,因?yàn)镹AND FLASH 是管腳復(fù)用,,它有自己的一套時(shí)序,這樣CPU無法取得可以執(zhí)行的代碼,,也就不能初始化系統(tǒng)了,。

? ? NAND FLASH是順序存取設(shè)備,不能夠被隨機(jī)訪問,,程序就不能夠分支或跳轉(zhuǎn),,這樣你如何去設(shè)計(jì)程序。

? ? U-BOOT 支持ARM,、 PowerPC等多種架構(gòu)的處理器,,也支持Linux、NetBSD和VxWorks等多種操作系統(tǒng),,主要用來開發(fā)嵌入式系統(tǒng)初始化代碼 bootloader,。bootloader是芯片復(fù)位后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,完成由硬件啟動(dòng)到操作系統(tǒng)啟動(dòng)的過渡,,為運(yùn)行操作系統(tǒng)提供基本的運(yùn)行環(huán)境,,如初始化CPU、堆棧,、初始化存儲(chǔ)器系統(tǒng)等,,其功能類似于PC機(jī)的BIOS,。

2.為什么s3c2440可以從NAND FLASH啟動(dòng)

? ? 椐了解 NOR FLASH 是容量小,速度快,,穩(wěn)定性好,,適合做程序存儲(chǔ)器。

? ? NAND FLASH 總?cè)萘看?,適合做數(shù)據(jù)存儲(chǔ)器是不能從NAND FLASH啟動(dòng)的,,NAND FLASH是的讀寫時(shí)序是不能直接有ARM硬件產(chǎn)生的,要讀寫NAND FLASH是要通過程序來實(shí)現(xiàn)的,,很明顯能看出來的就是NAND FLASH只有8個(gè)數(shù)據(jù),、地址復(fù)用的數(shù)據(jù)地址接口。2410/2440可以直接從NAND FLASH啟動(dòng)的,,因?yàn)樗袾AND前面的4K映射到了RAM的空間

2.1 Flash種類

? ? NOR FLASH地址線和數(shù)據(jù)線分開,,來了地址和控制信號(hào),數(shù)據(jù)就出來,。

? ? NAND Flash地址線和數(shù)據(jù)線在一起,,需要用程序來控制,才能出數(shù)據(jù),。

? ? 通俗的說,,就是光給地址不行,要先命令,,再給地址,,才能讀到NAND的數(shù)據(jù)。而且都是在一個(gè)總線完成的,。

? ? 結(jié)論是:ARM無法從NAND直接啟動(dòng),。除非裝載完程序,才能使用NAND Flash.
裝載程序只能從mask rom 或者Nor flash,。

? ? 三星的2410可以從NAND FLASH啟動(dòng)程序,它會(huì)把第一塊的前4KB復(fù)制到內(nèi)部SRAM中然后從SRAM執(zhí)行,也就是說,你需要編寫一個(gè)長(zhǎng)度小于4K的引導(dǎo)程序,作用是將主程序拷貝到SDRAM中運(yùn)行(NAND FLASH地址不是線性的,程序不能直接運(yùn)行,必須拷貝到線性RAM中)

3.NAND啟動(dòng)和NOR啟動(dòng):

? ? 需要檢測(cè)硬件啟動(dòng)方式,,啟動(dòng)方式是由硬件OM0管腳決定的,軟件無法檢測(cè)硬件電平狀態(tài),,但可以根據(jù)CPU的啟動(dòng)特性來檢測(cè),。
在這里插入圖片描述

3.1 NAND啟動(dòng):

? ? 如果配置為NAND FLASH啟動(dòng)(啟動(dòng)模式選擇開關(guān)拔到nand端,此時(shí)OM0管腳拉低)S3C2440的NAND控制器會(huì)自動(dòng)把NAND FLASH中的前4K代碼數(shù)據(jù)搬到內(nèi)部SRAM中(地址為0x40000000),同時(shí)還把這塊SRAM地址映射到了0x00000000地址,。CPU從0x00000000位置開始運(yùn)行程序,。 【從NAND FLASH啟動(dòng)CPU時(shí),CPU會(huì)通過內(nèi)部的硬件將NAND FLASH開始的4KB數(shù)據(jù)復(fù)制到稱為“Steppingstone”的4KB的內(nèi)部RAM中(起始地址為0),,然后跳到地址0開始執(zhí)行】

3.2 NOR啟動(dòng):

? ? 如果配置為NOR FLASH啟動(dòng)(啟動(dòng)模式選擇開關(guān)拔到nor端,,此時(shí)OM0管腳拉高),0x00000000就是NOR FLASH實(shí)際的起始地址,,NOR FLASH中的程序就從這里開始運(yùn)行,,不涉及到數(shù)據(jù)拷貝和地址映射,。

3.3 總結(jié):

? ? NAND啟動(dòng)時(shí),地址0x00000000為內(nèi)部SRAM映射的地址,;

? ? NOR啟動(dòng)時(shí),,地址0x00000000為NOR FLASH的實(shí)際起始地址。向NOR FLASH中寫數(shù)據(jù)需要特定的命令時(shí)序,,而向內(nèi)存中寫數(shù)據(jù)可以直接向內(nèi)存地址賦值,。

? ? 對(duì)于S3C2440處理器 M[1:0]選擇01 或 10時(shí):norflash基地址為0x00000000 ,SRAM頂端地址0x40000FFF,。上電后處理器直接從0x00000000處取出指令,,arm處理器的SP(堆棧指針寄存器)指向0x40000FFF。

? ? OM[1:0]選擇00,,S3C2440會(huì)啟用內(nèi)部的SRAM緩沖器會(huì)將nandflash中的前4KB大小的程序自動(dòng)拷貝到BootSRAM中,。BootSRAM基地址0x00000000,頂端0x00000FFF,。上電后,,arm處理器從0x00000000取出第一條指令,arm處理器的SP(堆棧指針寄存器)指向0x00000FFF,。
在這里插入圖片描述
在這里插入圖片描述

4.從Nand Flash啟動(dòng)U-BOOT的基本原理

4.1 前4K問題

? ? 如果S3C2410被配置成從Nand Flash啟動(dòng)(配置由硬件工程師在電路板設(shè)置), S3C2410的Nand Flash控制器有一個(gè)特殊的功能,在S3C2410上電后,Nand Flash控制器會(huì)自動(dòng)的把Nand Flash上的前4K數(shù)據(jù)搬移到4K內(nèi)部RAM中,并把0x00000000設(shè)置內(nèi)部RAM的起始地址,CPU從內(nèi)部RAM的0x00000000位置開始啟動(dòng),。這個(gè)過程不需要程序干涉。程序員需要完成的工作,是把最核心的啟動(dòng)程序放在Nand Flash的前4K中,。

4.2 程序大于4K時(shí)怎么辦?

? ? 那么當(dāng)程序大于 4k 的時(shí)候,,當(dāng)我們以 nand flash啟動(dòng)后,,前面的4Kb 被拷貝到 片內(nèi)RAM中去執(zhí)行(自動(dòng)完成)。我們?cè)谶@前4K的程序中初始化SDRAM(SDRAM 使用前需要初始化) ,,然后將剩下的程序拷貝到 SDRAM中(不是只有4kb 被拷貝到片內(nèi)RAM中執(zhí)行了嘛)然后跳轉(zhuǎn)到 SDRAM中去執(zhí)行剩下的程序,。

? ? 那么也就是說 通常當(dāng)程序大于 4kb的 時(shí)候,我們就需要把程序拷貝到SDRAM中去運(yùn)行,。(程序小于4KB 那么也就可以不用拷貝了,,以nand flash方式 啟動(dòng)后,程序全被拷貝到 片內(nèi)4kb的 RAM中去運(yùn)行,。)

? ? 那么,,既然程序大于4kb的時(shí)候需要從nand flash中拷貝到 SDRAM中去運(yùn)行。自然可以想到 燒到nand flash中的程序前面一部分代碼應(yīng)該 是初始化SDRAM(程序最終需要拷貝到SDRAM中去運(yùn)行)和 將NAND flash中的剩余的程序拷貝到SDRAM中去(全考過去也行,,方便點(diǎn)),,然后跳轉(zhuǎn)到SDRAM中執(zhí)行。

4.2 啟動(dòng)程序的安排

? ? 由于Nand Flash控制器從Nand Flash中搬移到內(nèi)部RAM的代碼是有限的,所以在啟動(dòng)代碼的前4K里,我們必須完成S3C2410的核心配置以及把啟動(dòng)代碼(U-BOOT)剩余部分搬到RAM中運(yùn)行,。
? ? u-boot源碼不支持從nand flash啟動(dòng),,可是s3c2410支持從nand flash啟動(dòng),,開發(fā)板(sbc-2410x)加電后s3c2410將nand flash的前4k(保存有u-boot的部分功能--拷貝功能--把nand flash中的內(nèi)容拷貝到SDRAM)拷貝到sram(s3c2410芯片內(nèi)的sram)。這就需要修改u-boot源碼,,增加u-boot的功能: 使u-boot在得到執(zhí)行權(quán)后能夠?qū)⑵渥陨砜截惖介_發(fā)板上SDRAM中,,以便處理器能夠執(zhí)行u-boot。

? ? Nand Flash的命令,、地址,、數(shù)據(jù)都通過I/O口發(fā)送,管腳復(fù)用,,這樣做的好處是,,可以明顯減少NAND FLASH的管腳數(shù)目,將來如果設(shè)計(jì)者想將NAND FLASH更換為更高密度,、更大容量的,,也不必改動(dòng)電路板。

5.為什么NOR啟動(dòng)要將sp設(shè)置為0x40000000+4096

在這里插入圖片描述
? ? 用NOR啟動(dòng)時(shí),,片內(nèi)的存儲(chǔ)控制器的BANK0-BANK7這8個(gè)BANK都對(duì)應(yīng)了其他用途,,所以設(shè)計(jì)者在BANK7結(jié)束的地址0x40000000的地方作為NOR FLASH的啟動(dòng)地址,而NAND FLASH啟動(dòng)的地址則是0x00000000,。

? ? 因?yàn)閷?duì)于啟動(dòng)文件.S來說,,4K的空間是足夠存放,代碼段,、BSS......和堆棧段了,,因?yàn)槎褩5腟P是從高地址往低地址移動(dòng)的,所以要將堆棧的起始地址放在堆棧段的高地址,。

? ? 你也可以不用設(shè)置成4096,,但要保證堆棧的長(zhǎng)度不能和下面其他段重疊,若重疊,,就會(huì)出BUG,,保險(xiǎn)值是4096(4K,見上圖),因?yàn)镾RAM就是4K設(shè)計(jì)的,。

??大家的鼓勵(lì)是我繼續(xù)創(chuàng)作的動(dòng)力,,如果覺得寫的不錯(cuò),歡迎關(guān)注,,點(diǎn)贊,,收藏,轉(zhuǎn)發(fā),,謝謝,!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多