【eMMC协议】6.3.5 - 6.4.2

6.3.5 boot partition access

  1. 当EMMC 进入传输状态时,host发送CMD6 ---- PARTITION_ACCESS (ext_csd[179]),host能够使用一般的命令访问boot分区。
  2. host能够通过CMD24(WRITE_BLOCK)或者CMD25(WRITE_MULTIPLE_BLOCK)对boot数据进行修改, 如果host 使用CMD25 (write_multiple_block)写入数据,并且写入时越界,则EMMC将会报"ADDRESS_OUT_OF_RANGE" 越界错误 。
  3. 在EMMC 支持字节访问或者扇区访问模式时候,host 可以使用CMD17(READ_SINGLE_BLOCK)或者CMD18(READ_MULTIPLE_BLOCK)命令通过DAT线获取boot数据。当host使用CMD18 (READ_MULTIPLE_BLOCK) 命令时越界,也会报"ADDRESS_OUT_OF_RANGE"错误 。
  4. 当修改boot分区后,PARTITION_ACCESS bits应当清零,同时设置BOOT_PARTITION_ENABLE (EXT_CSD),表明booting的分区。(设置ext_csd register byte [179] 为0x111b配置 BOOT_PARTITION_ENABLE bit,来让设备从用户分区启动。
  5. host能够设置ext_csd register byte [179] 为0x000b来恢复对UDA分区的访问,撤销UDA作为启动盘,恢复默认访问。
  6. 如果在boot 模式下,UDA被锁住且UDA作为boot分区的话,boot数据是不会发送到host中的。然而当UDA被锁住,且两个boot分区中有一个被当作boot分区的话,boot数据将会发送到host端 。

6.3.6 Boot bus width and data access configuration

  1. 通过设置EXT_CSD[177] bit[0:1],能够配置boot启动时的bus width。
  2. EXT_CSD[177] bit2 能够决定device启动后是否恢复具有向后兼容的SDR x1传输宽度模式(置0),或者保持配置的bus width(置1)。
  3. EXT_CSD[177] bit[3:4]


4. 如果boot操作不成功,则恢复默认模式,寄存器设置将无效。

6.3.7 Boot Partition Write Protection

  1. 为了保护boot分区的数据,eMMC应该支持两种写保护状态, Permanent write protection 和 power-on write protection。
  2. 通过设置EXT_CSD[173],决定boot区域。

    bit位:
    在这里插入图片描述
  3. 对于EXT_CSD[173],除了bit4和bit2,即B_PERM_WP_DIS 和B_PERM_WP_EN,其余在一个power cycle中应该只写一次。
  4. 对于B_PERM_WP_DIS 和B_PERM_WP_EN两个bit为一次写入,即写入后将不可更改,因此设置时应该恰当写入。
  5. 如果设置了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
  1. 当收到带有参数为0x00000000的CMD0(GO_IDLE_STATE)后,EMMC将会进入idle状态。以下情况下EMMC将会进入idle 状态 :
  • boot操作完
  • 在pre-boot的状态下,CMD拉低电平持续74 clock
  • power-up后没有boot成功
  1. 在idle状态下,eMMC的输出处于高阻态,同时初始化为一个默认的RCA(0x0001)
  2. CMD0(0x00000000)在除了 Inactive的状态外,均生效,均能转为Idle状态
  3. 为了向后兼容,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)
  1. CMD1的电压范围是无效的。
  2. eMMC busy状态时,对于CMD1的response固定模式,0x00FF8080(<=2GB),0x40FF8080(>2GB),并且不会进入Inactive状态。
  3. CMD1和OCR寄存器有两个bit表明内存模式, CMD1命令的bit位可以让host 进行扇区格式读写数据 。 对应的, 在作为回应的OCR寄存器中有对应的bit 用来设定要使用的扇区类型。
  4. 在eMMC处于Ready状态时,OCR寄存器只有最后一次回应CMD1的指令才有效。
    在这里插入图片描述
  5. 如果host没有向EMMC说明其能够处理的扇区类型,则对高于2GB容量的EMMC进行寻址会将其状态更改为Inactive 。同时,host发送0x00000000时,并且电压为无效范围,eMMC也将进入Inactive状态(但是,当电压范围有效时,将不会进入Inactive状态)
  6. 当OCR设置好了bit位,host便可以将字节访问改为扇区访问,之后便可以进行扇区访问了
  7. eMMC busy状态时,对于CMD1的response固定模式,0x00FF8080(<=2GB),0x40FF8080(>2GB),并且不会进入Inactive状态。此时host会忽略接收的bit。如果时ready状态,则返回0x80FF8080(<=2GB),0xC0FF8080(>2GB),并且不会进入Inactive状态
  8. 如果host需要转换电压范围,需要重新上下电。当电压为1.95-2.7时,双电压的eMMC可能会故障。重新上电后,host应该从EXT_CSD中读取SEC_COUNT来确认寻址模式
6.4.3 From busy to ready
  1. CMD1中有busy bit,用来回应host自身状态。此时,host会重复发送CMD1直到busy bit清零
  2. 在初始化过程中,不允许host 对eMMC的工作电压和寻址访问模式做任何更改。eMMC收到设置发生改变的消息时自身也会忽略掉。如果需要改变状态,则host需要使用CMD0 (0x00000000)来复位EMMC重新执行初始化操作
  3. 当EMMC处于Inactive状态,必须通过上下电来进行硬重置
  4. 当host需要停用设备时,会使用CMD15(GO_INACTIVE_STATE)将eMMC切换到Inactive状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blank_time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值