DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1230|回复: 0
打印 上一主题 下一主题

[待整理] OMAP-L138_FlashAndBootUtils使用及编译指导

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-10 07:40:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        简介

        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 <Command> [-targetType <Target>] [-flashType <FlashType>] [<Options>] [<InputFiles]各参数说明如下表所示,targetType默认为 OMAP-L138,FlashType默认为 SPI_MEM。使用默认选项时相应参数可以不输入。
         
       

       

         

        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_40\OMAPL138\GNU。
         

        1 S7开关设置

         

        3.1全局擦除 flash命令

        sfh_OMAPL138.exe &ndash;targetType OMAP-L138 &ndash;flashType SPI_MEM &ndash;erase

         

       

        2 sfh_OMAPL138.exe &ndash;erase命令运行界面

         

        运行结果如图 2所示,如果是先上电,后执行该命令,则需要按下板子上的 reset键输出 “BOOTME”给上位机的sfh。
         

        3.2烧写单个 AIS格式的应用程序

        sfh_OMAP-L138.exe &ndash;targetType OMAP-L138 &ndash;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 &ndash;flash_noubl命令运行界面

         

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

        5 UBoot直接运行界面

        3.3烧写 UBL UBoot

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

        6 sfh_OMAPL138.exe &ndash;flash命令运行界面

         

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

        7 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-L138\Common\include\device_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-L138\Common\drivers\include\Spi_mem.h

        OMAP-L138\Common\drivers\src\Spi_mem.c

         

        4.3  NAND flash

        NAND flash的数据位宽配置在 OMAP-L138\Common\include\device_async_mem.h文件中定义:

         

        #define DEVICE_ASYNC_MEM_NANDBOOT_BUSWIDTH (DEVICE_BUSWIDTH_8BIT)

         

        如果 NAND flash更换的与 EVM上的不同,必要时需要修改如下两个文件

         

        OMAP-L138\Common\drivers\include\Device_nand.h

        OMAP-L138\Common\drivers\src\Device_nand.c

         

        4.4  NOR flash

        NOR flash是标准设备,除了时序参数之外,一般不需要修改,NOR flash相关代码文件如下:

         

        OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\src\nor.c

        OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\include\nor.h

        OMAP-L138\Common\src\device_async_mem.c

        OMAP-L138\Common\include\device_async_mem.h

        OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\src\ async_mem.c

         

        4.5  时钟及 PLL

        如果外部输入时钟频率不是 24MHz,则需要 OMAP-L138\Common\src\device.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-L138\Common\src\device_uart.c中 DEVICE_UART_config的 UART时钟分频系数 divider的值,得到合适的 UART波特率。

         

        如果不是用 UART2做为调试串口,修改 OMAP-L138\Common\include\ device_uart.h文件中的DEVICE_UART_PERIPHNUM定义。

         

        5.   OMAP-L138_FlashAndBootUtils编译环境搭建

        在根据硬件改动,修改了代码后,需要对工具包重新编译,生成 UBL和 sfh_OMAP-L138.exe。如果在 Linux下使用此工具,需要在 Linux下进行编译(具体编译过程参考参考文献 4)。下面介绍如何在Windows环境下搭建OMAP-L138_FlashAndBootUtils的编译环境。

         

        编译环境需要的几个工具如下[6]:

         

        (1) cygwin

        (2) .NET framework

        (3) ARM Compiler tools(CodeSourcery G++ Lite)

        (4) C6x Compiler Tools

        (5) CCSV5

        5.1  Cygwin安装

        从 http:/ / www. cygwin. com/下载并运行在线安装工具setup.exe,注意安装路径中不能带有空格。具体步骤如下:

         

           
  •                 选择从互联网安装;也可以选择先下载,再从本地安装。
       

        9 cygwin安装界面 1

         

           
  •                 选择安装路径。
       

        10 cygwin安装界面 2

         

           
  •                 可选择直接连接或使用代理。
       

        11 cygwin安装界面 3

         

           
  •                 选择从哪个网址或者服务器上进行下载。
       

        12 cygwin安装界面 4

           
  •                 选择安装包
       

        13 cygwin安装界面 4

        一般选择以下三项,其他默认即可。

        &bull; Devel-->make: The GNU version of the &#39;make&#39; utility

        &bull; Devel-->subversion: A version control subsystem

        &bull; Editor-->vim (or similar)

        安装后要先运行一次 cygwin 后,才会在 cygwin/home/下出现 Administrator 目录,进入该目录,修改.bashrc。

        同时,需要验证变量TMP和 TEMP是否包含/tmp。使用如下命令:

        echo $TMP

        echo $TEMP

        如果找不到"unset TMP" and "unset TEMP",可在cygwin\home\[user]\.bashrc 文件中添加如下命令创建:

        export TMP=/tmp

        export TEMP=/tmp

        设置完后,重新打开cygwin即可。至此,cygwin安装完成。

         

        5.2  NET framework

        从下面网址下载安装最新的.NET Framework(4.0或者更高的版本)

        http:/ / www. microsoft. com/downloads/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&displaylang=en

         

        安装默认路径为 C盘。然后将 C#编译器路径添加到 windows系统环境变量中。进入目录

        C:\WINDOWS\Microsoft.NET\Framework查看软件的版本号并复制,如

        C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319。然后右键我的电脑->属性->高级->环境变量,如图 13所示,选择系统变量中的 path 点击编辑,在原有变量值后粘帖添加刚刚复制的内容,路径之间以’;’分隔。至此,Net Framework安装结束。

         

       

        14 windows环境变量设置

         

        5.3  C6x Compiler Tools

        在 CCSV5安装目录下 ccsv5\tools\compiler\c6000_7.3.4即为 C6x编译器目录,在 CCSV3.3下的路径为CCStudio_v3.3\C6000\cgtools\bin。如果没有安装 CCS,从下面网址下载 TI的 C6x 编译工具并安装,如不确认版本则下载最新版本。

         

        https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm

         

        将C6x编译器路径添加到windows环境变量。

         

        5.4  ARM Compiler tools(CodeSourcery G++ Lite)

        从下面网址下载安装 GCC交叉编译器。注意交叉编译工具的安装目录名不能含有空格,否则编译时会报错。

         

        https://sourcery.mentor.com/sgpp/lite/arm/portal/release858

         

        修改 OMAP-L138_FlashAndBootUtils_2_40\Common\build.mak文件中的 ARM_TOOLS_PATH变量为交叉编译器的安装路径。例如ARM_TOOLS_PATH?=C:\\CodeSourcery\\arm-2009q1-203\\

         

        5.5  CCSV5

        如果需要用 CCS编译工程,则安装 CCS。

         

        6. 编译 OMAP-L138_FlashAndBootUtils

         

        6.1查看环境变量

        打开 cygwin,输入 export,查看环境变量是否设置成功。显示如下,黑色加粗的目录为之前添加的环境变量。

         

       

       

         

        如未添加成功,可以使用如下命令添加:
        export PATH=<arm-compiler-root>/bin:<MS-.NET-Root>:<C6000-Compiler-Root>/bin:$PATH

         

        6.2 编译工具包

        cd OMAP-L138

        如果只是编译命令行工具(如 sfh_OMAP-L138),而不需要重新编译 CCS 工程,则进入 GNU目录进行编译;如果只需要重新编译 CCS工程,则进入 CCS目录进行编译;如果两者都需要,则在 OMAP-L138这个目录进行编译。编译命令如下:

         

        make clean

        make

         

        7. 使用serial flash utility常见问题及解决方法

         

        7.1收不到“BOOTME”

        在带电情况下,复位芯片,如果还是收不到正确的“BOOTME”,检查 BOOTMODE设置,串口终端波特率等参数设置,串口线连接方式。

         

        7.2 停在 Waiting for SFT on the OMAP-L138…

        如图 14 所示,这种情况的原因通常有两种:一是由于 DDR 参数配置不正确从而导致程序运行异常,不能返回正确的指令给主机;二是硬件原因,可能是焊接,或硬件连接上的错误造成的。可以通过仿真器连接目标板用 BSL库提供的测试程序验证一下 DDR,和相应的 flash。如果没有仿真器,可以通过间接的方法,比如用 AISgen 工具包里提供的 UART 启动工具 UartHost.exe 来加载运行测试程序,检测 DDR,flash 等,将测试结果通过串口回传显示,或者设置 GPIO的状态来反映。

         

       

        15 sfh_OMAP-L138.exe命令运行异常

         

        7.3 烧写中途停止

        如图 15所示,烧写在中途停止,这种情况通常是因为 DDR工作不稳定,原因可能是 DDR布线问题导致信号完整性差,可以尝试降低 DDR时钟,并用示波器测量信号质量。

         

        DDR不稳定也可能表现在能成功烧写,但运行不正常,通常表现为串口打印停在解压或启动内核阶段。

         

       

        16 sfh_OMAP-L138.exe命令运行异常信息

         

        7.4 启动后串口没打印

        烧写成功,启动后串口没打印,检查U-boot里的调试串口配置,默认为UART2。

         

        参考文献:

        (1) http://sourceforge.net/projects/dvflashutils/files/OMAP-L138/v2.40/

        (2) AISgen工具下载地址:http://www-s.ti.com/sc/techlit/sprab41.zip

        (3) http://www.ti.com/lit/an/spraba5b/spraba5b.pdf

        (4) http://processors.wiki.ti.com/index.php/Serial_Boot_and_Flash_Loading_Utility_for_OMAP-L138

        (5) http://processors.wiki.ti.com/images/d/db/MDDR_DDR2_Memory_Controller_Register_Calc_Rev4.zip

        (6) http://processors.wiki.ti.com/index.php/Rebuilding_the_Flash_and_Boot_Utils_Package
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-27 14:48 , 耗时 0.104297 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表