环境:
vxWorks5.5.1
CF卡驱动使用ideDrv.c
原因:
应该是ideDrv.c不支持LBA。
CF卡应该是同时支持LBA和NORMAL模式,Windows XP按LBA模式对CF进行分区等操作,而ideDrv.c按NORMAL模式进行分区。
查了ATA规范,ATA-1就已经支持LBA,因此ideDrv.c应该是支持ATA规范发布前的IDE设备。
ataDrv.c支持LBA,在初始化阶段,确定ATA设备是否支持LBA。具体请参考代码和注释,文件头注释有详细说明。
今天如果有时间,我在标准单板上用ataDrv.c测试CF卡,看是否OK?尽快给出一个结果。
附录:
Q:BIOS 设置中,硬盘的“NORMAL”“LBA”“LARGE”模式各是什么意思?
A:NORMAL 普通模式是最早的 IDE 方式,在硬盘访问时,BIOS 和 IDE 控制器对参数不做任何转换。该模式支持的最大柱面数为 1024,最大磁头数为 16,最大扇区数为 63,每扇区字节数为 512,因此支持最大硬盘的容量为:512x63x16x1024=528MB。在此模式下,硬盘的实际物理容量再大,也只能用到其中的 528M。
LBA(Logical Block Addressing)逻辑块寻址模式。管理的硬盘空间可达 8.4GB。在 LBA 模式下,设置的柱面、磁头、扇区等参数并不是实际硬盘的物理参数。在访问硬盘时,由 IDE 控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的物理地址。在 LBA 模式下,可设置的最大磁头数为 255,其余参数与普通模式相同,由此可以计算出可访问的硬盘容量为:512x63x255x1025=8.4GB。不过现在新主板的 BIOS 对 INT13 进行了扩展,使得 LBA 能支持 100GB 以上的硬盘。
LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。
在这三种硬盘模式中,现在 LBA 模式使用最多。
阅读(1943) | 评论(0) | 转发(0) |