UFS 有哪些擦除命令

UFS擦除相关的操作有四种,Erase,discard,purge和wipe device.Erase和discard与eMMC erase和discard很接近,purge就类似eMMC中的Sanitize.Wipe device就是全盘擦除。

如果把擦除指令比作丢弃垃圾的话,erase就像丢弃日记本,丢弃了就不希望会再被找到。discard就像丢弃饮料瓶,只是不需要了而已,并不在意是否会被捡回。而purge就是下达指令,开始彻底粉碎已经丢弃的数据。

一 Erase

Erase时device所做的操作其实是解除映射,成功erase的LBA host就不能再读出其中的数据。

Erase最小size是write最小单元。

Erase靠unmap命令实现,另一个条件是bProvisioningType(unit descriptor) 的值要被设定为03h,即TPRZ(Thin Provisioning Return Zero)设定为1.

二 Discard

Discard和erase很像,它们的区别是discard过的LBA,host再去读有可能返回任何数据,包括原数据。

Discard CMD 也是靠unmap CMD实现。只是bProvisioningType(unit descriptor) 的值要被设定为02h,即TPRZ(Thin Provisioning Return Zero)设定为0.

三 Purge

Purge其实像是eMMC里的sanitize操作,是从物理上擦除那些unmapped的物理地址。当然这个过程中会伴随这GC 和数据搬移。

Purge option通过Query Request实现。是如下一个flag和一个attribute。

  R/W Reset Value Description
fPurgeEnable flag WRITE ONLY 0

1. =1时,enable purge operation

2. 只有当每一个lu的cmd queue都为空时才可以set flag

3.当purge操作结束或者有错误发生时,device会自动clear这个flag

4.host也可以clear flag如果要中断现在这个操作

bPurgeStatus Attribute READ ONLY 00h

00h:Idle(purge operation disabled)

01h:purge operation is in progress

02h:purge operation stopped prematurely by the host

03h:purge opeartion finished successfully

04h:purge opeartion failed due to logical unit queue not empty

05h:purge operation general fail

other values shall not be set.

在协议上的有关于purge操作各种情况下的描述和状态转换图,为避免过多文字,这里我总结了一个表格:

start status device condition operation waht will happen end status

fPurgeEnable = 00h

bPurgeStatus = 00h

LU queue is empty set fPurgeEnable set success

fPurgeEnable = 01h

bPurgeStatus=01h

fPurgeEnable = 00h

bPurgeStatus = 00h

LU queue is not empty set fPurgeEnable set fail

fpurgeEnable = 00h

bPurgeStatus = 04h

fPurgeEnable = 01h

bPurgeStatus = 01h

purge ongoing purge finish successfully -

fPurgeEnable = 00h

bPurgeStatus = 03h

fPurgeEnable = 01h

bPurgeStatus = 01h

purge ongoing purge general fail -

fPurgeEnable = 00h

bPurgeStatus = 05h

fPurgeEnable = 01h

bPurgeStatus = 01h

purge ongoing

clear

fPurgeEnable

purge stopped

fPurgeEnable = 00h

bPurgeStatus = 02h

bPurgeStatus = 02h/03h/04h/05h - host read - bPurgeStatus = 00h

四 wipe device

Wipe device的操作是通过FORMAT UNIT command来实现的。这个命令host应该不是很常用。

如果我们发了FORMAT UNIT command给Device Well Known logical unit,那么device就会format除RPMB Well-known LU之外的所有enabled LU.

 如果有某一个LU是Write Protect的,那么format unit命令就会执行失败。原数据不会被更改。

猜你喜欢

转载自blog.csdn.net/comeonbestxiaohe/article/details/80999064
今日推荐