一、编写目的
由于调试ARM9时不像MCU那样,可以使用仿真器单步调试(起码ARM9的大部分应用不会用这样做),因此第一次调试的过程是比较痛苦的。幸运的是AT91SAM9260这款IC可以使用镜像烧录工具SAM-BA来进行调试,使用此工具可以将程序BIN文件下载到目标板的SRAM(内部4KB)或SDRAM(外部)中运行,从而使我们能完成第一步,串口输出“Hello world!”。只要完成了第一步,接下来的软件调试就容易多了。软件开发的后期,也可以使用该方法下载程序到SDRAM中运行,从而减少对FLASH的擦写,加快调试速度。
本文档用于说明如何使用SAM-BA进行AT91SAM926的前期调试。
二、SAM-BA调试
1. AT91SAM9260启动流程
如下图所示(此图截于AT91SAM9260的芯片手册),CPU上电启动时先会从DataFlash0中查找有校数据(启动程序),如果当中的数据有效果,则拷贝到内部SRAM(4KB)中并运行,否则再从下一个存储器中查找。查找顺序依次为DataFlash0、DataFlash1、NandFlash,如果上述存储器中都没有有效程序,则运行内部ROM中的程序(出厂时固化)。此程序将目标板模拟成一个USB子设备,通过SAM-BA进行交互操作。
2. 地址分配
AT91SAM9260的存储器地址分配如下图所示(此图截于AT91SAM9260的芯片手册)。根据ARM9的特性,系统正常启动的情况下,由CPU读取有效存储器(Dataflash或NandFlash)中的程序的前4KB代码至SRAM0中,然后跳到SRAM0的起始地址(0x200000)中运行。所以程序存储器中的前4KB代码必须精简而且功能完整,它需要做的事情就是初始化必要的硬件和搬运代码的工作了。
3. 使用SAM-BA v2.12下载bootstrap代码至于SRAM中运行
以下使用GH管理器的程序文件进行测试,要使用到bootstrap和U-BOOT的BIN文件。因为bootstrap中没有输出信息,所以U-BOOT也要使用。
Ø 连接目标板与PC机
Ø 下载U-BOOT镜像到NAND
Ø 下载bootstrap到内部SRAM0中(这里实际上是代替了固化的ROM程序的工作)
Ø 输入命令行,跳到SRAM0中运行
Ø 此时,串口助手上输出了U-BOOT的信息