后台操作
-
在正常情况下,主机对eMMC设备的操作通常为读写操作(被称为前台操作),但是,在进行读写操作时,会在eMMC设备上产生一定的读写碎片,就需要eMMC设备进行碎片回收,这便是设备内部进行的各种维护操作(被称为后台操作)。后台操作有助于减少读写等时间紧迫性操作的延迟(进行后台操作时,设备处于忙碌状态)。所以,为了提高设备读写性能,最好在设备没有进行读写操作时进行后台操作。后台操作可以手动启动或自动启动。
-
手动启动的方法:为了使设备知道主机何时不进行读写操作,并可以执行后台操作,主机应将任何值写入BKOPS_START(EXT_CSD字节[164])以手动启动后台操作。 在处理完后台操作之前,设备将一直保持忙碌状态。
-
由于前台操作的优先级高于后台操作,因此主机可以使用高优先级中断机制来中断正在进行的后台操作。 为了使设备知道主机是会定期启动后台操作,主机应置位BKOPS_EN(EXT_CSD字节[163])的位0(MANUAL_EN),以指示其将要定期写入BKOPS_START。 然后,该设备可能会将某些维护操作延迟到主机写入BKOPS_START时。
-
设备以BKOPS_STATUS的位[1:0](EXT_CSD字节[246])报告其后台操作状态,该状态可以为以下四个可能的级别之一:0x0:不需要任何操作,0x1:非紧急,0x2:性能受到影响,0x3:紧急。
-
主机应定期检查状态,并根据需要启动后台操作,以便设备有足够的时间进行维护操作,以帮助减少前台操作期间的等待时间。 如果状态为级别3(“严重”),则由于维护操作无法再延迟,某些操作可能会超出其原始超时。 主机应给设备足够的时间进行后台操作,以避免一开始就达到此级别。
-
为了使主机能够快速检测到更高的级别,只要级别为2或3,就将EXCEPTION_EVENTS_STATUS中的URGENT_BKOPS位置1。这会自动在设备状态中设置EXCEPTION_BIT。 这使主机可以检测每个R1类型响应的紧急级别。 主机仍应定期从BKOPS_STATUS字节中读取完整状态,并根据需要启动后台操作。
-
对于本规范,后台操作功能是必需的。 BKOPS_SUPPORT的位0(EXT_CSD字节[502])应置1。
-
自主发起的方法; 要使设备能够在设备空闲时间内执行后台操作的主机,应通过将BKOPS_EN字段[EXT_CSD字节163]中的AUTO_EN设置为1b来向设备发送信号。 设置此位后,只要设备认为合适,设备就可以启动或停止后台操作,而无需通知主机。
-
当AUTO_EN位置1时,主机应保持设备电源处于活动状态。 主机可以根据其功率限制或其他考虑,随时设置或清除该位。
高优先级中断
-
在某些情况下,设备上不同类型的数据对于主机可能具有不同的优先级。 例如,写操作可能很耗时,因此可能需要抑制写操作以允许按需分页请求,以便在用户请求时启动进程。
-
高优先级中断(HPI)机制通过允许设备在OUT_OF_INTERRUPT_TIME超时内实际完成低优先级操作之前将其中断,从而能够满足高优先级请求。 主机可能需要重复中断的操作或部分中断操作才能完成原始请求。
-
HPI命令在设备中可能具有以下两种实现之一:
- CMD12 –当其参数中的HPI位置1时,基于STOP_TRANSMISSION命令。
- CMD13 –基于SEND_STATUS命令,当其参数中的HPI位置1时。
-
主机应检查HPI_FEATURES中的只读HPI_IMPLEMENTATION位(EXT_CSD字节[503]),并相应地使用适当的命令索引。
-
如果将CMD12与HPI位置1一起使用,则它与非HPI命令的不同之处在于允许的状态转换。
-
HPI仅在prg状态下执行。 然后,它指示设备优先级较高的命令正在等待处理,因此它应中断当前操作并尽快以不同的超时值返回到转换状态。
-
如果在prg-state以外的其他状态下收到HPI,则在表60中定义了设备行为。 如果允许状态转换,则发送响应,但忽略HPI位。 如果不允许状态转换,则该命令被视为非法命令。
-
在prg-state中,HPI命令被接受为合法命令。 但是,仅某些命令可能会被HPI中断。 如果在不可中断的命令期间收到HPI,则会发送响应,但HPI命令无效,原始命令正常完成,可能超过OUT_OF_INTERRUPT_TIME定义的超时时间。 表36显示了可中断的命令和不可中断的命令。
-
在执行WRITE_MULTIPLE_BLOCK命令(CMD25)之后,设备将使用成功写入设备的512B扇区数来更新CORRECTLY_PRG_SECTORS_NUM字段(EXT_CSD字节[245:242])。 主机在进行被中断的写命令时可以使用此信息-不需要再次重新写所有数据扇区,它可以跳过正确编程的扇区,并仅继续写尚未编程的其余数据。
-
如果HPI中断了作为打包写入命令一部分的CMD25(请参见6.6.29),则CORRECTLY_PRG_SECTORS_NUM字段将反映已传输的累积打包扇区(加上报头)–主机可以从该编号计算可中断的索引。 单个命令及其中断的偏移量。
-
如果在可靠写入命令期间接收到HPI,则第一个CORRECTLY_PRG_SECTORS_NUM个扇区应包含新数据,而其余所有扇区应包含旧数据。
-
通过设置HPI_MGMT字段中的HPI_EN位(EXT_CSD字节[161]),应先启用HPI机制。 HPI功能对于此规范是必需的。 所有设备应在HPI_FEATURES字段中设置HPI_SUPPORT位(EXT_CSD字节[503])。