6.6.8.1 块写入
在单倍速率模式下,命令CMD24-27写进行单个块或者多个块写入的时候,其末尾带有host 添加的CRC数据校验。支持块写入的EMMC可以定义好写入长度的数据块。如果CRC 校验失败的话,EMMC将会在DAT0 数据信号线上说明该错误,传输的数据将被丢失或者不写入。在多个块传输模式下,紧随其后的数据将被忽视掉。
在双倍速率传输模式下,写入block的长度为512字节,此时的EMMC也不支持部分块写入方式,同时在数据传输完成后,增加两种CRC数据校验方式,一种用于奇数校验,另一种用于偶数校验。
host 下发CMD25(write_multiple_block)对多个块的数据写入。如下定义了三种多个块数据写入的方式(host可以随时使用这三种写入方式)
- 开放式多个块写入
多个块写入时,对写入块的数量没有约定,EMMC接收到编程信号时,持续写入,直到接收到来自host 下发的stop命令,
2. 预定义的多个数据块写入
EMMC可以接收到需要写入块的数量,当完成写入动作后,终止数据传输,并返回到transfer 状态,这种方式写不需要在写入完成后下发stop命令,除非写入时出现报错。
为了开始执行固定块数据写入的动作,host 必须使用CMD23(set_block_count) 命令接着下发CMD25命令写入数据,如果没有设置写入块的数量,则EMMC将进入开放式写入模式,数据写入完成后需要下发停止命令。
3。可靠性写入:定义好写入的块数量以及可靠性写入的参数
这种写入方式类似于前文提到的预定义多块写入,区别在于写入同一逻辑地址的新数据被成功编程之前,原逻辑地址指向的旧数据必须保持不变。这样做的目的为了保证原数据块在写入数据后能够及时更新,即使在编程过程中发生突然断电,数据也要保持是有效的。
所有的block 容量被定义为512B,此时的CMD16(SET_BLOCKLEN)命令无效。如果大扇区模式激活后,则数据以多个容量为512Byte的block或者8个512byte的block 进行写入。
在进行可靠性写入的时候,大扇区模式下写入block的长度不受限。
通过CMD23 命令设置Reliable Write Request 参数(即第31bit)设置为1,
可靠性写入需要保证扇区对齐,在没有对齐的情况下,第19位将会置位,同时数据写入失败。(哪个字段的第19bit???)
如果在可靠性写入的过程中发生断电,则写入sector中的数据呈原子状分布:即掉电后sect