SSD_EMMC使用参考


1. Overview

SSD22x/SSD21X系列不支持EMMC启动,替代的方案是使用nor/nand+emmc的方式,本文档主要介绍此方案下的使用方法,包含软件配置更改以及烧录方法。


2. 软件配置更改

2.1. Project下的config更改

  1. 需要更改: CONFIG_IMAGE_CONFIG="emmc.ext4fs.partition.config"

  2. nor+emmc的话,需要添加 CONFIG_ONEBIN_BOOT_FLASH_TYPE="nor"

    spinand+emmc的话,需要添加 CONFIG_ONEBIN_BOOT_FLASH_TYPE="spinand"

    参考示例:


2.2. Uboot 下的config更改

需更改如下配置,注意编译完成后替换project\board\p3\boot\emmc\uboot下的uboot

#Device Drivers -->

# [*]Mstar drivers -->

#  [*]MSTAR emmc

#  [*]Support eMMC BOOT

#  [ ]Save environment to eMMC (选择emmc为环境变量存储介质,该项与Save environment to ISP NOR FLASH、Save environment to NAND FLASH互斥,这三者只能选一个)

#  [ ]MSTAR sdmmc(不要选中)

参考示例:


2.3. Kernel下的config更改

需更改如下配置:

#Enable the block layer -->

# [*]Support for large (2TB+) block devices and files

# [*]Partition Types

#  [*]EMMC PARTITION table support

#Device Drivers -->

# [*]MMC/SD/SDIO card support -->

#  <*>HW reset support for eMMC

#  <*>Simple HW reset support for MMC

#  <*>MMC block device driver

# [*]SStar SoC platform drivers -->

#  <*>EMMC driver

#  [*]UNIFY EMMC DRIVER

#  [*]SELECT M6 EMMC0 (M6支持,选中代表使用emmc0)

#  < >SStar SD/MMC Card Interface Support (不要选中)

#File systems -->

# <*>The Extended 4 (ext4) filesystem(子选项保持默认)

参考示例:


3. 烧录方法

3.1. 在UBOOT下使用estar自动烧录

  1. 进入uboot命令行。

  2. 确认已经设置好了tftp软件路径和ip, 设置好了开发板的ip。

  3. 在uboot命令行下键入estar,等待烧录完成。 烧录完成后,重启进入uboot,发现能使用emmc命令,在kernel下能识别和读写emmc分区,说明烧录成功。

限制条件: 需要有ethernet网络支持


3.2. USB空片烧录

请参考SSD_USB Device升级(onebin)

限制条件:

  1. 需要有PC

  2. 需要有USB接口(因为只有一路USB,所以此方式不能和USB wifi共存)


3.3. 使用烧录器空片烧录

Nor/nand的部分,可以使用ISPTOOL烧录,或者参考SigmaStarDocs -> 开发 -> BSP开发参考 -> SPI NOR/Spinand母片制作。

EMMC的部分,参考如下方式

母片镜像制作:

使用emmcnize工具制作母片镜像,该工具为PC端工具,用于把kernel、rootfs、文件系统、用户数据、环境变量等镜像合并成一个可以直接通过烧录器烧录到空片的镜像。

emmcnize

3.3.1. 环境变量镜像

把需要设置的环境变量按照uboot printenv命令打印出来的格式写入到一个txt文件,例如:

#env.txt

baudrate=115200

bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw init=/linuxrc cma=64M

bootcmd=emmc read.p 0x21000000 kernela 0x1C61E8;bootm 0x21000000;

bootdelay=0

ethact=sstar_emac

ethaddr=00:30:1b:ba:02:db

fileaddr=23b2ef00

filesize=101

stderr=serial

stdin=serial

stdout=serial

uboot编译后在tool目录下有一个mkenvimage工具,执行./mkenvimage -s 0x1000 -o env.bin env.txt生成环境变量镜像。


3.3.2. 制作分区配置文件

emmcnize工具通过读取part.ini配置文件来建立分区表和打包镜像。配置文件格式参考如下:

[kernela-volume]

image=kernel

vol_id=1

vol_size=0x300000

vol_name=kernel

image=XX,定义分区镜像名,必须与已有镜像名相同。

vol_id=X,定义分区id,目前用于标识而已。

vol_size=XX,定义分区大小(Bytes单位),必须不小于对应镜像大小。

vol_name=XX,定义分区名,uboot下通过emmc part看到的分区名。

[XXX-volume] section是真正的用户分区,它们的image、vol_size、vol_name都可以根据实际分区情况进行更改。vol_id从1开始编号,最大支持64个分区。

参考示例:

part.ini

说明:

part.ini文件中env的size比实际env.bin的size大,这是因为母片工具制作母片时会从env的起始地址0x278开始补充镜像文件,直至补充完当前分区的size,如果按照env.bin的实际size烧录,0x278*512+0x1000=327680 byte=640 blk就会是用户分区数据开始存储的地方,这与我们uboot下读取用户数据的实际起始地址不同,uboot下读取相应数据的地址如下图:

如上图,用户分区数据起始地址是615200,为了保证uboot下可以正确读到相应的数据,所以part.ini中env的size需要设置为 615200-0x278=614568 blk=0x12C15000 byte。


3.3.3. 打包母片镜像

把需要打包的镜像(env.bin、kernel、rootfs.ext4、data.ext4等)及分区配置文件(part.ini)与emmcnize工具放在同一个目录下,指定配置文件作为输入,指定输出文件,格式:./emmcnize <input ini file> <output image file>,例如:

./emmcnize part.ini image.bin

正常情况下,完成操作会打印如下所述的“done”信息。

parsing section "data-volume"

volume id: 4

volume size: 67108864 bytes

volume name: data

write to volume4 from image file customer.ext4

Done