数据恢复深度技术:单片机硬盘扇区读写工具
在数据恢复实际工作中,当计算机不认硬盘,或者硬盘的坏道较多,计算机无法做镜像时,需要用额外的设备工具来读取硬盘数据,或者维修硬盘的固件使硬盘复活。这种比较专业的操作,数据恢复工程师一般使用PC3000这类的专业工具来做,但是这些工具价格上都比较贵,对偶尔遇到硬盘物理故障需要修复硬盘恢复数据的用户来说,成本偏高。有没有既便宜又好用的方法呢?其实只要掌握一些单片机编程和基础的电子线路知识,是完全可以自己DIY一个读写硬盘数据的小工具的,如果结合一些硬盘维修指令的知识,这个小工具也能修修硬盘。单片机由于其成本低廉,性能可靠,在工业控制领域广泛运用,而且现在的单片机开发环境也比较简单易用,用C语言就可以编程。因此采用单片机来读写硬盘,是个不错的选择,唯一的缺点就是速度太慢,这个算是代价吧。
常用的单片机一般都是8位机,例如8051系列、PIC系列、AVR系列等,低速的DSP也可以看做是16位的单片机,一些32位的ARM片子,如果不上操作系统,也可当做单片机用,就是资源比较丰富而已。我们这里先采用8位的AVR单片机来做这个小工具。基本的思路就是用AVR的Mega16单片机的IO口,读写硬盘的IO口、控制线和地址线。但是Mega16的每个IO口是8位,硬盘的数据线是16位,需要做IO的扩展,将8位数据线扩展成16位数据线,来读写硬盘。
IO扩展可以用CPLD或者像8255之类的扩展芯片,用CPLD比较灵活,但是涉及到硬件描述语言HDL的编程和下载调试,比较复杂。采用8255比较简单,只需要在单片机端编程控制就可以了,但是8255有个缺点,就是在工作模式切换时,IO管脚会全部拉低,此时,接到硬盘复位管脚上的信号也被拉低,引起硬盘的意外复位。因此需要采用一个倒相器,将8255输出的硬盘控制信号反相,这样当8255输出口全部拉低时,硬盘复位信号经倒相器后处于拉高状态,就不会引起硬盘的意外复位了。8255的具体使用和倒相器的连接见下图所示:
图1 8255使用说明
我们用8255的A口和B口连接到硬盘的16根数据线上,C口的8根线连接到硬盘的地址线和控制线上,通过以前ATA协议的分析,若采用PIO方式读写硬盘,且不考虑IORDY信号,可以只用5根地址线(CS1、CS0、DA2、DA1、DA0)和三根控制线(IOW、IOR和RESET)来实现PIO模式下的寄存器传输和数据传输。因此,可利用8255的C口来实现。大家要是有人分析过PC3000的PCI版,就会发现,ACE也是这个思路,只是他用的是复杂一些的xilinx FPGA和245芯片实现罢了。再来看一下倒相器的使用:
图2 倒相器
采用的是74HC04,将RST信号,IOW和IOR信号,CS1和CS0信号接到反相器,保证了8255模式切换时,不会引起硬盘的误操作。
在核心的单片机端,使用了PA口的8根IO连接到8255的数据线,PB口的5根IO连接到8255的控制线和地址线。具体看下图:
图3 Mega16单片机
除了PA和PB口外,PC口用于连接到JTAG调试端,实现在线调试。PD口用于连接串口输出,用于调试和观察硬盘数据。
按照原理图绘制电路板,画好的电路板效果图为:
图4 电路效果图
板子制作好调通,剩下的工作就是单片机编程了,采用C语言来实现是比较简单的,主要就是硬盘寄存器的读写,比如状态寄存器和命令寄存器等,结合PIO时序要求,编写相应的程序就行了,如果有示波器,可以看一下控制管脚输出信号的时序,对加快软件调试非常有用。后续文章会进一步讲解单片机读写硬盘的编程知识。
将程序编好调试好后,通过JTAG或ISP接口下载到单片机当中,就完成了单片机读写硬盘小工具的制作,利用这个小工具,可以进一步学习ATA协议和硬盘维修指令,提高数据恢复技能。 这东西对数据恢复有什么用呢 看着像我转老外的那个电路,可以单头备吧?? 这个玩玩可以, 当个兴趣。
那个老外可是是个高手, HACKER. 我有时到他的BLOG浏览。 那个老外的blog地址链接贴出来好吗?想看看 这个不太现实额。。。。。。。要求很高,一般人弄不了这个 楼主好屌,老衲拜服 太高科技 玩不了 真是太牛了~~ 太高深了
页:
[1]
2