<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > arm nandflash&norflash啟動(dòng)原理

arm nandflash&norflash啟動(dòng)原理

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
部分ARM9的CPU內部都集成有一個(gè)SRAM,SRAM是英文Static RAM的縮寫(xiě),它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。這樣他不需要初始化就能夠直接使用。這與我們在外部擴展的大容量的SDRAM是不一樣的,外部大容量的SDRAM是需要初始化后才能使用的,這點(diǎn)大家務(wù)必要搞清楚。這點(diǎn)在我做過(guò)移植的處理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是這樣的。在s3c2440這顆CPU上這個(gè)SRAM大小為4KB,datasheet里把它叫做Stepping Stone,江湖人稱(chēng)“起步石”。
Nandflash和Norflash是不同的:Norflash像內存一樣是直接掛在系統總線(xiàn)上的,這樣有足夠多的地址線(xiàn)使得CPU能夠尋址到每一個(gè)存儲單元上去,這也意味著(zhù)CPU能夠直接通過(guò)總線(xiàn)訪(fǎng)問(wèn)Norflash上存儲的內容,同時(shí)他還支持XIP(即片上執行,不用將代碼搬到內存中,直接在Norflash上就能運行)。而Nandflash它并不是直接掛載系統總線(xiàn)上,而是通過(guò)Nandflash控制器(這個(gè)一般集成在CPU內部)來(lái)完成讀寫(xiě)操作的。如果我們把Norflash的那種尋址方式叫直接尋址的話(huà)(不是匯編里的那個(gè)直接尋址,這里指CPU能夠直接通過(guò)地址線(xiàn)訪(fǎng)問(wèn)存儲器的存儲單元),那么這里的Nandflash就是間接尋址(這里需要Nandflash控制器來(lái)尋址)。所以我們在使用Nandflash之前,一定要初始化Nandflash控制器。
理解上面的這點(diǎn)后,就不難理解,為什么系統能夠從Norflash直接啟動(dòng),而不能直接從Nandflash啟動(dòng)。這是因為,ARM在CPU復位時(shí),CPU默認會(huì )到0x0000 0000地址處去取指令,而如果我們是從Norflash啟動(dòng)的話(huà)(一般Norflash會(huì )掛到Bank0,nGCS0上),s3c2440 CPU就會(huì )把Norflash的空間掛接到0x0000 0000這段內存空間上。這時(shí)CPU就能夠直接從Norflash上取指令運行,啟動(dòng)了。而如果是Nandflash,因為Nandflash他不能直接掛到系統總線(xiàn)上,并且他的讀寫(xiě),擦除操作必須依賴(lài)Nandflash控制器,這也就意味著(zhù)Nandflash的存儲空間永遠不能映射到0x0000 0000這個(gè)地址上去。另外,Nandflash的讀寫(xiě)操作也不是這樣直接尋址的,有興趣的同學(xué)可以自己看看Nandlfash的datasheet,寫(xiě)一個(gè)RAW的Nandflash 擦除,讀寫(xiě)操作程序就明白了。我就寫(xiě)過(guò)這么一個(gè)程序,對理解Nandflash究竟是怎么操作的非常有幫助。
而如果這些CPU要從Nandflash上啟動(dòng),那該怎么辦呢?這就要用到我之前提到的CPU的內部SRAM了。
在S3C2440的datasheet里有提到,如果我們配置從Nandflash啟動(dòng)的話(huà),那么CPU會(huì )自動(dòng)將內部SRAM的地址映射到0x0000 0000這個(gè)地址空間上了,而如果不是從Nandflash啟動(dòng),那么掛載Bank0(nGCS0)上的設備就會(huì )被映射到0x0000 0000地址空間上,如我們之前提到的Norflash。
簡(jiǎn)而言之就是:如果從Nandflash啟動(dòng),那么CPU內部SRAM被映射到0x0000 0000地址空間上,這時(shí)Norflash就不可用了。而如果是從Norflash啟動(dòng)的話(huà),那么Norflash被映射到0x0000 0000地址空間上。我們之前提到ARM CPU在復位時(shí),會(huì )默認到0x0000 0000地址上取指令。這樣也就是如果從Nandflash啟動(dòng)的話(huà),那么CPU默認會(huì )從內部SRAM中取第一條指令;而如果從Norflash啟動(dòng)的話(huà),那么CPU默認從Norflash中取第一條指令。
那如果從SRAM啟動(dòng)的話(huà),那么SRAM中的指令(也就是代碼)從哪里來(lái)的呢?在s3c2440處理器(arm920t和arm926t的核應該都是這樣的,另外我看S3C6410也是如此)上電時(shí),CPU會(huì )自動(dòng)將Nandflash的前4K代碼(或叫指令)拷貝到內部SRAM中,這是由CPU自動(dòng)完成的,不需要我們干預。這也就意味著(zhù),SRAM中的內容就是我們Nandflash上前4K的代碼了。
這樣,如果是在我們的bootloader如u-boot中就要確保,我們編譯出來(lái)的前4K代碼完成以下功能:
1, 初始化CPU,外部SDRAM,Nandflash控制器等基本功能;
2, 將Nandflash上剩余的u-boot代碼拷貝到外部的SDRAM中
3, 調到外部的SDRAM中來(lái)運行u-boot代碼。
這樣,U-boot就啟動(dòng)了。


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>