目前情况是这样:multiple-block write的时候,写完第一个block内容,反馈crc正确后,就data0 busy状态。等待好长时间的busy。跟文档描述不一样。
以下操作流程:
1、根据镁光的hs400操作流程,tuning,ddr x8,hs400. 这些配置完毕。
2、单block读写流程:
(1)、发送cmd35,cmd36,cmd38,地址为第一个block到第四个block,擦除完毕。
(2)、发送cmd24,再发送数据,反馈crc正确,data0进入busy状态。
(3)、等待busy完毕,发送cmd17,读取数据,验证正确。
3、多block读写流程:
(一):多block写 non-packed 模式:
(1)、发送cmd35,cmd36,cmd38,擦除完毕。擦除指令以上一样。
(2)、发送cmd23(default),argument=32'ha000_0002。反馈R1成功。(注释:目标是写2个block)
(3)、发送cmd25,发送第一个block数据,crc正确,然后data0就进入busy状态了,要等待好长好长时间(与单block的busy时间一样),跟文档的时序描述不一样。
(注释:cmd23操作,不知道是否需要先turn on cache,然后再发送cmd23 argument=32'h2000_0002,再flush the cache。方法都试过,情况是一样)
(二):多block写 packed模式:
(1)、擦除指令一样
(2)、发送cmd23(packed),argument=32'h4000_0003,反馈R1成功。(注释:一个header+2个block count)
(3)、发送cmd25:packed header内容为0102 0100 0000 0000 0000 0002 0000 0001; 其他数据位填0. 发送完第一个block后,crc反馈正确。
然后data0,也进入了busy状态,要等待好长的时间,才能发送第二个block。跟文档的时序描述不一样。跟以上(一)的问题一样。
(注释:packed header:version=0x01,write=0x02, num_entries=0x01, cmd23_arg1=0x02(block count), cmd25_arg_1=0x01(start address))
(三):多block读:non-packed模式
(1)、发送cmd23,block-count=2。
(2)、发送cmd18,能收到2个block的内容,收到block与block之间的时间间隔大概为500个时钟。时间短。
(另外询问一下:镁光的emmc hs400 写速度最大是14MB/s,读速度最大是160MB/s吗?文档的typical values是这样描述,但不清楚最大的写速度是多少?)
各位大神,请不吝赐教。 |