今天flash终于可以正常识别了,找了一个星期的原因,原来是flash的头文件中定义有问题,导致flash不能读取ID,我的Flash型号是SST39LV6401B,16位总线宽度,8MByte存储空间。
详细问题是这样的:在u-boot启动时会提示
## Unknown FLASH on Bank 0。
我用Source Insight 3.5建立工程,看u-boot的源文件。说实在话,u-boot的文件可真是够乱的,实在是受不了其中的函数调用,要不断的切换文件路径,要不是有Source Insight可以跟踪查找,你要自己找函数的互相调用和定义,估计你可以叫救护车来给你守着了,u-boot编的真tmd费劲!!!
分析一下u-boot的启动过程。u-boot启动时先进入cpu/arm7tdmi/start.S文件,在这个文件中初始化了cpu的一些参数,设置了外围总线。然后又跳到lib_arm/board.c中的void start_armboot (void)中,在这个函数中,弄了一个init_fnc_t **init_fnc_ptr,这个怪怪的,反正是负责初始化各个外围器件,包括了串口、dram等;同时在此处显示了u-boot的版本,ram配置信息。然后又有几个函数做了些事情,着急,看与Flash无关,所以不管了。
接下来遇到一个size = flash_init (); 嗯,看名字flash_init ()这个就是负责初始化flash了,这个函数在board/lpc2294.c/flash.c