Chinaunix首页 | 论坛 | 博客
  • 博客访问: 823107
  • 博文数量: 54
  • 博客积分: 8076
  • 博客等级: 中将
  • 技术积分: 648
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-01 15:11
文章分类

全部博文(54)

分类:

2007-12-23 12:33:54

      前段时间给自己定下的短期目标,终于完成了。看着自己写的Loader能在板上跑,而且能正确引导其他程序,心里总算有点成就感。怎么说呢,BootLoader这东西,说它复杂也不是,只是设置一下CPU上的Register,能正确初始化CPU和外围设备就行;说它简单也不算,因为要考虑太多东西,时序、初始顺序、初始值,这一切并不是那么容易掌握,CPU和外围芯片的Datasheet如果没有通读研读,那是绝对做不出来的。
 
      在开发过程中,虽然有很多现成的模块提供给自己参考,但是到了自己真正要做一个出来的时候就不是那么简单了。硬件上的不同,涉及到了太多软件上的细节。比如说SDRAM芯片的差异,就足以令你要花大量的时间去重新计算其Trcd、Tsrc、Refresh Period等等。我一直认为,一个优秀的硬件工程师或软件工程师,不仅仅在于硬件设计、写代码的功力,更体现在调试、寻找问题所在的能力。而介于硬件和软件开发之间的嵌入式开发,其Debug能力可能来说是最必需具备的。既要了解硬件的工作原理(有时候甚至要精通),又要钻研软件上的细节,这些令得在嵌入式系统开发中,问题的定位尤为困难。
 
      在这次的短期目标学习中,我在2410板上焊了一块Norflash,一开始就压根烧不进程序,我不知道是没焊好(因为管脚太细,CPU又是BGA封装,所以很难检测每个引脚是否通路)的缘故,还是烧写软件没置好正确的时序的原因。到后来只好叫有经验的同事帮忙重新焊了一次,以减少硬件上出现问题的几率。求助于板子的售方,得到了一个不用手动置时序的Flash Programmer,终于能把程序烧进去了(这里要注意SJF2410_for_nor.exe要求硬件上接的是JTAG下载线,而不是Wiggle-JTAG仿真器)。当自己的测试程序--一个简单的LED显示,能在2410&Norflash跑的时候,总算松了一口气。芯片到达->焊接->试烧-不行->重新烧-不行->重新焊->烧-不行->求助->我再烧->终于好了,这个流程我花了2天的时候,还不带周末。接下是程序编写了--其实程序在芯片到达前就写好了,只差调试。因为以前做个VxWorks BSP的移植,所以对于问题的定位还算蛮有心得的。在可疑的地方添加自己的测试程序,一步一步的跟踪,很快就会得到问题的所在。2410 Clock的初始化中,MPLLCON和CLKDIVN的初始顺序搞反了,搞得System Idle;还有就是Uart_printf中,由于调用Uart_putc之间没有添加Delay,弄得串口输出乱码等等。以上所述的,一些可以通过测试程序跟踪到,一些只有靠经验自己去分析代码了。幸好这个工程不大,也很简单。但是复杂的系统也是由简单的模块构建而成的,不是吗?最起码要保持简单模块不会出现问题,那样才能通过精妙的架构,构建出复杂的系统。
 
      虽然这次的MiniLoader,我只完成了LED、UART和CPU核心的初始化,没有MMU、Nandflash、Net等设备的初始化。但是也能担当Loader的任务了。接下来应该是修改官方自带的BootLoader,令它名副其实成为自己系统的引导系统。自带的vivi实在用得不是很顺,虽然功能很多,但是却偏偏不能从Norflash启动(要修改大量的代码才可以,但是我没那个能力和精力,所以只好从官方给的Bootloader动手术了)。况且vivi、u-boot等等引导动不动就70kB,甚至上百KB,当然在2410等可以拥有大容量的Flash还感觉不出什么,但是如果到了AT91SAM7或44B0的板上,就觉得单引导程序就大得可恶了。而自己裁剪出来的bootloader最大不会超出6KB,足可以应付日后代码尺寸性要求。要修改有:支持从Norflash引导,支持从Nandflash引导,支持Nandflash的读写,支持SWI、FIQ、IRQ中断、自带一些常用的测试程序。至于像网络设备驱动、USB驱动等比较复杂的,如果到时我有那个能力,再去决定是否去着手吧。
                                                               By Septem 2007.12.23
阅读(4138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~