1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的。一般在汇编部分完成各种初始化的操作,比如关闭看门狗,防止开发板每3s启动一次,初始化SDRAM,初始化NANDFLASH,由于希望裸板有可以工作在更加高的频率下,因此要初始化时钟,设置FCLK:HCLK:PCLK的比例,另外nandflash有个特殊操作,会将前4k大小的空间自动复制到cpu中的前4kRAM中,这时cpu这4k代码其实是将存在nandflash中的bootloader复制到sdram中。然后跳转利用位置无关码的指令ldr pc,=main跳到sdram中的main处执行。然后在主函数中设置内核参数,开始tag,命令行tag,memrory tag,以及end tag,之后将内核读入到内存中。之后跳转执行。但是当内核启动时会输出一些打印信息,例如根文件系统在什么地方,终端是什么的信息。因此还需要设置串口,设置串口当然有一些初始化,例如设置GPIO为端口复用,设置内部上拉,设置是否用流控,设置传输的长度,设置奇偶校验位,设置波特率,设置查询还是用中断。之后编写读函数。

2.对于nandflash来说,对其读写是以页为单位来进行读写的因此,对于一个nandflash来说,其一共有多少页,之后选中这其中的某一页之后,之后将这一页的数据读到移位页中,然后再发送出去,一页的大小是0到2047,每一页都会有oob,大小是64字节,这是由nandflash的特性决定的,这是因为读nandflash可能读写过程中会出现读写的坏块,oob是校验用的,通过某种算法,当读取到某一页时,会生成相应的效验码,与之前的对比,如果不相同,则对其坏块进行修正。读nandflash时首先需要设置时序,这需要我们去看时序图,去计算出这三个参数是多少,之后设置地址。注意nandflash只有8个IO读写的口,因此命令,地址,数据肯定是分时复用的。在设置nandflash时要注意的是时间要延迟一会儿,不然会出问题。

3.对于bootloader从norflash启动还是nandflash启动还是有很大的差别i的,对于bootloader从norflash启动的话,此时cpu看到的0地址是在norflash上,bootloader从norflash上复制到sdram中,链接地址在sdram中。

对于bootloader从nandflash启动,根据nandflash的特性,此时cpu看到的0地址是在cpu的片内ram中,上电后将前4k移动到ram中,此时cpu看到的是ram中的地址0,在这4k代码中,将nandflash中的bootloader复制到sdram中,当运行这4k代码中的跳转到main函数时,它会直接跳到nandflash中的bootloader中的main处执行,用的位置无关码。

4.对于bootloader的调试,用openjtag下载程序到norflash,然后重启,可以看到中端会打印一些信息,但是将程序下载到nandflash,然后重启,就什么也不会显示,说明在问题出在nand_read()函数里面。检查发现是里面的读地址的函数写错了。在修改之后,重新编译,然后下载,重启,从nandflash启动,在终端可以看到一些打印信息。说明nand_read()函数没有问题了。至此,uboot的功能已经实现了。

最新文章

  1. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点
  2. cocoapods 升级到最新beta 版
  3. PHP获取某远程网站的服务器时间
  4. redhat或centos关闭防火墙并开启sshd服务
  5. Knockout.js 初探
  6. 对比MySQL,什么场景MongoDB更适用
  7. Git配置安装使用教程操作github上传克隆数据
  8. iOS8及以后 地图定位当前城市
  9. java基础之导入(Excel)2
  10. IE条件注释,嗅探低版本IE用户,并引导升级
  11. Context.Response.End(); VS HttpContext.Current.ApplicationInstance.CompleteRequest();
  12. Jmeter性能测试之进阶Java request的使用
  13. ie 9.10 兼容性问题 遇到的坑
  14. P1880 [NOI1995]石子合并(区间DP)
  15. genstr.py
  16. 吴裕雄 10-MySQL插入数据
  17. RouteOS 频繁自启
  18. Git的简单操作
  19. 负数在计算机中的表示 Byte-128
  20. MySQL基本操作之命令行操作

热门文章

  1. ubuntu16.04搭建geodjango+postgresql+postgis的WebGIS框架(三)加载空间数据
  2. UI5-学习篇-6-SAP创建OData服务-RFC
  3. JDK1.8 LocalDateTime 时间类与字符互转
  4. (转)NHibernate+MySql常见问题
  5. Unity3D教程宝典之Shader篇
  6. UIApplication 的学习
  7. idea git 从github上拉取项目 更改上传
  8. struts2与spring整合时需要注意的点
  9. 吴裕雄 23-MySQL ALTER命令
  10. Redis集群模式部署