/******************************************************************************* * Function Name : SCSI_Write10_Cmd * Description : SCSI Write10 Command routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void SCSI_Write10_Cmd(uint8_t lun , uint32_t LBA , uint32_t BlockNbr) { if (Bot_State == BOT_IDLE) { if (!(SCSI_Address_Management(CBW.bLUN, SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/ { return; } if ((CBW.bmFlags & 0x80) == 0) { Bot_State = BOT_DATA_OUT; #ifndef STM32F10X_CL SetEPRxStatus(ENDP2, EP_RX_VALID); #endif /* STM32F10X_CL */ } else { Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } return; } else if (Bot_State == BOT_DATA_OUT) { Write_Memory(lun , LBA , BlockNbr); } }
/******************************************************************************* * Function Name : SCSI_Write10_Cmd * Description : SCSI Write10 Command routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void SCSI_Write10_Cmd(u32 LBA , u32 BlockNbr) { if (Bot_State == BOT_IDLE) { if (!(SCSI_Address_Management(SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/ { return; } if ((CBW.bmFlags & 0x80) == 0) { Bot_State = BOT_DATA_OUT; SetEPRxStatus(ENDP2, EP_RX_VALID); } else { Bot_Abort(DIR_IN); Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND); Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE); } return; } else if (Bot_State == BOT_DATA_OUT) { Write_Memory(LBA , BlockNbr); } }