EMMC5.1协议讲解(附件)

附件A(信息)申请说明

A.1设备有效负载块长度和ECC类型处理

在CSD寄存器中有两个关于有效载荷块长度的条目:

-块长度类型和

-外部ECC。

块长度条目取决于设备内存字段的体系结构。在1字节- 2 kByte范围内的块长度大小有2指数步骤定义的固定值。或者,该设备允许应用在1字节和最大块大小范围内的任何块长度。

对块长度有影响的CSD条目是选定的外部ECC类型。如果选择了一个外部ECC代码选项,则此条目通常不必与CSD中的块长度条目相匹配。但是,如果这些条目不匹配,则在主机端需要一个额外的缓存。为了避免这种情况,强烈建议使用允许为具有外部ECC的应用程序使用任何块长度的设备。

A.2在设备上存储密码的方法的说明

为了提高不同应用程序之间的设备的兼容性和互操作性,要求不同的主机应用程序使用相同的算法和数据格式。以下是在设备上的128位密码块中存储密码的推荐方法。它仅作为申请说明提供。

此方法仅适用于密码包含可能由用户输入的文本时。如果设备之间的互操作性不重要,或者如果应用程序选择使用,例如,一个随机位模式作为密码,则应用程序可以选择使用另一种方法。

获取密码(从用户、从设备上的本地存储器、或其他什么东西)。密码可以是任何长度,可以是任何字符集。

. 将密码规范化为UTF-8编码的Unicode字符集。这保证了与所有区域设置、字符集和国家特定的版本的互操作性。在UTF-8中,前128个字符被直接映射到US -ASCII,因此仅使用US -ASCII作为密码的设备可以很容易地符合这个标准。

. 通过SHA-1安全哈希算法运行规范化密码。这使用了可用于密码存储的整个密钥空间,并使得也可以使用比128位更长的密码。额外的好处是,不可能从设备中反向工程密码,因为不可能从其散列中获得密码。·

. 使用此散列的前128位作为设备密码。(SHA-1会产生一个160位的散列。没有使用最后的32位。)

下面是一个示例(请注意,在使用此值作为实现参考之前,需要重新检查确切的值):

密码是“页脚”。首先,它被转换为UTF-8。由于所有字符都是US -ASCII,因此生成的位字符串(以十六进制为单位)为:

66 6F 6F 62 61 72

After running this string through SHA-1, it becomes:

88 43 d7 f9 24 16 21 1d e9 eb b9 63 ff 4c e2 81 25 93 28 78

Of which the first 128 bits are:

88 43 d7 f9 24 16 21 1d e9 eb b9 63 ff 4c

然后将其用作该设备的密码。

A.3emmc宏命令

本节定义复杂MMC总线操作的方式(例如,擦除、读取等)可以使用预定义的命令序列来执行。执行这些序列将由多媒体设备总线主机负责。然而,它也可以用于主机兼容性测试的目的。

EMMC命令序列。图A.91提供了序列流程图中使用的符号的图例。CMD13的状态可以在收到对先前命令的响应后随时进行轮询。

. CIM_SINGLE_DEVICE_ACQ

主机知道系统中存在一个设备,因此不需要实现识别循环。在这种情况下,只需要一个ALL_SEND_CID。类似地,单个SEND_CSD就足够了。

设置设备连接过程(CIM_SETUP_DEVICE)将总线主线与单个设备连接起来。此命令所需要的参数是所选设备的RCA。通过其RCA使用GO_TRANSFER_STATE(CMD7)命令选择单个设备。该响应指示该设备是否已准备就绪。如果设备确认了连接,适配器将使用SEND_CSD(CMD9)读取设备特定的数据。响应中的信息用于配置数据路径和控制器选项。

读取块过程(CIM_READ_BLOCK)从设备中读取数据块。此命令所需的参数是块长度(4字节)和块的起始地址(4字节)。该操作还包括一个数据部分(在这种情况下,是读取块)。该过程首先使用SET_BLOCKLEN(CMD16)命令设置所需的块长度。如果设备接受此设置,则通过命令READ_SINGLE_BLOCK(CMD17)从给定的地址开始传输数据块。

读取多块过程(CIM_READ_BLOCK)依次从设备中读取数据块。此命令所需的参数是块长度(4字节)和第一个块的起始地址(4字节)。该操作还包括一个数据部分(在这种情况下,是读取块)。该过程首先使用SET_BLOCKLEN(CMD16)命令设置所需的块长度。如果设备接受此设置,则通过命令READ_MULTIPLE_BLOCK传输数据块(CMD18),从给定的地址开始。

