首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

OMAP-L138_FlashAndBootUtils使用及编译指导

OMAP-L138_FlashAndBootUtils使用及编译指导

OMAP-L138支持多种启动模式,包括 SPI,NAND,NOR等。TI为用户提供了两套 flash烧写工具:
(1) 使用 TI 在 PSP 包或 OMAP-L138_FlashAndBootUtils 包中提供的 flash writer 的 CCS工程,通过仿真器连接硬件板,按照提示步骤烧写 flash。
(2) 使用 OMAP-L138_FlashAndBootUtils工具包中的串口烧写工具(如 sfh_OMAP-L138.exe),通过串口连接,进行命令行烧写。
本文接下来将针对第二种方式进行详细介绍。
用户可以从开源网站上下载最新的 OMAP-L138_FlashAndBootUtils版本[1]。最新的版本为 OMAPL138_FlashAndBootUtils_2_40,本文以此版本展开讨论。
OMAP-L138_FlashAndBootUtils_2_40工具包支持 TI公司的多种芯片平台的 flash烧写,包括 OMAPL138,AM1808,C6748等。工具包内的代码是对应 LogicPD的 OMAL138/AM1808 EVM板的。如果用于用户自己的硬件板,可能需要修改工具包中相应代码并重新编译。
该工具包中包括多种 flash工具及代码。主要目录如表 1所示。
表 1 OMAP-L138_FlashAndBootUtils_2_40工具包目录结构

