eMMC background operation

eMMC有各种维护操作需要在内部进行,为减少

一些紧急操作的延迟,比如read/write, 最好在其他时间去执行维护操作。

操作被分为两类:

foreground operation: host需要被服务的操作,比如read/write

background operation: eMMC device 在不需要服务host时执行的操作。根据后台操作被启动的方式,可以分为两种后台操作:

手动启动的后台操作和自动启动的后台操作。

 

  • 手动启动方法:为了让eMMC device知道什么时候主机不在需要它,host可以让BKOPS_START[ext_csd[164]]写入任何值来手动开启后台操作。device可能一直busy直到没有后台进程需要进行。

为了让device知道host是否会周期性的启动background operation, host应该设置BKOPS_EN[EXT_CSD[163]]的bit0为1,来通知device主机会周期性的写入BKOPS_START(其实就是开启手动后台操作)。eMMCdevice会推迟一些后台操作,直到host往bkops_start写入数据。

BKOPS_EN [163] Bit[0]:MANUAL_EN (R/W): 因为是R/W,所以只能one time programmable

device会报告后台操作的状态,在BKOPS_STATUS

Bit[1:0]: OUTSTANDING
0x0 : No operations required
0x1 : Operations outstanding (non critical)
0x2 : Operations outstanding (performance being impacted)
0x3 : Operations outstanding (critical)

Host应该周期性的检查status和根据需要开始后台操作,这样device有足够的时间来进行维护操作,以减少前台操作的延迟。

如果status处于0x3, 意味这维护操作不能再被推迟,而这时候的前台执行的操作可能超过原本timeout。

为了允许host快速检测到高级别的bkops status,EXCEPTION_EVENTS_STATUS reg中的URGENT_BKOPS bit会被置起,当level是2或3时。这会自动设置device status中的EXCEPTION_BIT,这样host就可以通过每一个R1 response中device status来判断level。当然,host仍然应该周期性从BKOPS_STATUS中读取完整的status,并根据需要开始后台操作。

 

  • 自动启动方法:通过设定BKOPS_EN field [EXT_CSD byte 163]的AUTO_EN bit来开启,开启后由device自主决定,而不会通知host。

一旦开启AUTO_EN,host应该确保设备电源开启。host也可能set or clear这个bit,根据host的power需要。

AUTO_EN有可能被eMMC厂家默认打开:
Bit[1]: AUTO_EN (R/W/E) default value is vendor specific.
0b: Device shall not perform background operations while not servicing the host.
1b: Device may perform background operations while not servicing the host.

posted @ 2024-10-31 11:03  老胡同学  阅读(95)  评论(0)    收藏  举报