2008年12月11日星期四

利用u-boot烧写内部和外部FLASH

利用u-boot烧写内部和外部FLASH

处理器使用LPC2214 U-BOOT使用2008.10
工具链使用gcc

有时候程序需要分段烧写到内部和外部flash中,这样,可以利用内部FLASH的加密功能,又可以利用外部FLASH的大容量。而这样烧写比较麻烦,
可以将直接生成的hex文件烧如内部和外部flash的工具好像还没有。可以使用这几个方法,首先将编译生成的hex文件,手工(编程序实现更好,可能使用
其他工具组合也可实现)根据地址分为两个hex文件(hex文件格式较简单),内部flash的和外部flash的,这样就可以使用ISP工具,J-FLASH或,
OPENOCD等工具分别烧写到内部和外部flash。

再一种方法是利用u-boot,首先使用ISP把u-boot烧入内部FLASH,然后使用串口或网口加载应用程序bin文件到ram,再使用u-boot的cp.b指令,根据地址
分别把程序烧写到内部和外部FLASH,当然烧写到外部FLASH的地址偏移要先从u-boot.map文件中得出。如果RAM太小,就需要在编译u-boot时定义:
CFG_DIRECT_FLASH_TFTP:

Enable TFTP transfers directly to flash memory;
without this option such a download has to be
performed in two steps: (1) download to RAM, and (2)
copy from RAM to flash.

The two-step approach is usually more reliable, since
you can check if the download worked before you erase
the flash, but in some situations (when system RAM is
too limited to allow for a temporary copy of the
downloaded image) this option may be very useful.
从而不需要加载到ram中,直接烧写。
这样就也需要分成两个bin文件,使用hex2bin从分开的hex生成即可。试验完毕后即可把启动脚本设置到 bootcmd,从而上电时自动加载烧写。这样可以板子上
设置一个跳线,uboot的startup.s中判断是否启动u-boot还是应用程序。当然如果flash不够大,还可以在使用cp.b命令时,覆盖掉u-boot。

没有评论: