你的代码我看了的,但是还是不是很懂的。
void endp2_out(void) //主端点输出处理 { if(SCSI.Status.Command) { if(read_endpoint_buff(4,sizeof(CBW),(unsigned char *)(&cbw))!=sizeof(CBW)){error(2);return;} if(cbw.dCBWSignature!=0x55534243){error(3);return;} SCSI.Status.Command=0; SCSI.Status.Data=1; if(cbw.bmCBWFlags&0x80) { usb_flags.flags.usb_endp2_in=1; usb_flags.flags.usb_endp2_out=0; } else { usb_flags.flags.usb_endp2_in=0; usb_flags.flags.usb_endp2_out=1; switch(cbw.CBWCB[0]) { case Write_10: write_10();break; case Test_Unit_Ready: Return_CSW(0x00,SUCCESS);break; case Verify: Return_CSW(0x00,SUCCESS);break; default : Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break; } } } else { read_last_status(4); select_endpoint(4); clear_buffer(); } }
|