MyException - 我的异常网
当前位置:我的异常网» Flash » u-boot-2014.10移栽第15天-nor flash操作

u-boot-2014.10移栽第15天-nor flash操作

www.myexceptions.net  网友分享于:2015-02-08  浏览:0次
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
不用管这个信息。

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

也就是说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烧录到nor flash中去:
1、解写保护
2、擦出nor flash;
TQ2440 # erase all

3、将0x33FC0000地址开始的190K字节大小的内容复制到nor flash的0地址开始处。
flash写的好慢,等了N久......
等了N久后我突然想到J-link好像可以直接向Nor flash中写,这样写的就是干净的代码了。不过我还是要等这边写完,看看会有什么现象。
等了半个小时还是不见停止,算了我还是将其中断吧!
根据文档操作:用JLINK烧写Uboot到NOR_FLASH配置过程_1

写的速度跟蜗牛有得一比,Nor flash啊!在你和nand flash之间,叫我怎么爱你?
看来我错了,我把这个频率设置的太低,所以写的很慢。
我把它烧录到nor flash中,没有成功启动。什么原因呢?
明天继续。



































文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
一个程序员的时间管理
一个程序员的时间管理
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
 程序员的样子
程序员的样子
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员的鄙视链
程序员的鄙视链
我是如何打败拖延症的
我是如何打败拖延症的
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Java程序员必看电影
Java程序员必看电影
编程语言是女人
编程语言是女人
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
我的丈夫是个程序员
我的丈夫是个程序员
中美印日四国程序员比较
中美印日四国程序员比较
程序员和编码员之间的区别
程序员和编码员之间的区别
每天工作4小时的程序员
每天工作4小时的程序员
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员必看的十大电影
程序员必看的十大电影
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
鲜为人知的编程真相
鲜为人知的编程真相
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
如何成为一名黑客
如何成为一名黑客
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
旅行,写作,编程
旅行,写作,编程
程序员都该阅读的书
程序员都该阅读的书
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
漫画:程序员的工作
漫画:程序员的工作
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
代码女神横空出世
代码女神横空出世
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有