达思数据恢复深度技术硬盘读写单片机程序设计
上一篇文章中,介绍了一种基于AVR单片机的硬盘读写电路,采用的是8255芯片扩展IO口的方式。其实也可以直接用单片机的PA口和PB口接到硬盘的16根数据线上,利用PD口作为地址线和控制线,PC口接串口,作为控制指令的输入和状态的输出口。这样电路可适当化简,但是不能用JTAG在线调试,只能用ISP下载程序到单片机。由于去掉了扩展接口的8255芯片,所以控制程序中可以去掉初始化和操作8255芯片的代码模块。从整体上看,单片机上的软件,包括主程序和各个子程序模块。
子程序模块完成特定的功能,包括:硬盘初始化模块,控制参数读写模块,扇区读模块,扇区写模块,数据缓冲模块等组成。
图1、单片机程序模块
硬盘初始化模块,完成硬盘上电复位或硬件复位操作的延时,以PIO时序读取硬盘状态寄存器,执行硬盘IDENTIFY DEVICE命令,获取硬盘基本信息,配置硬盘参数SET FEATURES命令,完成硬盘工作模式设置等工作;
硬盘控制参数读写模块:单片机对硬盘的控制与读写,需要通过对硬盘写入指令和参数来实现,比如读写扇区时,需要写入要读写扇区的28位或48位LBA地址和扇区数,这就需要单片机以PIO时序读写相关的寄存器,存储必要的参数,读取需要的状态数据。该模块根据指令读写相关的参数寄存器;
扇区读模块:实现以PIO时序读取目标盘的数据;
扇区写模块:实现以PIO时序向目标盘写入数据;
数据缓冲模块:对读取或要写入的数据进行拼接拆分等处理。
主程序模块完成总体的调度和运行,根据串口输入的指令,完成相应的功能,控制各个模块执行操作。
整个软件部分中,最关键的是PIO读写时序的实现,其时序图为:
图2 PIO时序图
程序实现步骤为:首先写地址信号,DA2-DA0,CS1-CS0,然后进入等待延迟计时,计时时间T1到,拉低读或写信号线(DIOR-或DIOW-),继续计时T2-T3时刻,当写数据时,向数据线上加载数据,继续计时到T2时刻,读或写信号拉高,当写数据时,数据线数据继续保持T4时间,继续计时到T9时刻,地址线无效,继续延时计时T2i-T9时间后,一个读写周期结束。
部分实现的代码为:
//硬盘初始化
voidHardDisk_init(void)
{
byte s=0;
Write_ata_reg(DeviceAndHead,0xE0);//LBA模式
do
{
s =Read_ata_reg(Status_Command);
}while(!(s & Status_DRDY)|(s &Status_BUSY));
Write_ata_reg(Status_Command,0x91);
Wait_BSY();
}
//读硬盘参数
intDriver_ID(void)
{
unsigned int i,j;
unsigned char data_buff[8];
while(!Disk_RDY());
Write_ata_reg(Status_Command,0xec);
while(!Disk_DRQ());
chip8255_Config(0x92);//A口、B口输入、C口输出,方式00
do
{
//读取硬盘信息
for(j=0;j<8;j=j+2)< span="">
{
Write_8255PoartC(Data);
Write_8255PoartC(Data|SBIT(6));
PORTB &= ~SBIT(2);//置/CS低电平
PORTB &= ~SBIT(0);//置A0,A1为00
PORTB &= ~SBIT(1);
DDRA = 0x00;//单片机A口输入
PORTB &= ~SBIT(3);//发送读脉冲
data_buff[j] = PINA;
PORTB |= SBIT(3);
PORTB |= SBIT(2);//置/CS为高电平
PORTB &= ~SBIT(2);//置/CS低电平
PORTB &= ~SBIT(1);//置A1为0
PORTB |= SBIT(0);//置A0为1
DDRA = 0x00;//单片机A口输入
PORTB &= ~SBIT(3);//发送读脉冲
data_buff[j+1] = PINA;
PORTB |= SBIT(3);
PORTB |= SBIT(2);//置/CS为高电平
Write_8255PoartC(Data&(~SBIT(6)));
}
i=i+8;
}while(i<512);< span="">
//读数据
voidRead_Data(void)
{
DiskData_Buffer_L = 0;
DiskData_Buffer_H = 0;
chip8255_Config(0x92);//A口、B口输入、C口输出,方式00
Write_8255PoartC(Data);
Write_8255PoartC(Data| SBIT(6));//IOR拉高,PC6,IDE_IOR拉低
Write_8255PoartC(Data&(~SBIT(6)));//IOR拉低,PC6,IDE_IOR拉高
}
利用单片机读写硬盘虽然存在速度慢的缺陷,但是由于单片机软件开发较为简单,实现方式比较灵活,因此用单片机来制作一些硬盘固件级维修工具是比较经济可行的,利用SD卡存取要操作的固件数据,通过SPI接口连接到单片机,通过串口发送指令,将是一个非常经济实用的方案。
关于达思科技
达思科技的全称是达思凯瑞技术(北京)有限公司,是数据恢复行业的著名品牌,在全国乃至整个亚洲地区具有较高的知名度。达思科技是一家真正掌握数据恢复核心技术的企业,公司的数据恢复技术研发中心不但承担公司自主知识产权数据恢复软件的研发任务,还为众多大型企事业单位担当数据安全顾问的角色。达思科技对数据恢复技术的深入研究,尤其在Unix及Linux大型存储设备的数据恢复方面(包括EXT3文件系统删除数据、UFS文件系统数据恢复、XFS文件系统数据恢复技术、IBM-AIX JFS2文件系统数据恢复高端技术、Vmware虚拟机数据恢复技术等)独树一帜,在同行业中具有较为明显的优势,达思科技承接的其他公司无法恢复的疑难案例不计其数。
达思科技数据恢复技术研发中心于2009年10月启动了科技创新计划,陆续发布了多款自主软件产品。截止到2013年12月,达思科技自主知识产权的数据恢复软件达到23款,其中Unix和Linux企业级数据恢复技术以及手机等移动终端数据恢复技术国际领先!
达思科技职业院校数据恢复实训室是国内职业院校的首选,已经在多家学校正式运营,其中北京劳动保障职业学院、北京政法职业学院、北京商贸学校等中高职均采用达思数据恢复实训室,开设了数据恢复专业课程。开展了深度校企合作,深受师生青睐。
达思数据恢复实验室解决方案是多家涉密单位和科研机构指定建设单位,达思科技具备大型、中型和小型数据恢复实验室设计与建设的能力,为涉密单位提供了安全保密数据恢复实验室,为数据安全筑起最后一道防线。典型成功案例有天津市国家保密局数据恢复实验室项目、总装备部装甲兵工程学院数据恢复实验室项目、中央和国家机关涉密载体销毁中心数据恢复项目等。
达思北京数据恢复中心(全国总部)
数据恢复服务咨询:400-700-0017
数据恢复培训咨询:010-62672127
达思数据恢复软件:010-62670586
达思软件技术支持:010-62670165
达思总部
数据恢复实验室: 010-62672127
数据恢复实训室: 010-62672381
电子取证实验室: 13522681842
软件销售QQ: 151208
远程协助QQ: 12869803
邮件联系:sos@dstchina.cn
邮件支持:support@dstchina.cn
24小时免费电话:400-700-0017
24小时监督电话:13671390603