中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 请教个ATA 0xec command取出的数据问题
作者:
标题: 请教个ATA 0xec command取出的数据问题 上一主题 | 下一主题
Joyoung
初级用户





积分 48
发帖 18
注册 2008-9-30
状态 离线
『楼 主』:  请教个ATA 0xec command取出的数据问题

代码如下:
unsigned int diskData[256];    /* Disk data */
。。。
。。。
for (offset = 0; offset != 256; offset++)         /* Read "sector" */
      diskData[offset] = inpw(cmdInterface);//此时能成功取得数据

printf("Word[61]:%X, Word[60]:%X\n", diskData[61], diskData[60]);//61:60是number of sectors.如果硬盘大小为80G时,取出的数据是正确的,但如果硬盘是160G/250G/500G时取出的数却都是FFF:FFFF,这肯定有错,但不知问题出在哪里。有哪位高手知道的?谢谢!~~~~

2008-10-29 16:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 2 楼』:  

对于LBA48的硬盘(>137G),该DWORD存放0FFF FFFFH(7个F刚好LBA28),真正的扇区数不放在这里,详细位置我不太记得了,你可以查找一下ATA-ATAPI-5标准(好像是)。直接对硬件编程是个很烦琐的事情,最好的办法是尽可能多找有关的标准文档。
LBA48和LBA28很多ATA命令不一样,而且LBA包的格式也不一样。很多HPA工具用不了也是编写者没考虑到这里的区别的原因造成的。

[ Last edited by netwinxp on 2008-10-29 at 16:39 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 Joyoung 分数: +2  时间:2008-10-29 16:34


2008-10-29 16:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Joyoung
初级用户





积分 48
发帖 18
注册 2008-9-30
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by netwinxp at 2008-10-29 16:27:
对于LBA48的硬盘(>137G),该DWORD存放0FFF FFFFH(7个F刚好LBA28),真正的扇区数不放在这里,详细位置我不太记得了,你可以查找一下ATA-ATAPI-5标准(好像是)。 ...

我看了ATA 6,E文不是很好,没有发现会存在哪,可以麻烦高手帮我看看吗?感激不尽呀

2008-10-29 16:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 4 楼』:  

找IDENTIFY_DEV(0ECH)命令,它会标出在哪里找那256字节的定义。

2008-10-29 16:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Joyoung
初级用户





积分 48
发帖 18
注册 2008-9-30
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by netwinxp at 2008-10-29 16:40:
找IDENTIFY_DEV(0ECH)命令,它会标出在哪里找那256字节的定义。

我看了,好像就是Word60-Word61:Total number of user addressable sectors (LBA mode only),还有一个是Word57-Word58:Current capacity in sectors;其他的好像没有了
ATA 6的SPEC在附件里,高手可否帮忙看看?

附件 1: HDD.rar (2008-10-29 17:36, 9.53 K,下载次数: 28)
2008-10-29 17:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 6 楼』:  

WORD60~61(LBA28)如果为0FFFFFFF就无效。
WORD100~103(LBA48)如果为0000FFFFFFFFFFFF就无效。(PS:目前还没有超过LBA48,所以超过后的定义还没出来)
详看6.2.1。
判断是否支持LBA48看WORD83 BIT10,这个值只是BIOS能返回的最大容量(不含HPA)。
真正的硬盘容量(含HPA部分)使用READ_NATIVE_MAX(F8)<LBA28>或READ_NATIVE_MAX_EXT(27)<LBA48>获得。
LZ肯定看得不够仔细,附件就不用下载了,我的PATCH都下载到今年八九月份了。

[ Last edited by netwinxp on 2008-10-29 at 19:36 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 Joyoung 分数: +2  时间:2008-10-29 20:05


2008-10-29 19:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Joyoung
初级用户





积分 48
发帖 18
注册 2008-9-30
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by netwinxp at 2008-10-29 19:04:
WORD60~61(LBA28)如果为0FFFFFFF就无效。
WORD100~103(LBA48)如果为0000FFFFFFFFFFFF就无效。(PS:目前还没有超过LBA48,所以超过后的定义还没出来)
详看6.2.1。
判断是 ...

搞定了,真是太感谢你啦!谢谢!~~~
是用Word[100-103],我的文档是标为红色的,以为是现在不用这区域的了呢,原来是我理解错误啦,唉。。。
PS:READ_NATIVE_MAX(F8)<LBA28>或READ_NATIVE_MAX_EXT(27)<LBA48>这两个函数是Linux下用的吧,DOS下用不了,BC3.1里找不到源码

2008-10-29 20:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by Joyoung at 2008-10-29 20:05:
PS:READ_NATIVE_MAX(F8)<LBA28>或READ_NATIVE_MAX_EXT(27)<LBA48>

晕啊,这是两条ATA命令F8、27,其中F8用在LBA28的场合,27用在LBA48上。它和EC是差不多的冬冬
LZ的大作如果写好了记得拿出来让大家欣赏一下

[ Last edited by netwinxp on 2008-10-30 at 12:50 ]

2008-10-30 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: