【eMMC协议】6.6.6 - 6.6.8.1

6.6.6 Bus width selection

host验证总线上的功能引脚后,应使用SWITCH命令相应地更改bus width 。 通过写入EXT_CSD寄存器模式段中的bus_width字节来更改bus width。 通电或软件复位后,BUS_WIDTH字节的内容为0x00。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uB8sR2jU-1689327578683)(C:\Users\bw002421\AppData\Roaming\Typora\typora-user-images\1687773265650.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwRDQCFK-1689327578684)(C:\Users\bw002421\AppData\Roaming\Typora\typora-user-images\1687773229735.png)]

6.6.7 Data read
  1. 当没有数据传输时,DAT0-DAT7 bus line levels为高电平。传输的数据块包含了,其实的low bit和后面的数据流。 数据流包含了有效数据,同时如果使用了off-Device ECC,还包含错误校正bits。数据流以HIGH bit结束。

  2. 除HS400外,所有接口的时钟信号同步传输。HS400信号与DS信号同步传输。以block为传输形式的payload,每根数据线上有CRC校验保护,SDR有一个而DDR上有两个。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-807pFur7-1689327578685)(C:\Users\bw002421\AppData\Roaming\Typora\typora-user-images\1685008824798.png)]

6.6.7.1 Block read
  1. 在sdr模式下,基本的数据传输单元是block,其最大容量在CSD寄存器的READ_BL_LEN中定义。 如果设置了READ_BL_PARTIAL,则也可以发送起始地址和结束地址完全包含在一个物理块(如READ_BL_LEN所定义的)内的较小块。CRC被附加到每个块的末尾,从而确保数据传输的完整性。

  2. CMD17 (READ_SINGLE_BLOCK)发起块读操作,传输完成后,设备返回到传输状态 。 在DDR模式下,读取的块数据大小始终为512字节,不支持读取部分块数据,并且在每个块的末尾附加两个CRC,一个为偶数字节,一个为奇数字节。
    在这里插入图片描述

  3. 两种读模式

    • open-ended:直到收到停止读的命令才会停下来
    • 预定义了结束位:预先定义了传输的块数,传输完成后恢复传输模式。一般不需要结束命令,除非遇到error。这种模式下,必须先定义块数量, SET_BLOCK_COUNT(CMD23) , 然后再READ_MULTIPLE_BLOCK (CMD18) 。否则使用open-ended模式进行读取,需要STOP_TRANSMISSION 才能停止。
  4. 在多块读过程中,host能够使用STOP_TRANSMISSION随时进行停止。 如果出现以下任何一种情况,设备将拒绝该命令,保持Tran状态,并设置相应的错误位:

    • 设置CMD17或者CMD18时越界,报错ADDRESS_OUT_OF_RANGE
    • 当前定义的块长度对于读操作是非法的,报错 BLOCK_LEN_ERROR
    • 地址/块长度组合的第一个数据块位置和EMMC物理位置块不对齐 ,报错 ADDRESS_MISALIGN
  5. 在读取多个块时,如果eMMC检测到错误,将停止传输并停留在DATA State。host想要终止这个操作就需要发送终止操作命令,eMMC会返回对应的错误。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygce7hUs-1689327578685)(C:\Users\bw002421\AppData\Roaming\Typora\typora-user-images\1688024482958.png)] 6. 如果host 在固定数据块读取最后一个块后下发了停止数据传输的命令,则该命令被视为是非法命令,因为此时的EMMC 没有在数据传输状态中。 若host使用的块未对齐,且eMMC必须要块对齐,则eMMC会在第一个未对齐的块处检测到一个未对齐的错误,之后传输内容则未定义。当host发送CMD12(STOP_TRANSMISSION )后,eMMC返回一个 ADDRESS_MISALIGN 错误,并且返回Transfer状态。

  6. 如果SET_BLOCK_COUNT(CMD23)设置为0,则之后的read模式为 open-ended multiple block,只能使用CMD12来停止读操作。

6.6.8 Data write

  1. 在写操作之前,设备对每个接收到的数据块执行CRC奇偶校验

  2. 一般来说,写操作的中断不应导致其他现有数据的错误。如果ECSD设置了WR_REL_SET则表明已经设置好相关的写保护。 boot分区和RPMB分区中的数据必须具有与将WR_DATA_REL位设置为1所类似的可靠性设置。这些分区的可靠性不受WR_DATA_REL位值的影响。
    在这里插入图片描述

  3. 主机可以选择更改设备上一个或多个分区的写操作的可靠性。 整个寄存器被认为是一次写入,所以主机有一次机会写入寄存器中的所有位。 这种写操作必须作为分区过程的一部分进行,并且必须在PARTITION_SETTING_COMPLETED位设置之前进行。

6.6.8.1 Block write
  1. 在sdr模式下,在块写入(CMD24 - 27)期间,主机将一个或多个数据块传输到设备,并在每个块的末尾附加一个CRC。
  2. 支持块写入的设备应该总是能够接受由WRITE_BL_LEN定义的数据块。如果CRC失败,设备将在DAT0线上显示失败。传输数据失败,后面的数据也不会被保存。在DDR模式下,读取的块数据大小始终为512字节,不支持xie部分块数据,并且在每个块的末尾附加两个CRC,一个为偶数字节,一个为奇数字节。
  3. 三种写模式:
    • Open-ended: 写多块操作的块数量没有定义。设备将持续接受和编程数据块,直到收到停止传输命令
    • 具有预定义块计数的多块写入:设备将接受请求的数据块数量,终止事务并返回传输状态。一般不需要结束命令,除非遇到error。这种模式下,必须先定义块数量, SET_BLOCK_COUNT(CMD23) , 然后再WRITE_MULTIPLE_BLOCK (CMD25) 。否则使用open-ended模式进行读取,需要STOP_TRANSMISSION 才能停止。
    • 可靠写:多个块写入,具有预定义的块计数和可靠写参数。类似于多块写入,区别在于:逻辑地址所指向的旧数据必须保持不变,直到写入同一逻辑地址的新数据被成功编程。 这是为了确保由可靠写更新的目标地址从不包含未定义的数据。 即使programming过程中突然断电,数据也必须保持有效。

这是为了确保由可靠写更新的目标地址从不包含未定义的数据。 即使programming过程中突然断电,数据也必须保持有效。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blank_time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值