问答
什么是热插拔
热插拔就是计算机允许用户在不切断电源、不关闭系统的情况下即时接入和取出设备,从而增加计算机扩展外设的灵活性。仔细看,定义上没有一个字告诉我们热拔插就是可以用手直接拔直接插,所以,想要拔U盘时,正确的做法还是老老实实先点击系统中的“安全弹出设备”。
虽然很多时候我们直接用手拔出也没发生什么,但就像汐元开头说的,提示“扫描并修复”就是直接拔导致的一种小问题。严重的时候,有可能导致数据丢失等问题。
可能有小伙伴会好奇,那么为什么键盘鼠标这样的外设可以直接用手拔插,U盘就建议大家弹出了呢?
那是因为,U盘这样的存储设备是有缓存空间的,例如文件传输到U盘上,会先写到高速的缓存中,再存到闪存芯片中,所以有时候系统提示文件已经传完了,但可能U盘其实还在读写。
这个时候直接拔出,就有可能破坏文件系统。
当然,这里的缓存也是可以在系统中取消的,具体方法后续也可以写一个小教程。
但即使去掉了缓存功能,也不建议大家直接拔,因为你也很难保证电脑上有没有什么流氓软件在后台访问你的U盘。
而键盘鼠标这样的设备只是输入输出指令,不存在这种情况,所以直接拔插没啥问题。
讲了这么多,相信大家也想更进一步了解热插拔到底是怎么回事。
从实现的角度来讲,热插拔其实是一个软硬件结合的过程。
总线,可以理解为计算机各种功能部件之间传送信息的公共通信干线。可以分为片总线,内总线和外部总线。
其中外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线,外部设备和它直接相关。
90年代中期的586处理器系统总线都增加了外部总线的扩展,这是即插即用的基础。
在接口电路设计方面,如图,当外部设备插入系统时,会有一个很大的瞬时电流向输入电容充电,这可能导致电路损坏。
热插拔电路设计的目的就是把这个瞬时电流控制在合适的水平。
操作的方法主要有三种:
第一种是在接口上引入长、短交错的引脚,长引脚上加入预充电电阻。这是我们经常看到的方法。
插入时,长引脚首先接触到电源,通过预充电电阻为外设的电容充电,同时限制电流;接着短引脚接触电源,分担预充电电阻的负载,为接入的板卡提供一个低阻通道。
拔出时,长引脚最后和电源分离,通过预充电电阻为板卡负载电容放电。第二种方法比较复杂,主要是通过负温度系数热敏电阻和一个外部特定的晶体管(MOS管)来控制瞬时电流。
MOS管是一种电压控制器件,可以在电路中起到控制电流的作用。
最后一种是最好的解决方案:引入专业的热插拔芯片,提供过压和欠压保护、过载时利用恒流源实现有源电流限制等功能,甚至还有控制电流上升速率、监控电流强度等功能。
至于软件层面,则主要是负责处理用户插拔设备的请求,确认设备是否被占用等。
接下来,我们不妨看看具体设备在热插拔的时候应该注意什么。
1、USB设备
关于USB类设备,其实开头汐元已经讲了好多。
当1994年USB传输协议推出时,科技巨头们就已经考虑到USB接口对热插拔功能的支持了,到现在的雷电3接口,都支持热插拔。
以非常常见的USB Type-A接口为例,可以看到它用到了上面所说的长短交错引脚的控制方法实现热插拔。4根引脚中外侧的两根长引脚用于供电,内侧两根用于数据传输。
对于USB设备来说,热插拔应该注意哪些其实在文章开头汐元也说得差不多了。像U盘、移动硬盘,包括MP3、手机等存储设备的特殊性,我们最好要确认拔出设备时设备没有被占用,因此建议大家使用系统中的弹出功能,否则有可能会造成数据丢失、甚至对设备造成损坏。
这里要提一下,目前来说,手机上的SIM卡和SD卡理论上也是可以热插拔的,以SIM卡为例,卡座上会有专门的卡检测引脚,SIM卡插入或拔出时,会根据电平高低变化来触发中断,软件层面这时候就会根据中断的状态来判断是插卡还是拔卡,然后做出相应的动作。
现实场景中我们在手机上直接插拔SIM卡和SD卡,一般也不会发生一些事故。当然,如果你很谨慎,也可关机后进行插拔。
2、硬盘类
SATA硬盘方面,从2002年开始的SATA2.0协议就已经允许热插拔,多年前在售的硬盘和主板,应该都是SATA2.0或以上的了,所以实现热插拔是没有问题的。
对于机械硬盘和SATA硬盘而言,接口也有和USB类似的长短引脚设计,并且其中有数据线路和电源线路。
在带电状态下插拔硬盘,会产生一个很强的瞬时电流,硬盘的电源线路对这个瞬时电流的宽容能力较强,危险来自硬盘的数据线路,带电的时候插拔,数据线路上会产生很强的瞬间电流和压降,很可能导致硬盘损坏。
所以要记住的一点是,热插拔硬盘时,通常我们会有一个顺序:
插入时,先插电源线路,再插入数据线路,拔开时,则是先拔开数据线路,然后再拔开电源线路。