aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
阅读:1081回复:1

read10

楼主#
更多 发布于:2004-05-10 16:56
老师提供的资料(51+Sl811,读写CF卡)
INPUT
PARA. FOR FUNCTION
para[7]=0 init CF card
para[7]=1 read the status of CF card
para[7]=2 read data from CF card to buffer(LBA)
para[7]=3 write data to CF card           (LBA)
para[7]=4 verify sector
para[7]=82h read data from CF card to buffer(non LBA)
para[7]=83h write data to CF card           (non LBA)
para[7]=5 format cf card
para[7]=6 identify drive
PARA. FOR READ/WRITE/FORMAT
para[1]=feature
para[2]=Sector Count
para[3]=Sector Number(LBA 7-0)
para[4]=Cylinder Low (LBA 15-8)
para[5]=Cylinder High (LBA 23-16)
para[6]=Head          (LBA 27-24)

BX=Adress of Buffer
OUTPUT
Function Return status of operation
CY=0 successful of operation
CY=1 failed operation

unsigned char CF_IO()
{
  switch(para[7])
  {
   case 0: CF_INIT();break;
   case 1: return cf_status;
   case 2: CF_READ();break;
   case 3: CF_WRITE();break;
   case 4: CF_VERIFY();break;
   case 5: CF_FORMAT();break;
   case 6: CF_IDENTIFY();break;
   default:{cf_status=bad_cmd;CY=1;return cf_status;}/*bad_cmd equ 1 */
  }
 if(cf_status>=1) CY=1;
 return cf_status;
}
程序中 CF_READ()和我写的程序 READ10() 有什么区别?
我想CF_READ()应该和我的READ10()差不多吧!
unsigned char READ10()
{
MassStorageCBW.dCBW_Signature=CBW_SIGNATURE;
MassStorageCBW.dCBW_Tag=0x60a624de;
MassStorageCBW.dCBW_DataXferLen=?
MassStorageCBW.bCBW_Flag=0x80;//从机到主机
MassStorageCBW.bCBW_LUN=?;
MassStorageCBW.bCBW_CDBLen=0x0C;
////////////////////////////////////////////
MassStorageCBW.cdbRBC.READ10.OperationCode=READ;//28H
其他值.............
     LBA之不能确定?
    ////////////////////////////////////////////
if(!BULK_Transfer_OUT((unsigned char *)&MassStorageCBW,sizeof(MassStorageCBW)))
return FALSE;
DelayMs(5);
if(!BULK_Transfer_IN(pBuffer,......))//需要修改
return FALSE;
if(!BULK_Transfer_IN((unsigned char *)&MassStorageCSW,13))
return FALSE;
return TRUE
}
还有几个参数我不能确定:LUN是多少?
                      CBW中dCBWDataTransferLength不能确定?。
                      para[3] para[4] para[5]和para[6]与LBA是什么关系?我搞不懂。
技术交流:aasa2@21cn.com QQ群:10863699
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-10 17:17
lun是盘符,0就可
dCBWDataTransferLength指需要返回的bytes数目
para3-6在LBA寻址时,就是LBA的位置。否则就是由磁头、柱面、扇区去寻址。在DEVICE寄存器中决定哪中方式寻址。


游客

返回顶部