Boot EMMC¶
- Table of contents
- Boot EMMC
NOTE: The AM62x has multiple MMC interfaces. The EMMC is configured on MMC1
To boot the Dev Kit from EMMC using a CL supplied image, set the boot pins as follows:
Reference: TRM Section 5.3 "Boot Mode Pins"
B9 | B8 | B7 | B6 | B5 | B4 | B3 |
Reserved (X) | Reserved (X) | Reserved (X) | 1 | 0 | 0 | 1 |
Based on the TI wiki procedure ( https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_03_00_19/exports/docs/linux/Foundational_Components/U-Boot/UG-Memory.html )
EMMC Layout¶
boot0 partition (4 MB) user partition 0x0+----------------------------------+ 0x0+-------------------------+ | tiboot3.bin (512 KB) | | | 0x8000+----------------------------------+ | | | tispl.bin (2 MB) | | | 0x280000+----------------------------------+ | rootfs | | u-boot.img (1.412 MB) | | | 0x3E1000+----------------------------------+ | | | environment (124 KB) | | | 0x400000+----------------------------------+ +-------------------------+
Steps¶
- Optional: Run through Clearing_the_eMMC if you want to test flashing a clean eMMC
- Boot to linux using a valid sd card image
- Make the partition label
root@mitysom-am62x:~# parted /dev/mmcblk0 mklabel gpt
- Make the partiton
root@mitysom-am62x:~# parted /dev/mmcblk0 mkpart primary ext4 0% 100%
- Print the newly created partition
root@mitysom-am62x:~# parted /dev/mmcblk0 print Model: MMC KC3032 (sd/mmc) Disk /dev/mmcblk0: 31.3GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 31.3GB 31.3GB primary
- Manually mount the partition or Reboot
root@mitysom-am62x:~# mkfs.ext4 /dev/mmcblk0p1 root@mitysom-am62x:~# mkdir /run/media/mmcblk0p1 root@mitysom-am62x:~# mount /dev/mmcblk0p1 /run/media/mmcblk0p1 or root@mitysom-am62x:~# reboot
- Check the partition table
*root@mitysom-am62x:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk0 179:0 0 58.3G 0 disk `-mmcblk0p1 179:1 0 58.3G 0 part /run/media/mmcblk0p1 mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk mmcblk1 179:96 0 29.8G 0 disk |-mmcblk1p1 179:97 0 128M 0 part /run/media/boot-mmcblk1p1 `-mmcblk1p2 179:98 0 29.7G 0 part /*
- enable writing to the mmcblk0boot0 partition
root@mitysom-am62x:~# echo 0 > /sys/block/mmcblk0boot0/force_ro
- Copy the needed images from the SD card to the eMMC boot partition
root@mitysom-am62x:~# cd /run/media/boot-mmcblk1p1 root@mitysom-am62x:~# dd if=tiboot3.bin of=/dev/mmcblk0boot0 bs=512 seek=0 root@mitysom-am62x:~# dd if=tispl.bin of=/dev/mmcblk0boot0 bs=512 seek=1024 root@mitysom-am62x:~# dd if=u-boot.img of=/dev/mmcblk0boot0 bs=512 seek=5120
- Enable the boot partition of the eMMC device
root@mitysom-am62x:~# mmc bootpart enable 1 1 /dev/mmcblk0 root@mitysom-am62x:~# mmc bootbus set single_backward x1 x8 /dev/mmcblk0
- Copy the filesystem
Note: Copying the tisdk-default image takes about 3 minutesroot@mitysom-am62x:~# mkdir -p /mnt/sd-rootfs root@mitysom-am62x:~# mount /dev/mmcblk1p2 /mnt/sd-rootfs root@mitysom-am62x:~# cp -a /mnt/sd-rootfs/* /run/media/mmcblk0p1
Note We do not recommend copying a live/booted filesystem as a way of imaging/copying a system. As written this provides an easy way to show the emmc works but it should be rewritten to program the emmc using outputs from yocto.
- Power off the board
root@mitysom-am62x:~# poweroff
- Set the boot mode to boot from the eMMC and remove the SD card
SW1 BM7-0 = x1001xxx
SW2 BM15-8 = 000000xx
- Toggle S1 to power on the board, and you should successfully boot to the login prompt.
- Check to make sure we have booted from eMMC
root@mitysom-am62x:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk0 179:0 0 58.3G 0 disk `-mmcblk0p1 179:1 0 58.3G 0 part / <----- */ should be on eMMC partition* mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk
- To test if eMMC fallback is functional, Toggle S1 to turn off the board, insert the SD card, power on and you should boot to linux.
- Run the following command
root@mitysom-am62x:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk0 179:0 0 58.3G 0 disk `-mmcblk0p1 179:1 0 58.3G 0 part /run/media/mmcblk0p1 mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk mmcblk1 179:96 0 29.8G 0 disk |-mmcblk1p1 179:97 0 128M 0 part /run/media/boot-mmcblk1p1 `-mmcblk1p2 179:98 0 29.7G 0 part / <----- */ should be on MMC partition*
For regular development and potentially production programming, the eMMC can be programmed over USB. See Snagboot Boot and Flash eMMC Instructions
Hardware Reset setting¶
NOTE: We enable hw reset in our factory test environment, setting this yourself should not be necessary.
The eMMC part ships with hardware reset disabled. This caused reset/reboot to hang when booting from the eMMC.
To fix this, the HW reset needs to be enabled in the part. This is done by writing a 1 to the RST_N_FUNCTION CSD register in the part.
THIS IS A ONE-TIME-PROGRAMMABLE VALUE
If you write a 2 to this register, you will permanently DISABLE reset and effectively prevent using the eMMC as a boot device.
From linux¶
root@mitysom-am62x:~# mmc hwreset enable /dev/mmcblk0
The state of this register can be checked using the extcsd read command
root@mitysom-am62x:~# mmc extcsd read /dev/mmcblk0 | grep RST H/W reset function [RST_N_FUNCTION]: 0x01
From U-Boot¶
mmc rst-function 0 1
Enabling boot partitions from u-boot¶
In addition, the emmc boot partitions can also be enabled from u-boot
mmc partconf 0 1 1 1 mmc bootbus 0 2 0 0
Go to top