Eject U盘底层解析

Eject U盘底层解析

1、插上U 盘
OS 会发inquiry 获取U 盘的基本信息,其中包括RMB, U盘告诉OS 是否可移除。
在这里插入图片描述这里U 盘会将RMB 置1。

之后,OS 会发送SCSI PREVENT ALLOW MEDIUM REMOVAL
将设置成 Volume removal shall be prevented。

在这里插入图片描述

目的是告诉U盘, 我不同意remove 你就不可以remove。这里有人可能要奇怪了,U盘怎么会自己去remove 呢? 其实,正常情况下会有两个对象对U盘进行操作,一个是OS另一个是driver,这里PREVENT ALLOW MEDIUM REMOVAL SCSI 是由OS 发下来的, 而不是由U盘的driver 发下来的,这个SCSI是OS为了防止driver 自行remove U盘而设计的。

格式如下:

在这里插入图片描述
需要关注的是PREVENT 的值, 它决定是否允许 remove U盘。
在这里插入图片描述

2、 Eject U盘

这个过程实际上分为两步:

1) OS发送SCSI PREVENT ALLOW MEDIUM REMOVAL
将设置成 Volume removal shall be allowed。

2) U盘driver 发送SCSI START STOP UNIT 来移除U盘。

在这里插入图片描述

START STOP UNIT command 的格式如下:

在这里插入图片描述

IMMED: 表示是否立即返回device 的状态。

0 :表示在设备mount / demount 完成之前不返回device 状态。
1 :表示立即返回 device 的状态。

POWER CONDITION: 配置device 进入不同的power 状态。
具体如下:

HOLD: 表示在这里插入图片描述

NO_FLUSH: 表示是否将cache的内容填写到medium 中。

0: 表示会将C ache 的内容写入medium 中。
1: 表示不会将Cache的内容写入medium 中,快速进入规定的power condition。

LOEJ:表示LOAD OR EJECT。这个bit 和START bit 是组合使用的。

1) LOEJ = 0 :
 忽略LOAD /EJECT 操作。
2)LOEJ = 1, START = 0 :
表示 DEVICE 去要去做 UNLOAD medium 的操作。
对于U 盘来说,就是将自己的POWER 断电,将自己的状态清除。
3)LOEJ = 1, START = 1 :
表示 DEVICE 去要去做 LOAD medium 的操作。
对于U 盘来说,就是将自己的POWER 开电, 重新初始化。

需要注意的是:如果POWER Condition 是被设置了, 则LOEJ 会被忽略。
START 此时是作为POWER Condition 切换使用。

0 :表示不切换
1: 表示切换

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值