· CIM_WRITE_BLOCK

此命令序列类似于多块写,只是写数据块没有重复循环。

· CIM_WRITE_MBLOCK

写多个块的序列以一个可选的SET_BLOCK_LEN命令开始。如果块长度没有变化,则可以省略此命令。如果设备接受这两个启动命令,则主机将开始在数据行上发送数据块。在每个数据块后,主机将检查DAT行上的设备响应。如果CRC正常,则设备不忙,如果有更多的数据块,主机将发送下一个块。

在发送数据块时,主机可以查询设备状态寄存器(使用已启用的SEND_STATUS),以轮询设备可能拥有的任何新的状态信息(例如,WP_VIOLATION、对准失调等)。必须使用STOP命令终止该序列。

· CIM_ERASE_GROUP

擦除组过程从ERASE_START(CMD35)和ERASE_END (CMD336命令开始。一旦选择了擦除组,主机将发送一个擦除(CMD38)命令。建议主机使用SEND_STATUS(CMD13)终止该序列,以轮询设备可能拥有的任何附加状态信息(例如,WP_ERASE_SKIP等)。

· CIM_TRIM

修剪过程从ERASE_START(CMD35)和ERASE_END(CMD36)命令开始,这些命令用于选择写入块。一旦选择了写块,主机将发送一个擦除(CMD38)命令,参数位0设置为1,其余的位设置为0。建议主机使用SEND_STATUS(CMD13)终止该序列,以轮询设备可能拥有的任何附加状态信息(例如,WP_ERASE_SKIP等)。

• CIM_US_PWR_WP

对写入保护组应用通电写入保护所需的最小顺序是设置US_PWR_WP_EN (EXT_CSD[171]位0),然后使用SET_WR_PROT(CMD28)命令。

如果不需要,建议在发出第一个通电写入保护序列之前禁用永久写入保护,因为如果一个区域被永久保护,则不能应用通电写入保护。

主机可以在通过读取US_DIS_PWR_WP(EXT_CSD[171]位3)来应用开机保护之前,检查是否已禁用通电保护。此外,主机可以通过使用SEND_WR_PROTECT_TYPE(CMD31)命令验证执行所需的序列后写入组的保护状态。

· CIM_US_PERM_WP

对写入保护组应用永久写入保护的最小要求顺序是设置US_PERM_WP_EN(EXT_CSD[171] bit 2),然后使用SET_WR_PROT(CMD28)命令。

主机可以选择通过读取US_DIS_PERM_WP(EXT_CSD[171]位4)设置永久写入保护之前检查是否禁用永久保护。此外,主机还可以通过使用SEND_WR_PROTECT_TYPE(CMD31)命令来验证执行所需序列后的写入组的保护状态。

A.4主机接口时序

随着EMMC标准4.0的引入,主机和设备都使用更高的时钟速度。为了保持反向和向前的兼容性,设备和主机需要实现两组不同的计时。其中一组定时是针对高速系统的接口定时,其工作频率为时钟频率高于20MHz,高达52MHz。另一组时间对于设备和主机是不同的。设备必须保持向后兼容性,允许其插入到较旧的EMMC系统。主机必须保持正向兼容性,允许将旧的EMMC插入到新的高速EMMC系统中。

表A.222定义了前向兼容性接口计时。在表208中已经定义了高速接口定时。

A.5密码处理

密码只有一个长度指示符,而不是为新密码和旧密码保留单独的长度字节。因此,在密码更改操作中可能发生冲突,之后新密码与用户设置的密码不匹配。在设备实现中也有各种关于去除锁功能的各种解释。因此,建议使用以下章节中的程序来实现在主机-设备系统上的最佳兼容性。

A.5.1更改密码

这也适用于主机系统。不要使用密码替换功能进行密码更改:

—首先,删除旧密码

—其次,设置新密码

A.5.2删除密码

这也适用于主机系统。在重置密码(CLR_PWD)之前,请解锁设备。

A.6高速EMMC总线功能

A.6.1总线初始化

使用本文档v4.0中介绍的新特性。本应用说明描述了一种将高速EMMC从初始较低频率切换到高频和不同总线配置的方法。高速EMMC是向后兼容的,因此在通电后,它们的行为与旧的设备相同,没有明显的差异。4主机可以描述的识别高速MMC并将其置为高速模式的步骤,从通电到设备准备好在高速数据速率下工作。

  1. 加电

1.线通电,通信电压范围(1.70V-1.95V或2.7V-3.6V/1.1V-1.3Vopt)

2.将时钟设置为400 KHz,或更少

3.等待1个ms,然后再等待74个时钟周期、电压供应上升时间、启动操作持续时间(见图73)

4.以主机所需的地址模式发送CMD1(0x80FF8080容量小于或等于2GB-或0xC0FF8080容量大于2GB)

5.接收R3

6.如果OCR忙位为“0”(R3响应中的0x00FF8080或0x40FF8080,且主机应忽略访问位),则重复步骤5和步骤6

7.当设备返回0x80FF8080或0xC0FF8080时,如果与主机CMD1参数兼容,则它将移动到“就绪状态”

8.如果R3返回其他值,则设备不兼容(因为由于电压不兼容而处于不活动状态,并且不响应);在这种情况下,主机必须关闭总线并启动其错误恢复过程(错误恢复过程的定义依赖于主机,并且超出本应用程序说明的范围)

低压加电

如果主机支持低压操作,则执行以下步骤,否则请跳到步骤16。

9.如果主机是低压主机,并且识别出双电压设备,则关闭MMC总线

10.在低电压范围(1.70V-1.95V)下,向MMC总线供电

11.等待1个ms,然后再等待74个时钟周期

12.发送具有参数0x00000080的CMD1

13.接收R3,它应该读取0x00FF8080

14.如果OCR忙位为“0”,则重复步骤13和14

  1. CID检索和RCA分配

15.发送CMD2

16.接收R2,并获取设备的CID

17.发送具有选定RCA的CMD,值大于1的3

18.发送CMD9

19.接收R2,并从中获取设备的CSD。

20.必要时,根据CSD中的信息调整主机参数。如果SPEC_VERS表示版本为4.0或更高版本,则该设备是高速设备,支持开关和SEND_EXT_CSD命令。否则,该设备将是一个旧的MMC设备。无论设备的类型如何,在此时可以设置的最大时钟频率都在TRAN_SPEED字段中定义。

A.6.2 切换到高速模式

实现版本4.0或更高版本的设备支持以下步骤。关于切换到v4.5中引入的HS200模式,请参见6.6.2.2。在根据A.6.1,总线初始化,总线初始化后执行这些步骤。

21.发送CMD7和设备的RCA,使设备处于转换状态

22.发送CMD8,SEND_EXT_CSD。从EXT_CSD中,主机可以学习设备的功率类别,并选择使用更宽的数据总线(参见步骤26-37)

23.发送CMD6,将0x1写入EXT_CSD的HS_TIMING字节。参数0x03B9_0100将会 这样做。

23.1-设备可能会在R1之后立即进入BUSY,如果是这样,请等待,直到BUSY 信号被取消执行

23.2-After该设备来自BUSY,它被配置为高速定时

24. 将时钟频率更改为所选频率(介于0到26/52MHz之间的任何频率)

A.6.3 更改数据总线宽度

如果设备的电源类别允许主机在主机电源预算范围内在更宽的总线上工作,则可选择执行以下步骤。在根据A.6.1总线初始化进行总线初始化后,执行这些步骤

  1. 总线测试程序

25.发送CMD19 

26.在所有总线数据线上发送一个数据块,其数据模式如下(CRC16为可选项)

26.1-对于8个数据行,数据块将是(MSB到LSB): 0x0000_0000_0000_AA55

26.2-对于4个数据行,数据块将是(MSB到LSB): 0x0000_005A

26.3-对于只有一条数据线,数据块将是: 0x80

27.等待至少一个NCR时钟周期后再继续

28.发送CMD14,并从所有可用的数据线接收一个数据块

28.1-对于8个数据行,请接收8个字节

28.2-对于4个数据行,请接收4个字节

28.3-对于1个数据行,请接收1个字节

29. 用在步骤27中发送的数据XNOR掩码数据

30.根据以下结果屏蔽结果

30.1-对于8行数据行,掩码为(MSB到LSB): 0x0000_0000_0000_FFFF

30.2-对于4条数据行,掩码为(MSB到LSB): 0x0000_00FF

30.3-对于1条数据线,掩码为0xC0

31. 结果应该为0。任何其他结果都表明设备与系统的连接存在问题;在这种情况下,主机必须关闭总线并启动其错误恢复过程(错误恢复过程的定义依赖于主机,且超出本应用程序说明的范围)

  1. 电源和总线宽度的选择
  1. 选择您要使用的总线的宽度
  2. 如果所选宽度的功率类与默认的功率类不同,请发送CMD6,并使用所需的功率类写入EXT_CSD的POWER_CLASS字节
  3. 设备可能在CMD6后发出BUSY信号;等待设备退出BUSY
  4. 发送CMD6,用选定的总线宽度写入EXT_CSD的BUS_WIDTH字节。0x03B7_0100的参数将设置一个4位总线,参数0x03B7_0200将设置一个8位总线。
  5. 总线已经可以使用新的宽度配置来交换数据。

A.7擦除单位大小选择流程

图A.102中的流程图显示了如果主支持JEDEC MMC电气接口标准v4.3,主服务器如何选择擦除单元大小。

A.8 HPI背景和可能的解决方案之一

· Background - issues with HPI

目前还存在关于高优先级中断(HPI)的问题。

一种情况是当可中断操作(例如,写)被重复中断,以允许执行高优先级读取操作。有人担心延迟写操作的时间过长会使主机系统停止。如果这真的是一个问题,由于系统特征不同,很难预测;高优先级的读取将启动不同类型的应用程序,不同类型的应用程序可能会中断他们的写操作,系统的不同时间,等等。

另一种情况是当一个高优先级的过程请求写操作和低优先级的过程请求一个新的代码页,写操作被HPI中断的情况下,我们面临着优先级违反计划系统中定义的计划。

· One of possible solutions 

可能有不同的解决方案来解决在HPI中观察到的问题。

对观察到的问题的一种可能的解决方案是通过在专用计时器过期时通过写操作来解决主机上的冲突。根据上下文有一个可调整的超时值,因此获得了灵活性,使针对不同的需求采用该方法成为可能。

使用下面的示例,我们为这两个最有趣的用例解释了一种可能的方法。假设我们希望保护写入命令在写入命令最初发送到内存设备后不延迟超过1秒。在这种情况下,我们需要为每个写命令设置超时值1s。当写入命令被发送到内存设备时,将启动一个计时器。如果在写命令仍在进行时请求HPI,主机中的驱动程序将检查计时器值。如果计时器值与超时时间(1s)相比已经过期,则HPI将无法中断写命令。另一方面,如果计时器值低于超时时间(1s),则HPI将中断写操作,并提供请求的读取操作。当写入操作最终结束时,定时器将被重置。

假设另一种情况,即保护Linux中的高优先级写操作。当请求写入操作时,将检查请求此操作的进程的优先级。如果它是一个实时进程或一个内核进程,则超时值将被设置为零,并且一个计时器将以与上面的示例中相同的方式启动。如果在写命令仍在进行时请求HPI,主机中的驱动程序将检查计时器值。计时器值将被检查到超时(0秒),指示计时器过期,这意味着写入命令永远不会被中断。当写入操作结束后,定时器将被重置。

A.9停止变速器正时

以前版本的EMMC规范并没有描述在所有不同的设备状态下的停止命令的时间。此外,对于所有情况,在收到停止命令后接收到的块是否有效。下一节旨在为未来的设计澄清这种行为。然而,由于没有版本的版本,并不是所有的设备都可以遵守这个澄清。正是由于这个原因,主机应该采取必要的预防措施,以确保STOP命令在其设计中按预期发挥功能,而不应依赖于以下行为。图A.103描述了在从设备传输CRC状态之前,停止命令的繁忙信号定时。考虑到向后兼容性,即使设备在CRC状态和忙信号之间不需要两个Z时钟,在CRC状态的结束位之后也会需要两个Z时钟。此行为基于图44-在从设备进行CRC状态传输期间停止传输。然而,一些设备可能不符合图A.103。正是由于这个原因,主机应确保设备的行为,并建议在STOP命令后指示繁忙信号4个时钟周期。

图A.104和图A.105描述了数据块的有效性。在图A.104中的STOP命令后,遵循2个时钟周期的结束位遵循CRC状态,但设备认为CRC状态已中断。因此,在图A.104上接收到的数据块被认为是不完整的,并且不会被编程。

图A.105中接收到的数据块被认为是完整的,设备将对其进行编程。

注意:对于HS200模式下的停止传输,从停止传输的结束位到繁忙启动(称为Nsb-a)的时间可能会有所不同。有关HS200案例的进一步信息,请参阅6.15.8,“HS200模式下的时间变化”。

A.10每个功率等级的温度条件(温度控制)

提高EMMC的性能会增加设备产生的热量。

未来EMMC设备的仿真数据显示:

  1. 如果依赖自然空气对流作为散热的唯一手段,而环境温度极限是唯一给定的标准规格参数,存储器和控制器结温度可能超过硅装置运行的最大允许极限
  2. 此外,由主机制造商设计的系统级解决方案,如从包装的顶部表面去除热量,是需要改善热管理的挑战

为了实现更有效的系统解决方案,利用高速操作后的包箱温度每不同的电流消耗定义。

假定设备供应商可以在数据表中指定特定功率类支持的最大性能,并根据符合表A.227中给出的Tc温度的系统解决方案的最大可用性能。符合给定表的主机应在EX_CSD寄存器中设置TCASE_SUPPORT位。如果没有设置TCASE_SUPPORT位(=“00”),设备可能会限制其作为自我保护机制的最大性能水平。

从焊料球传导到PCB的热路径将取决于主机PCB的设计。假设有两种情况:

·. 通过包装箱脱热是主要路径·

. 脱热是50%和50%

表A.227提供了不同功率等级电流水平的Tc温度集。包装表面应保持在或低于给定电流消耗时所显示的Tc温度。定义Tc为设备制造商和主机供应商提供了参考,假设各自将承担以下责任:

. 存储设备供应商:制作热效率包:确保存储设备连接温度不超过其最大Tj,只要Tc保持在每个eMMC,如表所示A.227.·

. 主机供应商:高效的冷却系统,以确保包箱温度永远不会超过表中定义的TcA.227.

A.11单独处理每个引导区域的写入保护

以下步骤描述了在其他引导区域被永久写保护时,如何对引导区域启用开机写保护。

当尝试独立地上电写保护另一个引导分区时,EXT_CSD173中的第3位的配置需要与从BOOT_WP_STATUS[174]读回的值相一致。

特别是在这种情况下,引导区域2以前被永久写保护,必须设置两位B_SEC_WP_SEL(位7)和B_PER_WP_SEC_SEL(位3)。否则,两个引导区域将被永久写入保护

A.12现场固件更新

图A.107描述了正正向的FFU流。

A.13命令队列:命令流(信息性)

下面的小节将描述在排队命令和执行任务中所涉及的命令序列。

A.13.1 Queuing a Transaction (CMD44+CMD45)

要排队处理数据传输任务,主机将发出CMD44,然后发出CMD45。CMD44编码块计数、任务ID、数据方向和优先级。

CMD45对事务LBA进行编码。主机应确保CMD44中编码的任务ID所代表的ID尚未在设备的队列中使用。

设备以r1类型的响应响应每个命令。响应指示是否收到事务,并且任务已成功排队。为了使任务排队,必须按顺序发出CMD44和CMD45。

如果CMD44不成功(例如,请求的任务ID已经在使用),设备将该命令视为非法而不响应。在这种情况下,CMD45不能由主机发布。

如果在CMD44之后没有发出CMD45,则会取消排队操作。在成功发出CMD45并返回R1响应后,考虑该任务在设备中排队。

CMD44和CMD45可以在数据传输在DAT线路上或当设备指示BUSY状态或线路空闲时(例如,在NAC时间时)发出CMD44。

主机可以使用CMD44+CMD45流排队任何数量的任务,只要队列不满(即,有可用的任务id)。

A.13.2 Checking the Queue Status (SEND_STATUS - CMD13)

为了确定哪些任务已经准备好执行,主机可以读取队列状态寄存器(QSR)。为了读取QSR,主机在SEND_STATUS,其参数集设置位[15]。该设备以一个R1和其参数中的QSR进行响应。

SEND_STATUS可能是在DAT线路上进行数据传输时,或当设备指示BUSY状态或线路空闲时(例如,在NAC时间内)时发出SEND_STATUS

A.13.3 Execution of a Queued Task (CMD46/CMD47)

为了执行先前排队的任务,主机发出CMD46或CMD47,编码所请求任务的Task ID。CMD46用于读取命令的执行,CMD47用于写命令。主机只能为任务发出CMD46/CMD47,这些任务在QSR中显示为“准备执行”。

如果任务已经准备好执行,并且其数据方向与命令索引(CMD46为读,CMD47为写)相匹配,则设备将发出适当的R1响应并开始数据传输。如果有任何错误,则该设备将不响应,也不发生数据传输。

B介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SUNtao99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值