eMMC当中HPI的作用以及使用方法
2016-01-04 19:32
225 查看
在某些情景下,不同类型的数据对于Host来讲可能会有不同的优先级。比如在写指定的数据的时候,由于写数据会消耗掉很多的时间,当用于想要立即进行另外一个操作的时候,就必须项办法抑制住当前的写操作来实现分页操作的需求。
HPI(High Priority Interrupt)高优先级中断,该机制可以中断一些还没有完成的优先级比较低的操作,来满足对高优先级操作的需求。
HPI命令可以从一下两个命令中的任何一个来发送:
1.CMD12 -
基于STOP_TRANSMISSION命令,当HPI标志位置一的时候生效
2.CMD13 -
基于SEND_STATUS命令,当HPI标志位置一的时候生效
当HPI生效的时候,以上两个命令的参数必须设定为
[31:16]RCA
[15:1]填充位
[0]HPI
填充位不影响参数配置
当CMD12的的HPI置一之后,该命令的功能与没有置位时的CMD12功能完全不同。HPI置一之后,CMD12只能在编程阶段(prg-state,CMD6/28/29/38之后)发送,而没有HPI置位的CMD12是在数据传输和数据接收阶段发送。
当发送了HPI置一的CMD12之后,就表明高优先级的命令已经在等待,设备会尽可能快地停止当前所有操作并进入数据传输阶段(Tran-state)
如果设备在接收HPI时没有在编程阶段,若此时的传输状态允许回复命令,则设备会回复一个忽略HPI标志的命令,若传输状态不允许回复命令,则视为非法命令处理。
虽然HPI在编程阶段是合法命令,但是只有几个操作可以被HPI中断。如果该操作不允许被HPI中断,设备会回复一个命令,但是HPI操作不会产生影响。
当在执行WRITE_MULTIPLE_BLOCK命令时(CMD
25),设备会更新CORRECTLY_PRG_SECTORS_NUM(EXT_CSD[245:242]),这个值会根据目前成功写入的扇区(512B)数量来更新。当HPI生效之后,Host可以根据这个值来重新继续写入数据而不必从头开始写。
如果HPI中断了在Packed
write command中的CMD25,CORRECTLY_PRG_SECTORS_NUM返回的是所有写命令积累起来的当前成功写入扇区的总数量,Host应当通过这个值计算出具体的中断的命令和扇区偏移地址。
在使用HPI功能之前,要先把在EXT_CSD里面[161]字节的HPI_MGMT,把HPI_EN置1
HPI(High Priority Interrupt)高优先级中断,该机制可以中断一些还没有完成的优先级比较低的操作,来满足对高优先级操作的需求。
HPI命令可以从一下两个命令中的任何一个来发送:
1.CMD12 -
基于STOP_TRANSMISSION命令,当HPI标志位置一的时候生效
2.CMD13 -
基于SEND_STATUS命令,当HPI标志位置一的时候生效
当HPI生效的时候,以上两个命令的参数必须设定为
[31:16]RCA
[15:1]填充位
[0]HPI
填充位不影响参数配置
当CMD12的的HPI置一之后,该命令的功能与没有置位时的CMD12功能完全不同。HPI置一之后,CMD12只能在编程阶段(prg-state,CMD6/28/29/38之后)发送,而没有HPI置位的CMD12是在数据传输和数据接收阶段发送。
当发送了HPI置一的CMD12之后,就表明高优先级的命令已经在等待,设备会尽可能快地停止当前所有操作并进入数据传输阶段(Tran-state)
如果设备在接收HPI时没有在编程阶段,若此时的传输状态允许回复命令,则设备会回复一个忽略HPI标志的命令,若传输状态不允许回复命令,则视为非法命令处理。
虽然HPI在编程阶段是合法命令,但是只有几个操作可以被HPI中断。如果该操作不允许被HPI中断,设备会回复一个命令,但是HPI操作不会产生影响。
CMD 序号 | 名称 | 是否可以被中断 |
CMD24 | WRITE_BLOCK | Yes |
CMD25 | WRITE_MULTIPLE_BLOCK | Yes |
CMD38 | ERASE | Yes |
CMD6 | SWITCH, byte BKOPS_START, 任何值 | Yes |
CMD6 | SWITCH, byte SNAITIZE_START,任何值 | Yes |
CMD6 | SWITCH, byte POWER_OFF_NOTIFICATION, 设置成POWER_OFF_LONG或SLEEP_NOTIFICATION | Yes |
CMD6 | SWITCH,byte POWER_OFF_NOTIFICATION,除了上面的其他值 | No |
CMD6 | CACHE_CTRL 当被用于关闭cache | Yes |
CMD6 | FLUSH_CACHE | Yes |
CMD6 | SWITCH,除了上面提到的其他字节和值 | No |
All Others | No |
25),设备会更新CORRECTLY_PRG_SECTORS_NUM(EXT_CSD[245:242]),这个值会根据目前成功写入的扇区(512B)数量来更新。当HPI生效之后,Host可以根据这个值来重新继续写入数据而不必从头开始写。
如果HPI中断了在Packed
write command中的CMD25,CORRECTLY_PRG_SECTORS_NUM返回的是所有写命令积累起来的当前成功写入扇区的总数量,Host应当通过这个值计算出具体的中断的命令和扇区偏移地址。
在使用HPI功能之前,要先把在EXT_CSD里面[161]字节的HPI_MGMT,把HPI_EN置1
相关文章推荐
- POJ-1953 World Cup Noise(线性动规)
- 转【实战体验几种MySQLCluster方案】
- 弱菜之快速排序实现,表示因为书上的看不懂只能自己写
- java js 日期总结
- spark-submit工具参数说明
- 亲耳聆听机器人发声
- javaEmail发送邮件问题总结
- 文件与外部排序
- (IOS自学)常见的UNIX指令
- MySql 1067错误
- 数据库基础
- 蓝懿IOS委托模式代理模式
- POJ-1926 Pollution
- 手把手教你使用gradle mulchannel插件,进行多渠道打包
- POJ-1926 Pollution
- I/O流类库(二)
- jetty性能优化思路整理
- xtrabackup 2.3.3编译安装
- 1.4编程基础之逻辑表达式与条件分支
- XmlPullParserException: Unexpected token (position:TEXT @1:2 in java.io.StringReader)