13年3个月前IP:未同步
646459
97楼
本帖最后由 神之觉醒 于 2013-9-29 12:57 编辑

IDE硬盘.jpg

手上的两个IDE硬盘,80G和40G,IED接口最多可以挂两个硬盘,要是两个都上的话耗电比较大,担心电源会爆炸;

下面是本机I/O空间地址和IDE硬盘寄存器的对应关系:


                                                              
                                                                        
FF10H读: 数据寄存器低8位(D0~D7)                    
FF10H写: 数据寄存器低8位(D0~D7)
FF11H读: 错误寄存器                                
FF11H写: 特征寄存器
FF12H读: 扇区计数寄存器                              
FF12H写: 扇区计数寄存器
FF13H读: 扇区号或LBA块地址7~0                                      
FF13H写: 扇区号或LBA块地址7~0
FF14H读: 磁道数低8位或LBA块地址15~8                            
FF14H写: 磁道数低8位或LBA块地址15~8
FF15H读: 磁道数高8位或LBA块地址23~16                        
FF15H写: 磁道数高8位或LBA块地址23~16
FF16H读: 驱动器/磁头或LBA块地址27~24                          
FF16H写: 驱动器/磁头或LBA块地址27~24
FF17H读: 状态寄存器                                  
FF17H写: 命令寄存器
FF1DH读: 数据寄存器高8位(D15~D8)                    
FF1DH写: 数据寄存器高8位(D15~D8)
FF1EH读: 交换状态寄存器(只读寄存器)                          
FF1EH写: 设备控制寄存器(复位)
FF1FH读: 驱动器地址寄存器
FF1FH写: ?                                              


硬盘读写请参看这里的资料(摆渡谷哥): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在本机,读写IDE用PIO方式;寻址用LBA(扇区)方式;

写1个扇区案例: 要写入数据到扇区1,查询状态寄存器的第7位(最高位),为1表示IDE忙,为0时可以操作,在FF12H、FF13H、FF14H、FF15H、FF16H分别写入01H、01H、00H、00H、E0H(如果操作从盘写F0H),查询状态寄存器的第6位,为1时,可以发送写命令 命令寄存器写入30H,这个时候硬盘灯点亮,接着查询状态寄存器的第3位,为1则可以写入扇区的数据;必须先把高8位数据写入FF1DH,然后低8位数据写入FF10H,在写入第512个字节,硬盘灯灭,操作完成;

读1个扇区案例: 要从读出扇区1数据,查询状态寄存器的第7位(最高位),为1表示IDE忙,为0时可以操作,在FF12H、FF13H、FF14H、FF15H、FF16H分别写入01H、01H、00H、00H、E0H(如果操作从盘写F0H),查询状态寄存器的第6位,为1时,可以发送读命令 命令寄存器写入20H,这个时候硬盘灯点亮,接着查询状态寄存器的第3位,为1则可以读出扇区的数据;必须先从FF10H读出低8位,然后再从FF1DH读出高8位,在读出第511个字节时硬盘灯灭,然后第512字节从FF1DH读出;

扇区计数寄存器为连续读写扇区的个数,如果需要连续读写N个扇区,就写入N~




    
评论
文号 / 646459

千古风流
名片发私信
学术分 4
总主题 71 帖总回复 1168 楼拥有证书:学者 机友 笔友
注册于 2011/08/12 17:13:20最后登录 2022/12/22 11:43:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的