refresh操作是UFS3.0增加的一个新特性。是host主动要求refresh的操作。
1. 增加refresh feature的目的是什么?
As we know, UFS内部FW管理是有自己的refresh操作的。refresh就是把原来block的有效数据全部搬移,然后erase. 如果一个block由于固定WL的多次读写,会有read disturb造成UECC的风险,经过refresh之后, 就会“焕然一新”,风险就消失了。
UFS3.0这里的refresh operation是指赋予HOST主动要求UFS refresh的权利。
权利同时意味着义务。如果之前是UFS的Background Operation对data reliability负责的话,现在则是HOST和UFS来共同负责。
2. refresh的对象?
从refresh的角度来说,device内部的physical block可以分为三种:
1) block is clean, no data in it(干净block,没有data)
2) block contain data but device doesn't consider it to be in need of refresh(有数据但是device认为还不需要refresh)
3) block contain data and device consider it to be in need of refresh(有数据而且device认为需要refresh)
如果refresh type是Manual-force, 那么refresh的目标是2)&3)
如果refresh type是Manual-selective,那么refresh的目标是 3)
3. refresh操作的频率?
把device完整的refresh一遍,这个频率是由bRefreshFreq决定的。单位是month. 如果=6,就是6个月内要完成地refresh一遍。
这个过程可能是一次完成的,也可能是分多次完成的,一次做多少由bRefreshUnit 来决定。
例如,bRefreshFreq=6,bRefreshUnit=00h, 而device的minimum Refresh capability 是1%。 这就以为这,在6个月时间内,host要负责发起100次refresh request.
4. 怎样发送refresh命令?
refresh request是通过Query request实现的,set flag fRefreshEnable=1, 则refresh开始,set fRefreshEnable=0 则refresh中止,再次 set fRefreshEnable=1则refresh 会从之前中断的地方开始。
那么一次refresh operation执行的状况则可以查看bRefreshStatus.
5. refresh的进度怎么查看?
在Device Health Descriptor中,有两个参数,dRefreshTotalCount和dRefreshProgress
大概的过程就是这样,如果需要更详细的细节信息,请参看UFS3.0 SPEC.
如果感觉这篇文章对你有帮助的话,请帮忙点个赞哈^^