BeagleBone Black eMMC 烧写全记录(基于 AM335x SDK06)
eMMC 存储介质目前越来越广泛的应用在嵌入式系统中,AM335x 的用户也越来越多
的使用 EMMC 作为系统的主要存储介质。目前 AM335x 的几款官方 demo 板中,只有
BeagleBone Black 上加入了对 eMMC 芯片的支持,很多用户也是参考 BeagleBone Black 进
行自己 AM335x 系统的 eMMC 设计。笔者最近分别通过 TI Uniflash 和 SD 卡完成了
BeagleBone Black 上 eMMC 芯片的烧写验证工作,软件基于 AM335x Linux SDK06,总结出
来供大家参考。
1. 使用 TI UniFlash 工具通过 USB RNDIS 烧写
1.1 TI Uniflash 简介
Uniflash 是 TI 开发的存储器烧写工具,可以支持 AM335x 系统的 NAND Flash,NOR
Flash, SPI Flash,eMMC 烧写。可以参考 wiki 上的 guide:
http://processors.wiki.ti.com/index.php/Sitara_Uniflash_Quick_Start_Guide,在 Windows 宿
主机上下载并安装 Uniflash,并按照其中 3.3 节所述在 Windows 宿主机上安装 USB RNDIS
驱动。
1.2 eMMC 烧写原理
本文介绍的验证方法是使用 Uniflash 工具通过 USB 对 BeagleBone Black 上的 eMMC 进
行烧写,原理是通过 Romcode,SPL 和 u-boot 三个阶段,将一个专门用于 eMMC 烧写的
Linux 操作系统在 BeagleBone Black 板上运行起来,并自动运行脚本进行烧写。
第一阶段,通过设置 AM335x 的 sysboot 管脚,使 AM335x 的启动项包含 USB0 启动。
BeagleBone Black 的默认启动设置为:MMC1->MMC0->UART0->USB0,MMC1 和 MMC0 分
别连接了 eMMC 和 SD 卡,如果 eMMC 为空,并且不插 SD 卡,芯片上电后执行的
Romcode 就会执行 USB 启动。Romcode 会初始化 USB RNDIS 以太网络通信协议,通过
Windows 宿主机上 Uniflash 自带的 DHCP 服务器进程拿到分配的 IP 地址,然后再通过
Windows 宿主机上 Uniflash 自带的 TFTP 服务器进程将 Uniflash 设定的 tftp 目录下用于
eMMC 烧写的特殊的 SPL 下载到 AM335x 的内部 ram 中并运行。
第二阶段,用于 eMMC 烧写的特殊的 SPL 执行之后,会初始化 USB RNDIS 以太网络通
信协议,并通过 Windows 宿主机上 Uniflash 自带的 DHCP 服务器程序拿到分配的 IP 地址,
然后再通过宿主机上 Uniflash 自带的 TFTP 服务器程序将 Uniflash 设定的 tftp 目录下用于
eMMC 烧写的特殊的 U-boot.img 下载到板子上的 DDR3 中并运行。
第三阶段,用于 eMMC 烧写的特殊的 U-boot.img 执行之后,通过执行 u-boot 中的
DHCP 和 TFTP 命令,将 Windows 宿主机上 Uniflash 设定的 tftp 目录下的用于烧录 eMMC
的 Linux uImage 下载到板子的 DDR3 中并运行。这个 Linux uImage 会通过执行启动脚本,