zhoujianxiu
驱动牛犊
驱动牛犊
  • 注册日期2003-12-24
  • 最后登录2006-04-08
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:985回复:0

那位好心人帮小弟看一看WRITE10程序到底那儿错啦

楼主#
更多 发布于:2004-11-03 13:45
我用D12做了一个移动硬盘,但是WRITE10却怎么也搞不定,程序如下请高手帮忙找下下错,如果能帮助解决问题,愿把全部分数奉上
#include "SCSI.h"
#include "IDE.h"
 

void SCSIWrite10(void)
{
 WORD i;
 BYTE m,n;
xdata struct SCSIWrite10Str *SCSICmdWrite10=SCSICBW->CBWCB;
WORD Length;
bEPPflags.bits.write=1;
Length=SCSICmdWrite10->Length;
  LBA_ADDR=SCSICmdWrite10->LBA;
 
for(i=0;i<Length;i++)
{
  for(m=0;m<8;m++)
{

if(Length<8)
{

if((m==7)&&(i==(Length-1)))
{
SCSICSW->dSignature=0x55534253;
SCSICSW->dTag=bEPPflags.bits.dTag;
SCSICSW->dDataResidue=0;
SCSICSW->bStatus=0;
D12_WriteEndpoint(5,13,(BYTE*)SCSICSW);

}
}

else
{
if((m==7)&&((i+1)%8==0))
{
// printf("*OK1\n");
SCSICSW->dSignature=0x55534253;
SCSICSW->dTag=bEPPflags.bits.dTag;
SCSICSW->dDataResidue=0;
SCSICSW->bStatus=0;
// while(bEPPflags.bits.ep2_trandone!=1);
// DISABLE;
bEPPflags.bits.ep2_trandone=0;
ENABLE;
D12_WriteEndpoint(5,13,(BYTE*)SCSICSW);
/ }
}

while(bEPPflags.bits.ep2_rxdone!=1);
DISABLE;
bEPPflags.bits.ep2_rxdone = 0;
ENABLE;  
// printf("M%02bx\n",m);
for(n=0;n<64;n++)
{
BUFFER[n+m*64]=EpBuf[n];
  }
*((unsigned char xdata *)D12_COMMAND) = 0xf2;
}
// IDEWriteSector();
LBA_ADDR++;
 
}
   bEPPflags.bits.write=0;

}

游客

返回顶部