关于eMMC中擦除相关功能的认知

admin 8130

eMMC5.1协议中规定了6种擦除方式,分别是erase、trim、discard、sanitize、secure erase和secure trim。

1、Erase,即最普通的擦除命令,这个命令的单位是以erase group为单位的,CMD35和CMD36中的地址会自动以erase group大小圆整。执行命令之后该区域地址数据读出来为0或者1。

2、Trim,和Erase类似,区别就是这个命令是以write block为单位的,CMD35和CMD36中的地址会自动以write block大小圆整。执行命令之后该区域地址数据读出来为0或者1。

举个例子,erase group = 1024B,write block = 512B,CMD35和CMD36配置的地址是0-500,使用erase 命令会擦除0-1023B,使用trim只会擦除0-511B。

3、Discard命令和Trim命令类似,区别就是Discard命令不要求将地址内数据改为0或者1,执行discard命令之后地址内的数据可能是原始数据,也可能是0或1。

以上三条命令会导致CMD35和CMD36设定的地址区域变为unmapped,Discard命令可能是部分变为unmapped。没有映射(unmapped)的地址host读出来都是0或者1。

以上三条命令并不会导致emmc主控执行nand flash的操作,只是改变映射关系。

4、Sanitize命令会让emmc主控操作host没有映射的区域对应的nand flash,因为要操作nand flash,所以这条命令需要等busy信号。

5、Secure erase命令有点像erase和sanitize组合命令,Secure erase要求emmc主控执行nand flash的写入,要确保存储区域的数据被真实的覆盖掉。这条命令也需要等busy信号。

6、Secure trim和Secure erase类似,不过这条命令要分两个步骤完成,step1使用CMD35、CMD36和CMD38设定地址范围,其中CMD38的参数bit[31] =1 和bit[0] =1,这个过程可以重复很多次来选定想要操作的地址区间。

step2还是使用CMD35、CMD36和CMD38还是执行真正的secure trim,此时CMD35和CMD36中的参数不会起作用,只是因为这是一组命令,必须连发。同时CMD38的参数bit[31] =1 和bit[15] =1。

总结下来eMMC的擦除分两大类:

1、只改变映射关系,不会去操作nand flash(假擦除),需要注意的是host读unmapped区域的地址得到的数据都是0或者1,但是nand flash还依然存在真实数据。

2、需要eMMC主控操作nand flash的(真擦除),这类命令执行后nand flash对应区域的真实数据会被覆盖为0或者1。