阅读:985回复:0
那位好心人帮小弟看一看WRITE10程序到底那儿错啦
我用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; } |
|