AM335X的启动方案有两种,一种是NAND FLASH启动,这种启动方式可以很方便进行固件的更新,一般在u-boot下就可以快速更新。
另外一种启动方式是EMMC,比如我们大家都非常熟悉的beaglebone主板,它就是EMMC启动的。因为EMMC的特殊性,并没有办法
像NAND那样在u-boot下更新,因此盈鹏飞嵌入式为了方便用户,特别提出了如下解决方案--使用USB盘快速更新EMMC固件;
以下解决方案是在盈鹏飞嵌入式HMI-T335主板上演示通过。HMI-T335主板是一款针对于人机界面方向的主板。
它分为两个部分,一部分是用户的工程底板,一部分是核心模块CoM-T335核心模块(以TI AM335X为核心)。
以下是他们的简要介绍:
CoM-T335简要介绍:
CoM-T335 v1.1亮点:
Cortex-A8邮票孔AM335X核心模块,精设计,低成本,可信赖
◆ 高速Cortex-A8核心,最高运行1GHZ;
◆ 单颗256M/512M字节DDR3 SDRAM,成本更低廉;
◆ 大容量板载电子盘,更多用户空间;
◆ 精致邮票孔设计,超小尺寸40mm*40mm,批量使用成本更低;
◆ 1路10M/100M/1000M以太网;
◆ 核心板独立RTC, 走时精准;
◆ 最优秀的显示性能,分辨率高达1366*768;
◆ CPU内置6路RS232串口(其中1路232为COM_DBU);
◆ 外部扩展3*IIC,2*SPI接口;
◆ CPU内置双路CAN BUS,适合于现场工业控制;
◆ 支持SD卡接口,大容量存储;
◆ 高速USB 2.0 OTG接口;
◆引出JTAG接口(V1.1版本硬件,4线电阻触摸屏),便于裸机系统调试。
◆EMMC启动版本兼容BeagleboneBlack。
◆ 专业WINCE 7.0、LINUX 4.4、ANDROID操作系统支持,
◆支持SD卡初始化系统,可USB盘升级系统;
◆ 核心板高集成度,可以直接应用,可根据客户定制主板;
AM335x框图
CoM-T335v1.1实物图
HMI-T335简要介绍:
HMI-T335是基于AM335x(CoM-T335v1.1)核心模块的人机界面(可定制宽温)工控主板,稳定运行Wince7.0或Linux4.4系统。支持4串口(3路RS232、1路RS422或RS485)、CAN总线、电容屏多点触摸、WIFI、JTAG、百兆以太网等。可以广泛用于控制现场、医疗仪器、数控机床、环境保护监测等领域。
CoM-T335v1.1工控模块产品集成了 ARM Cortex-A8 1GHz(MAX) TI AM335X 处理器,稳定运行Wince 7.0 和Linux 4.4。 CoM-T335v1.1提供了3.3V I/O接口,可定制宽温的工业组件,运行于条件恶劣的工业现场!
产品参数:
前言
AM335x支持多种启动模式,针对不同的应用场景,需要的启动设备不同。本手册主要介绍从eMMC启动u-boot,读取U盘中镜像并更新。
1 USB更新原理简述
本章简单介绍HMI-T335启动原理及目前所支持的启动媒质。
1.1启动原理
AM335x 复位后执行片内ROM code,ROM code 加载u-boot到片内执行,u-boot初始化外部RAM,网络等设备,为引导linux内核做准备。由于AM335x片内的RAM大小有限(109KB),不能完全加在u-boot镜像,所以u-boot分成两级引导——SPL(MLO)与u-boot。ROM code 启动流程如图1-1所示:
注:截图来源《AM335x and AMIC110 Sitara Processors Technical Reference Manual (Rev.Q)》。
1.2启动媒质
AM335x支持多种启动媒质,包括:NAND,MMC/SD card,SPI,UART,EMAC,USB,其中USB是本手册关注的重点。据AM335x的技术参考手册,ROM code所支持的USB协议是RNDIS并非USB mass storage,USB设备模拟成网络接口,所以ROM code不能直接运行U盘的启动镜像——即不能从U盘引导SPL与u-boot镜像。USB 初始化流程如图1-2所示:
注:截图来源《AM335x and AMIC110 Sitara Processors Technical Reference Manual (Rev.Q)》。
2 软件原理
HMI-T335 烧写u-boot后,可实现从U盘读取镜像文件(目前,不包括u-boot本身)到RAM,继而写如NAND或eMMC。在u-boot板级文件中支持USB驱动,以及设置自动执行的指令。
u-boot USB驱动代码 (u-boot-2018.01/include/configs/hmi-t335.h)
#define CONFIG_USB_MUSB_DSPS
#define CONFIG_USB_MUSB_PIO_ONLY
#define CONFIG_USB_MUSB_DISABLE_BULK_COMBINE_SPLIT
/*
#define CONFIG_AM335X_USB0
#define CONFIG_AM335X_USB0_MODE MUSB_PERIPHERAL
*/
#define CONFIG_AM335X_USB1
#define CONFIG_AM335X_USB1_MODE MUSB_HOST
#ifdef CONFIG_SPL_BUILD
#undef CONFIG_DM_MMC
#undef CONFIG_TIMER
#undef CONFIG_DM_USB
自动执行的指令 (u-boot-2018.01/board/embfly/hmi-t335/board.c)
run_command("usb reset", 0);
ret = usb_stor_nums();
if(ret <= 0) return;
#if defined(CONFIG_NAND__BOOT)
ret = run_command("fatload usb 0:1 0x82000000 /embfly-hmi-t335/rootfs.ubi", 0);
if(!ret){
run_command("nand erase.part rootfs", 0);
run_command("nand write 0x82000000 rootfs ${filesize}", 0);
}
ret = run_command("fatload usb 0:1 0x82000000 /embfly-hmi-t335/zImage", 0);
if(!ret){
run_command("nand erase.part rootfs", 0);
run_command("nand write 0x82000000 kernel", 0);
}
ret = run_command("fatload usb 0:1 0x82000000 /embfly-hmi-t335/hmi-t335.dtb", 0);
if(!ret){
run_command("nand erase.part dtb", 0);
run_command("nand write 0x82000000 dtb ${filesize}", 0);
}
ret = run_command("fatload usb 0:1 0x82000000 /embfly-hmi-t335/logo.bmp", 0);
if(!ret){
run_command("nand erase.part logo", 0);
run_command("nand write 0x82000000 logo ${filesize}", 0);
}
自动执行的指令可以更新NAND或eMMC,在u-boot初始化板级代码时执行符合条件的指令。当存储媒质为NAND,定义CONFIG_NAND__BOOT宏,则会更新NAND镜像;当存储媒质为eMMC,定义 CONFIG_EMMC_BOOT宏,则会更新eMMC镜像。
要更新的文件在buildroot编译完成后生成,路径为:buildroot-2018.02.12/output/images/。需要注意的是,eMMC更新根文件系统时需同时更新MBR。
3 裸板初始化
①、emmc烧录系统流程,如下图所示:
②、如何制作一张可启动的TF卡呢?根据am335x的启动原理和u-boot烧写原理(烧写时,必须通过 fatload指令加载相关文件到内存才能进行烧写,该fatload指令只能加载根目录下文件,所以只能将tf卡分成一个区并做成根目录),我们首先要取一个空的tf卡,并将该tf卡格式化成fat16或者fat32的格式(不支持其他格式)。作好后,将需要烧写的文件(mlo、zImage、logo.bmp、hmi-t335.dtb、MBR、rootfs.ext4.gz,这几个文件名已经在u-boot代码中确认,不能变更其他名字)拷贝到tf卡上。到此为止做出来的卡插到HMI-T335评估板上还不能启动,我们必须激活这个主分区才能正常启动(请查看附录1_windows下和ubuntu下制作启动sd卡)。
以下是具体的操作步骤:
①、TF卡初始化:在ununtu主机或者windows主机上将TF卡进行分区,只分一个区即可,然后将该分区格式化成fat32格式,做成可启动的分区(windows下使用DISKPART指令;在linux下使用fdisk指令)。(详情请查看附录1_windows下和ubuntu下制作启动sd卡)。
②拷贝启动文件:在windows的主机上运行光盘资料\tools目录下的TI_SDCard_boot_Utility_v1_0.exe文件,该工具可以把相关启动文件一次性拷贝到TF卡上。
③、在"Select SD card drive"处选择正确的盘符,并把对应的文件都选择好,点击"Proceed"在弹出格式化磁盘的窗口“文件系统”栏选择FAT32格式,点击“开始”进行格式化,格式化完毕后,会将所有烧写的文件拷贝到卡上,关闭格式化窗口。
④、ubuntu linux下的也可以实现tf卡的制作,只需要以上几个文件直接拷贝到tf卡即可。在linux主机上拷贝完文件后,要确认文件是正确的,否则会出现无法引导。
⑤、准备HMI-T335主板一套,并保证基本系统可正常工作,DC12V电源适配器1个。
使用配套的RS232串口线连接HMI-T335调试串口CN12(AM335X的UART0),并在主机电脑中确认RS232串口的端口号。端口号确认后可在超级终端中进行设置。打开电脑超级终端,其设置如下图所示:
把拷贝烧写文件的TF卡插入TF卡座,上电烧写文件超级终端显示信息如下:
4更新示例
以HMI-T335 eMMC存储媒质的主板为例,介绍如何更新linux 系统镜像。步骤如下:
1,准备USB 2.0 U 盘;
2,U盘文件系统为FAT32,若不是请将其格式化;
3,在U盘根目录新建 “/embfly-hmi-t335/目录,将buildroot-2018.02.12/output/images/目录中镜像保存到/embfly-hmi-t335/目录;
全部更新:
host# cp MBR rootfs.ext4.gz zImage hmi-t335.dtb 如图3-1所示:
4,上电启动HMI-T335,u-boot初始化外设并从U盘读取镜像烧写到eMMC。如图3-2所示: