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

帮忙看一下read函数

楼主#
更多 发布于:2004-05-11 10:51
unsigned char CF_READ()
{
MassStorageCBW.dCBW_Signature=CBW_SIGNATURE;
MassStorageCBW.dCBW_Tag=0x60a624de;
MassStorageCBW.dCBW_DataXferLen=para[2]*512;
MassStorageCBW.bCBW_Flag=0x80;
MassStorageCBW.bCBW_LUN=0;//要修改
MassStorageCBW.bCBW_CDBLen=sizeof(READ_RBC);//0x0C
/////////////////////////////////////
MassStorageCBW.cdbRBC.READ_RBC.OperationCode=read10;//28H
MassStorageCBW.cdbRBC.READ_RBC.VendorSpecific=0;//需要修改
MassStorageCBW.cdbRBC.READ_RBC.LBA.LBA_W8.LBA_3=para[6];
MassStorageCBW.cdbRBC.READ_RBC.LBA.LBA_W8.LBA_2=para[5];
MassStorageCBW.cdbRBC.READ_RBC.LBA.LBA_W8.LBA_1=para[4];
MassStorageCBW.cdbRBC.READ_RBC.LBA.LBA_W8.LBA_0=para[3];
MassStorageCBW.cdbRBC.READ_RBC.XferLength=para[2];
//////////////////////////////////////
if(!BULK_Transfer_OUT((unsigned char *)&MassStorageCBW,sizeof(MassStorageCBW)))
return FALSE;
DelayMs(5);
//len=36;
if(!BULK_Transfer_IN(BX,(para[2]*512)))//接收数据,BX=Adress of Buffer,接收数据长度,para[2]扇区数
return FALSE;
//DelayMs(1);
if(!BULK_Transfer_IN((unsigned char *)&MassStorageCSW,13))
return FALSE;
/////////////////////////////
return TRUE;
}
/*注释
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)
*/
这样写有没有问题?
还有我的程序并没有判断CSW字段,实际工作中,是不是要检查一下CSW内容?

技术交流:aasa2@21cn.com QQ群:10863699
游客

返回顶部