1. 串口烧写工具 sfh_OMAP-L138.exe的工作原理
sfh_OMAP-L138是 OMAP-L138_FlashAndBootUtils包中用于实现串口烧写 flash的应用程序。与UartHost.exe[3]工具不同,UartHost.exe是 UART启动工具,不能烧写 flash。
运行 sfh_OMAP-L138.exe时,通过 UART启动方式下载并运行 OMAPL138/GNU/sft目录下的 AIS格式 bin文件,完成芯片的初始化操作。然后通过 UART与 sfh进行命令交换,实现 flash的擦除和烧写工作。
从 OMAP-L138/GNU/sft/build目录中的 makefile文件可知,编译 sft目录内各 bin文件时需要 sft.c,device.c,uart.c以及针对不同 flash对应的 flash初始化文件。
例如 sft_OMAPL138_SPI_MEM.bin是由 sft.c,device.c,uart.c等文件与 spi.c,spi_mem.c,device_spi.c一起编译,并通过 OMAP-L138/GNU/AISUtils目录下的 HexAIS_OMAP-L138.exe,根据 sft目录下的配置文件sft_hexais.ini内的配置信息,将.out文件转换成 AIS格式的.bin文件。
2. 命令格式介绍
在命令行下输入 sfh_OMAP-L138.exe –help输出命令格式说明如下:
sfh_OMAP-L138 [-targetType ] [-flashType ] [ ] [


3. sfh_OMAPL138.exe常用命令的使用
sfh_OMAPL138.exe常用命令如表 2所示。
表 2 sfh_OMAPL138.exe常用命令表


以 SPI flash启动为例,准备如下文件:
sfh_OMAPL138.exe,来源于 OMAP-L138_FlashAndBootUtils_2_40工具包。
ubl-spi_ais.bin,来源于 OMAP-L138_FlashAndBootUtils_2_40工具包。
u-boot.bin,来源于 SDK PSP目录下的 UBoot。
u-boot-ais.bin,由 UBoot编译出的 elf格式文件 u-boot,通过 AIS转换工具生成。
首先将 OMAL138/AM1808 EVM板设置为 UART2启动模式,S7开关设置如图 1所示。 用直连串口线连接 PC与EVM板,打开 EVM板电源。在命令行模式下进入目录:OMAP-L138_FlashAndBootUtils_2_40OMAPL138GNU。


3.1全局擦除 flash命令
sfh_OMAPL138.exe –targetType OMAP-L138 –flashType SPI_MEM –erase


运行结果如图 2所示,如果是先上电,后执行该命令,则需要按下板子上的 reset键输出 “BOOTME”给上位机的sfh。
3.2烧写单个 AIS格式的应用程序
sfh_OMAP-L138.exe –targetType OMAP-L138 –flashType SPI_MEM -flash_noubl u-boot-ais.bin
OMAP-L138的 RBL支持 AIS格式,可以在启动过程中通过 AIS格式文件中的配置信息初始化芯片,如 PLL,DDR等。这样就可以直接将程序加载到片外内存,而不受片上内存大小限制,省略二级 Boot。
编译 UBoot时,在 UBoot根目录下会生成一个 elf格式的 u-boot文件,如图 3所示,在 AISgen.exe工具里添加 PLL,DDR等配置参数,将此文件转换成 AIS格式的 bin文件,可以直接烧写并启动。


图 3 AISgen 配置界面


该命令将 AIS格式的 UBoot文件写到 flash的起始地址。命令执行显示结果如图 4所示:重新上电,从图 5启动信息可见没有 UBL的运行信息,是直接从 UBoot运行的。


图 4 sfh_OMAPL138.exe –flash_noubl命令运行界面

重新上电,从图 5启动信息可见没有 UBL的运行信息,是直接从 UBoot运行的。



3.3烧写 UBL和 UBoot
sfh_OMAP-L138.exe –targetType OMAP-L138 –flashType SPI_MEM -flash ubl-spi-ais.bin u-boot.bin命令执行结果显示如图 5所示。该命令将 ubl-spi-ais.bin写到 flash的起始地址,u-boot.bin写到 flash的0x10000的偏移地址。


UBL和 UBoot烧写完后,关闭 EVM板电源,按图 6所示,将 EVM板的 S7开关设为 SPI flash启动。


打开串口终端如 Hyper terminal,打开 EVM板电源,串口终端输出信息如图 7所示,表示 UBL和 UBoot成功烧写,并成功从 SPI flash启动


图 8 终端调试信息输出


使用 sfh_OMAP-L138.exe烧写 UBL和 UBoot时,建议使用工具包自带的 UBL。因为 UBoot的烧写地址,要与 UBL的读取地址一致,这样 UBL运行时,才能正确的读取 UBoot。工具包自带的 UBL与烧写工具保证了这一点。其它版本的 UBL需要用户自行确认。
4. 根据硬件改动修改 serial flash utility
开发者自己的硬件板与 TI的 EVM比较,会影响工具使用的不同部分可能存在于:
(1) DDR型号
(2) FLASH型号
(3) 时钟频率
(4) UART配置
4.1 DDR参数修改
EVM板用的是 mDDR,大多数用户用的是 DDR2,需要修改 OMAP-L138/Common/src/device.c文件中函数Uint32 DEVICE_ExternalMemInit( )的 5个 DDR参数值。这个函数同样被 UBL调用,如果不用 UBL,则要在AISgen界面里配置正确的 DDR参数。
可使用 TI提供的 DDR寄存器配置工具[5]。根据 DDR手册进行 DDR参数的计算,
4.2 SPI flash
如果更改了 SPI flash的硬件连接,可在 OMAP-L138Commonincludedevice_spi.h文件中修改配置。
#define DEVICE_SPIBOOT_PERIPHNUM (1)//选择 SPI1
#define DEVICE_SPI_UBL_HDR_OFFSET (0*1024)//ubl在 SPI flash中的偏移地址
#define DEVICE_SPI_APP_HDR_OFFSET (64*1024)//application image在 SPI flash中的偏移地址如果更换了与 EVM板不同的 SPI flash,必要时需要修改如下两个文件:
OMAP-L138CommondriversincludeSpi_mem.h
OMAP-L138CommondriverssrcSpi_mem.c
4.3 NAND flash
NAND flash的数据位宽配置在 OMAP-L138Commonincludedevice_async_mem.h文件中定义:
#define DEVICE_ASYNC_MEM_NANDBOOT_BUSWIDTH (DEVICE_BUSWIDTH_8BIT)
如果 NAND flash更换的与 EVM上的不同,必要时需要修改如下两个文件
OMAP-L138CommondriversincludeDevice_nand.h
OMAP-L138CommondriverssrcDevice_nand.c
4.4 NOR flash
NOR flash是标准设备,除了时序参数之外,一般不需要修改,NOR flash相关代码文件如下:
OMAP-L138_FlashAndBootUtils_2_40Commondriverssrcnor.c
OMAP-L138_FlashAndBootUtils_2_40Commondriversincludenor.h
OMAP-L138Commonsrcdevice_async_mem.c
OMAP-L138Commonincludedevice_async_mem.h
OMAP-L138_FlashAndBootUtils_2_40Commondriverssrc async_mem.c
4.5 时钟及 PLL
如果外部输入时钟频率不是 24MHz,则需要 OMAP-L138Commonsrcdevice.c文件中函数DEVICE_PLL0Init()和 DEVICE_PLL1Init()的参数值。
函数原型 Uint32 DEVICE_PLL0Init(Uint8 clk_src, Uint8 pllm, Uint8 prediv, Uint8 postdiv, Uint8 div1 ,Uint8 div3, Uint8 div7)中 pllm是 PLL的倍频系数,主频计算公式为:


函数 DEVICE_PLL1Init()参数含义与 PLL0的类同,为 DDR提供时钟。
4.6 UART配置
如果系统主频发生变化,相应的模块时钟也改变,调试串口的分频值需要做相应调整,否则串口输出会因为波特率不正确而出现乱码。根据不同的主频修改 OMAP-L138Commonsrcdevice_uart.c中 DEVICE_UART_config的 UART时钟分频系数 divider的值,得到合适的 UART波特率。
如果不是用 UART2做为调试串口,修改 OMAP-L138Commoninclude device_uart.h文件中的DEVICE_UART_PERIPHNUM定义。
5. OMAP-L138_FlashAndBootUtils编译环境搭建
在根据硬件改动,修改了代码后,需要对工具包重新编译,生成 UBL和 sfh_OMAP-L138.exe。如果在 Linux下使用此工具,需要在 Linux下进行编译(具体编译过程参考
返回列表