u-boot-2014.10移植第15天----nor flash操作
硬體平臺:tq2440
開發環境:Ubuntu-3.11
u-boot版本:2014.10
本文允許轉載,請註明出處:http://blog.csdn.net/fulinus
去除nor flash防寫
在已經執行起來的u-boot命令列去除nor flash防寫:
TQ2440 # flinfo
Bank # 1: EON EN29LV160AB flash (16 x 16) Size: 2 MB in 35 Sectors
AMD Legacy command set, Manufacturer ID: 0x1C, Device ID: 0x2249
Erase timeout: 30000 ms, write timeout: 100 ms
Sector Start Addresses:
00000000 RO 00004000 RO 00006000 RO 00008000 RO 00010000 RO
00020000 RO 00030000 00040000 00050000 00060000
00070000 RO 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 00100000
00110000 00120000 00130000 00140000 00150000
00160000 00170000 00180000 00190000 001A0000
001B0000 001C0000 001D0000 001E0000 001F0000
帶有RO標識的塊使能了防寫,是u-boot自己給這些塊防寫的。通過下面的命令將所有的塊解保護,不過重啟又會有:TQ2440 # protect off all
Un-Protect Flash Bank # 1
TQ2440 # flinfo
Bank # 1: EON EN29LV160AB flash (16 x 16) Size: 2 MB in 35 Sectors
AMD Legacy command set, Manufacturer ID: 0x1C, Device ID: 0x2249
Erase timeout: 30000 ms, write timeout: 100 ms
Sector Start Addresses:
00000000 00004000 00006000 00008000 00010000
00020000 00030000 00040000 00050000 00060000
00070000 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 00100000
00110000 00120000 00130000 00140000 00150000
00160000 00170000 00180000 00190000 001A0000
001B0000 001C0000 001D0000 001E0000 001F0000
TQ2440 #
如果沒有norflash的讀者可以跳過這裡,u-boot從nor flash啟動之前先嚐試使用norflash的操作,如同對sdram的操作。
nor flash寫操作
將0x33F80000起始的16bytes寫到nor flash的0地址中去:
TQ2440 # cp.b 33f80000 0 10
如果你沒有關閉DEBUG定義,會有下面的資訊:flash_is_busy: 0
fwc addr 00000aaa cmd aa 00aa 16bit x 16 bit
fwc addr 00000554 cmd 55 0055 16bit x 16 bit
fwc addr 00000aaa cmd a0 00a0 16bit x 16 bit
fwc addr 00000aaa cmd aa 00aa 16bit x 16 bit
fwc addr 00000554 cmd 55 0055 16bit x 16 bit
fwc addr 00000aaa cmd a0 00a0 16bit x 16 bit
不用管這個資訊。
norflash比較操作
TQ2440 # cmp.b 0 33f80000 10
Total of 16 byte(s) were the same
same說明寫進去了。norflash讀操作
TQ2440 # md.b 33f80000
33f80000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33f80010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33f80020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33f80030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
TQ2440 #
你會很奇怪,怎麼都是0呢?我不是都把程式碼拷貝到0x33F80000這個位置了嗎?怎麼都會是0呢?我們仔細發現u-boot列印的資訊,發現u-boot做了重定向:
U-Boot code: 33F80000 -> 33FAA0E0 BSS: -> 33FAF838 u-boot的code段加上BSS段長度為194616bytes,大約190K
。。。。。。
ramsize: 04000000 SDRAM空間64M
TLB table from 33ff0000 to 33ff4000 TLB重定向到了33ff4000向上移動了0x4000(16K)
Top of RAM usable for U-Boot at: 33ff0000 u-boot可以用的空間頂點位置在33ff0000上面還有1M的預留空間(hide mem)
Reserving 190k for U-Boot at: 33fc0000 將u-boot重定位到了0x33FC0000位置
Reserving 4160k for malloc() at: 33bb0000 堆的首地址是在0x33BB0000位置,加上4160K為堆的頂點地址,即是0x33FC0000,也就是u-boot程式碼的首地址。
Reserving 28 Bytes for Board Info at: 33baffe4
Reserving 160 Bytes for Global Data at: 33baff44
New Stack Pointer is: 33baff38
TLB table from 33ff0000 to 33ff4000 TLB重定向到了33ff4000向上移動了0x4000(16K)
Top of RAM usable for U-Boot at: 33ff0000 u-boot可以用的空間頂點位置在33ff0000上面還有1M的預留空間(hide mem)
Reserving 190k for U-Boot at: 33fc0000 將u-boot重定位到了0x33FC0000位置
Reserving 4160k for malloc() at: 33bb0000 堆的首地址是在0x33BB0000位置,加上4160K為堆的頂點地址,即是0x33FC0000,也就是u-boot程式碼的首地址。
Reserving 28 Bytes for Board Info at: 33baffe4
Reserving 160 Bytes for Global Data at: 33baff44
New Stack Pointer is: 33baff38
也就是說u-boot程式碼被重新定位到了0x33FC0000位置,後面4160K做了堆,堆中的位元組被清0了,所以我們在讀0x33f80000位置的位元組時,它們都為0。讀0x33FC0000 - 0x10起始地址的內容:
TQ2440 # md.b 33FBFFF0
33fbfff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33fc0000: be 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
33fc0010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
33fc0020: 60 00 f8 33 c0 00 f8 33 20 01 f8 33 80 01 f8 33 `..3...3 ..3...3
可見從0x33FC0000開始才是u-boot 的程式碼的起始位置。我們修改一下tq2440.h檔案中CONFIG_SYS_TEXT_BASE的值,讓程式碼直接從重定向的位置執行,這樣u-boot就不需要重定向操作了:#define CONFIG_SYS_TEXT_BASE 0x33FC0000
編譯、燒錄、執行。注意燒錄和執行地址也要變。u-boot列印的資訊是和上面一樣的:U-Boot 2014.10 (Nov 08 2014 - 17:39:09)
U-Boot code: 33FC0000 -> 33FEA0E0 BSS: -> 33FEF838
CPUID: 32440001
FCLK: 405.600 MHz
HCLK: 101.400 MHz
PCLK: 50.700 MHz
monitor len: 0002F838
ramsize: 04000000
TLB table from 33ff0000 to 33ff4000
Top of RAM usable for U-Boot at: 33ff0000
Reserving 190k for U-Boot at: 33fc0000
Reserving 4160k for malloc() at: 33bb0000
Reserving 28 Bytes for Board Info at: 33baffe4
Reserving 160 Bytes for Global Data at: 33baff44
New Stack Pointer is: 33baff38
RAM Configuration:
Bank #0: 30000000 64 MiB
U-Boot code: 33FC0000 -> 33FEA0E0 BSS: -> 33FEF838
CPUID: 32440001
FCLK: 405.600 MHz
HCLK: 101.400 MHz
PCLK: 50.700 MHz
monitor len: 0002F838
ramsize: 04000000
TLB table from 33ff0000 to 33ff4000
Top of RAM usable for U-Boot at: 33ff0000
Reserving 190k for U-Boot at: 33fc0000
Reserving 4160k for malloc() at: 33bb0000
Reserving 28 Bytes for Board Info at: 33baffe4
Reserving 160 Bytes for Global Data at: 33baff44
New Stack Pointer is: 33baff38
RAM Configuration:
Bank #0: 30000000 64 MiB
。。。。。。
u-boot燒錄到nor flash中去:
1、解防寫
2、擦出nor flash;
TQ2440 # erase all
3、將0x33FC0000地址開始的190K位元組大小的內容複製到nor flash的0地址開始處。
flash寫的好慢,等了N久......
等了N久後我突然想到J-link好像可以直接向Nor flash中寫,這樣寫的就是乾淨的程式碼了。不過我還是要等這邊寫完,看看會有什麼現象。
等了半個小時還是不見停止,算了我還是將其中斷吧!
寫的速度跟蝸牛有得一比,Nor flash啊!在你和nand flash之間,叫我怎麼愛你?
看來我錯了,我把這個頻率設定的太低,所以寫的很慢。
我把它燒錄到nor flash中,沒有成功啟動。什麼原因呢?
明天繼續。
相關文章
- u-boot-2014.10移植第16天----Nor flash啟動boot
- u-boot-2014.10移植第28天----nand flash啟動(六)bootNaN
- u-boot-2014.10移植第27天----nand flash啟動(五)bootNaN
- u-boot-2014.10移植第25天----nand flash啟動(三)bootNaN
- u-boot-2014.10移植第26天----nand flash啟動(四)bootNaN
- u-boot-2014.10移植第23天----nand flash啟動(一)bootNaN
- u-boot-2014.10移植第24天----nand flash啟動(二)bootNaN
- u-boot-2014.10移植第21天----新增nand flash命令支援(三)bootNaN
- u-boot-2014.10移植第22天----新增nand flash命令支援(四)bootNaN
- u-boot-2014.10移植第19天----新增nand flash命令支援(一)bootNaN
- u-boot-2014.10移植第20天----新增nand flash命令支援(二)bootNaN
- u-boot-2014.10移植第29天----nand flash的SPL啟動(一)bootNaN
- u-boot-2014.10移植第30天----nand flash的SPL啟動(二)bootNaN
- u-boot-2014.10移植第31天----核心啟動(一)boot
- u-boot-2014.10移植第17天----新增DM9000網路卡支援(一)boot
- u-boot-2014.10移植第18天----新增DM9000網路卡支援(二)boot
- NAND Flash和NOR Flash的區別NaN
- nor flash 和nand flash 傻傻分不清楚NaN
- 宏旺半導體科普SPI NAND Flash和SPI NOR Flash的區別NaN
- 第10天:CSS初始化操作CSS
- 為什麼NOR FLASH仍是汽車行業的優選行業
- S3C2440從NAND Flash啟動和NOR FLASH啟動的問題S3NaN
- 第10天 | 12天搞定Python,檔案操作(超詳細)Python
- 第04天C語言(15):for迴圈-注意點C語言
- ZYNQ FLASH+EMMC手動移植LINUX啟動Linux
- 痞子衡嵌入式:序列NOR Flash的DQS訊號功能簡介
- Flutter第5天--佈局例項+操作互動Flutter
- python學習筆記:第8天 檔案操作Python筆記
- Python學習筆記:第3天 字串的操作Python筆記字串
- 第 0 天/第 1 天/第 2 天:雲時代的軟體生命週期
- TrendForce:庫存水位持續墊高 NOR Flash下半年價格恐轉跌
- 痞子衡嵌入式:英飛凌MirrorBit工藝NOR Flash的扇區架構設計ORB架構
- 又一個輪迴(r15筆記第100天)筆記
- 工作第9天~
- CINNO Research:2018年第三季度NOR Flash營收排行榜營收
- 第15課
- 移植uboot-2015-10(一)boot
- Java之路第3天Java