最近几天做了个CF卡的接口逻辑。是基于 PC Card ATA using Memory Mode 。寻址方式使用LBA方式。逻辑设计完成后通过了功能仿真。但是在实际访问CF卡的时候出现以下问题:
1、写 sector count ,sector number,cylinder low ,cylinder high,drvie/head,寄存器,写入后并读出,发现sector count 不管写任何值,读出均为零,其余的寄存器值正确。但读出状态寄存器未提示错误,并且能返回58H的值。 2、如果向sector count写01h,当然sector count是0h ,所以一次写256个扇区数据,写完之后,读状态寄存器,无法读到50h,,读回的值全是58h。在尝试写512字节。同样读状态寄存器值也是58h。在尝试大于256或大于512,状态返回依然是58h...... 3、尝试写入下列数据,sector count =0, sector number =FFH,cylinder low =FFH,cylinder high=1F,drvie/head=e0;当然sector cout 返回值是0h。返回状态寄器错误,读错误寄存器,返回10h(是未找到sector id);将上边的cylinder high 值改成1eh,得到的结果相同。再将其改成10h,,返回才错误寄存器正确。更多值没有测试(公司机器太破了。QUARTUS 编译一次要花5分钟,还是单核2.4G,,521MB内存,⊙﹏⊙b汗)。 4、CF卡地址理解,,是理解成 sector count*ector number*cylinder low*cylinder high*head=256*256*256*16*512B=136.9GB 还是256*256*64*816*512B=34GB?????还是要经过什么特别的转换。
开发环境: windows xp sp3 开发软件: quartus 7.2 cf卡: transcend 1GB
周末了。。我晚上还要赶到异地,,累啊。。各位大侠的回复我可能不能及时的看到。。在此请大家原谅。
|