OMAP-L138_FlashAndBootUtils使用及编译指导

摘要
本文介绍omap-l138_flashandbootutils工具包基本框架和串口烧写工具sfh_omap-l138.exe工作原理,使用方法,以及针对客户的硬件如何修改代码,搭建编译环境并重新编译,并总结了使用该工具的常见问题。
简介
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启动为例,准备如下文件:
l l sfh_omapl138.exe,来源于 omap-l138_flashandbootutils_2_40工具包。
l l ubl-spi_ais.bin,来源于 omap-l138_flashandbootutils_2_40工具包。
l l u-boot.bin,来源于 sdk psp目录下的 uboot。
l l 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 –targettype omap-l138 –flashtype spi_mem –erase
图 2 sfh_omapl138.exe –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运行的。
图 5 从 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的偏移地址。
图 6 sfh_omapl138.exe –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,注意安装路径中不能带有空格。具体步骤如下:
1) 选择从互联网安装;也可以选择先下载,再从本地安装。
图 9 cygwin安装界面 1
2) 选择安装路径。
图 10 cygwin安装界面 2
3) 可选择直接连接或使用代理。
图 11 cygwin安装界面 3
4) 选择从哪个网址或者服务器上进行下载。
图 12 cygwin安装界面 4
5) 选择安装包
图 13 cygwin安装界面 4
一般选择以下三项,其他默认即可。
• devel--》make: the gnu version of the ‘make’ utility
• devel--》subversion: a version control subsystem
• 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

实测iOS 11.3:说好的降频开关长啥样
数字电源带来的设计变革参考
跨阻放大器的结构特性与应用分析
LLC的工作原理 LLC基波简化分析法
中国智能仪表物联网行业前景预测及智能仪表发展前景广阔
OMAP-L138_FlashAndBootUtils使用及编译指导
数字化“武装”起来的“智慧工地”—扬尘监控系统
大功率直流开关电源的组成及其作用的详解
AI星海中的“中国空间站”:昇腾如何助力鹏城云脑Ⅱ实现全球领航
日本OLED电视出货量同比增长190% OLED电视大热但LGD却左右为难
ADI推出通用输入/输出端口扩展器和键盘矩阵控制器ADP5585和ADP5589
预计2025年全球柴油机行业市场规模将达到3060亿美元左右
深圳LED产业极具集群优势,成为四大LED产业集群的领导者
看脸的时代来了,人脸识别系统,有效解决了“二房东”困扰
电能质量在线监测装置特点_电能质量在线监测装置用途
美国总统特朗普正在向加拿大政府施压要求禁止华为5G技术
媒体转化介绍
比Xbox天蝎座更牛逼!微软自曝正在研制下一代游戏机
MODBUS转PROFINET网关接变频器入PROFINET
Linux系统中动态链接器的核心工作