6.3.5 boot partition access
- 当EMMC 进入传输状态时,host发送CMD6 ---- PARTITION_ACCESS (ext_csd[179]),host能够使用一般的命令访问boot分区。
- host能够通过CMD24(WRITE_BLOCK)或者CMD25(WRITE_MULTIPLE_BLOCK)对boot数据进行修改, 如果host 使用CMD25 (write_multiple_block)写入数据,并且写入时越界,则EMMC将会报"ADDRESS_OUT_OF_RANGE" 越界错误 。
- 在EMMC 支持字节访问或者扇区访问模式时候,host 可以使用CMD17(READ_SINGLE_BLOCK)或者CMD18(READ_MULTIPLE_BLOCK)命令通过DAT线获取boot数据。当host使用CMD18 (READ_MULTIPLE_BLOCK) 命令时越界,也会报"ADDRESS_OUT_OF_RANGE"错误 。
- 当修改boot分区后,PARTITION_ACCESS bits应当清零,同时设置BOOT_PARTITION_ENABLE (EXT_CSD),表明booting的分区。(设置ext_csd register byte [179] 为0x111b配置 BOOT_PARTITION_ENABLE bit,来让设备从用户分区启动。)
- host能够设置ext_csd register byte [179] 为0x000b来恢复对UDA分区的访问,撤销UDA作为启动盘,恢复默认访问。
- 如果在boot 模式下,UDA被锁住且UDA作为boot分区的话,boot数据是不会发送到host中的。然而当UDA被锁住,且两个boot分区中有一个被当作boot分区的话,boot数据将会发送到host端 。
6.3.6 Boot bus width and data access configuration
- 通过设置EXT_CSD[177] bit[0:1],能够配置boot启动时的bus width。
- EXT_CSD[177] bit2 能够决定device启动后是否恢复具有向后兼容的SDR x1传输宽度模式(置0),或者保持配置的bus width(置1)。
- EXT_CSD[177] bit[3:4]
4. 如果boot操作不成功,则恢复默认模式,寄存器设置将无效。
6.3.7 Boot Partition Write Protection
- 为了保护boot分区的数据,eMMC应该支持两种写保护状态, Permanent write protection 和 power-on write protection。
- 通过设置EXT_CSD[173],决定boot区域。
bit位:
- 对于EXT_CSD[173],除了bit4和bit2,即B_PERM_WP_DIS 和B_PERM_WP_EN,其余在一个power cycle中应该只写一次。
- 对于B_PERM_WP_DIS 和B_PERM_WP_EN两个bit为一次写入,即写入后将不可更改,因此设置时应该恰当写入。
- 如果设置了B_PERM_WP_EN 只启用一个boot分区,那么应该确保bit7 和bit3设置正确,避免干扰了另一个boot区。host能够关闭boot区域的这两种写保护状态,如果boot写保护并不需要,则应该关闭,避免错误的写保护。
6.4 Device identification mode
在该模式下,host可以对EMMC 进行reset,验证操作电压范围和设置访问模式,识别EMMC并在总线上为EMMC分配相对设备地址(RCA)。所有操作都通过CMD命令进行交互。
6.4.1 Device reset
- 当收到带有参数为0x00000000的CMD0(GO_IDLE_STATE)后,EMMC将会进入idle状态。以下情况下EMMC将会进入idle 状态 :
- boot操作完
- 在pre-boot的状态下,CMD拉低电平持续74 clock
- power-up后没有boot成功
- 在idle状态下,eMMC的输出处于高阻态,同时初始化为一个默认的RCA(0x0001)
- CMD0(0x00000000)在除了 Inactive的状态外,均生效,均能转为Idle状态
- 为了向后兼容,eMMC在非Inactive状态,接受到CMD0命令,如果不为0xFFFFFFFA或者0xF0F0F0F0,eMMC都将其当作复位命令,然后切换成IDLE状态。带0xFFFFFFFA参数的CMD0在Pre-boot阶段是boot的初始化命令,但是如果host在eMMC非Inactive和Pre-boot状态发出时,eMMC都会复位成Idle状态。
6.4.2 Access mode validation(higher than 2GB)
- CMD1的电压范围是无效的。
- eMMC busy状态时,对于CMD1的response固定模式,0x00FF8080(<=2GB),0x40FF8080(>2GB),并且不会进入Inactive状态。
- CMD1和OCR寄存器有两个bit表明内存模式, CMD1命令的bit位可以让host 进行扇区格式读写数据 。 对应的, 在作为回应的OCR寄存器中有对应的bit 用来设定要使用的扇区类型。
- 在eMMC处于Ready状态时,OCR寄存器只有最后一次回应CMD1的指令才有效。
- 如果host没有向EMMC说明其能够处理的扇区类型,则对高于2GB容量的EMMC进行寻址会将其状态更改为Inactive 。同时,host发送0x00000000时,并且电压为无效范围,eMMC也将进入Inactive状态(但是,当电压范围有效时,将不会进入Inactive状态)
- 当OCR设置好了bit位,host便可以将字节访问改为扇区访问,之后便可以进行扇区访问了
- eMMC busy状态时,对于CMD1的response固定模式,0x00FF8080(<=2GB),0x40FF8080(>2GB),并且不会进入Inactive状态。此时host会忽略接收的bit。如果时ready状态,则返回0x80FF8080(<=2GB),0xC0FF8080(>2GB),并且不会进入Inactive状态
- 如果host需要转换电压范围,需要重新上下电。当电压为1.95-2.7时,双电压的eMMC可能会故障。重新上电后,host应该从EXT_CSD中读取SEC_COUNT来确认寻址模式
6.4.3 From busy to ready
- CMD1中有busy bit,用来回应host自身状态。此时,host会重复发送CMD1直到busy bit清零
- 在初始化过程中,不允许host 对eMMC的工作电压和寻址访问模式做任何更改。eMMC收到设置发生改变的消息时自身也会忽略掉。如果需要改变状态,则host需要使用CMD0 (0x00000000)来复位EMMC重新执行初始化操作
- 当EMMC处于Inactive状态,必须通过上下电来进行硬重置
- 当host需要停用设备时,会使用CMD15(GO_INACTIVE_STATE)将eMMC切换到Inactive状态。