📄 test_host.c
字号:
/* wait DMA unload data */
while(1)
{
temp1 = ReadOTGReg32(otg_DMA_Intr);
if ((temp1 & DMA_Intr_Ch1) != 0)
break;
}/* end while */
ClrBitOTGReg32(otg_DMA_Ctrl, (DMA_Ctrl_EnDMA | DMA_Ctrl_Mode | DMA_Ctrl_IntrEn));
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, (RxCSR_hrw_AutoClear | RxCSR_hrw_AutoReq | RxCSR_hrw_DMAReqEnab | RxCSR_hrw_DMAReqMode)); //config RXCSR
/* check CSR response */
temp = ReadOTGReg16(otg_IndexedCSR_RxCSR);
if ((temp & RxCSR_hrc_RxStall) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_RxStall); /* get STALL response */
return FALSE;
}
else if ((temp & RxCSR_hrc_Error) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_Error); /* get ERROR response */
return FALSE;
}
else if ((temp & RxCSR_hrc_DataError_NAKTimeout) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_DataError_NAKTimeout); /* get NAK timeoue response */
return FALSE;
}
else
{
// ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_RxPktRdy);
// *length = 8192;
return TRUE; /* no STALL, ERROR, NAKTimeout */
}
}
extern BOOL
TestOTGInterruptOutTransaction(
BYTE endPointNum,
BYTE *dat,
WORD length
)
{
WORD temp;
/* set endpoint number */
WriteOTGReg8(otg_CommonUSB_Index, endPointNum);
/* load data into FIFO */
LoadFIFOData((BYTE *)&otg_EndpointFIFO[endPointNum], dat, length);
/* send out token */
SetBitOTGReg16(otg_IndexedCSR_TxCSR, TxCSR_hrs_TxPktRdy);
/* Wait EndPoint Tx interrupt */
while(1)
{
// temp = ReadOTGReg16(otg_CommonUSB_IntrTx);
// if ((temp & (0x0001 << endPointNum)) != 0)
// break;
temp = ReadOTGReg16(otg_IndexedCSR_TxCSR);
if ((temp & TxCSR_hrs_TxPktRdy) == 0)
break;
}/* end while */
/* check CSR response */
if ((temp & TxCSR_hrc_RxStall) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_TxCSR, TxCSR_hrc_RxStall); /* get STALL response */
return FALSE;
}
else if ((temp & TxCSR_hrc_Error) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_TxCSR, TxCSR_hrc_Error); /* get ERROR response */
return FALSE;
}
else if ((temp & TxCSR_hrc_NAKTimeout_IncompTx) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_TxCSR, TxCSR_hrc_NAKTimeout_IncompTx); /* get NAK timeoue response */
return FALSE;
}
else
{
return TRUE; /* no STALL, ERROR, NAKTimeout */
}
return TRUE;
}
extern BOOL
TestOTGInterruptInTransaction(
BYTE endPointNum,
BYTE *dat,
WORD *length
)
{
WORD temp;
/* set endpoint number */
WriteOTGReg8(otg_CommonUSB_Index, endPointNum);
/* send in token */
SetBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrw_ReqPkt);
/* Wait EndPoint Rx interrupt */
while(1)
{
// temp = ReadOTGReg16(otg_CommonUSB_IntrRx);
// if ((temp & (0x0001 << endPointNum)) != 0)
// break;
temp = ReadOTGReg16(otg_IndexedCSR_RxCSR);
if ((temp & RxCSR_hrc_RxPktRdy) != 0)
break;
}/* end while */
/* check CSR response */
if ((temp & RxCSR_hrc_RxStall) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_RxStall); /* get STALL response */
return FALSE;
}
else if ((temp & RxCSR_hrc_Error) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_Error); /* get ERROR response */
return FALSE;
}
else if ((temp & RxCSR_hrc_DataError_NAKTimeout) != 0)
{
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_DataError_NAKTimeout); /* get NAK timeoue response */
return FALSE;
}
else
{
temp = ReadOTGReg16(otg_IndexedCSR_RxCount);
UnloadFIFOData((BYTE *)&otg_EndpointFIFO[endPointNum], dat, temp);
ClrBitOTGReg16(otg_IndexedCSR_RxCSR, RxCSR_hrc_RxPktRdy);
*length = temp;
return TRUE; /* no STALL, ERROR, NAKTimeout */
}
}
extern BOOL
TestOTGHostBulkTransfer(
BOOL isHS
)
{
static BYTE CODE Inquiry[] = {0x55, 0x53, 0x42, 0x43, 0x68, 0x75, 0x95, 0x82, 0x24, 0x00, 0x00, 0x00,
0x80, 0x00, 0x06, 0x12, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
#if !TEST_HCD_EN
static BYTE CODE ReadFmtCapacity[] = {0x55, 0x53, 0x42, 0x43, 0x18, 0xDD, 0xBF, 0x82, 0xFC, 0x00, 0x00, 0x00,
0x80, 0x00, 0x0A, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
static BYTE CODE RequsetSense[] = {0x55, 0x53, 0x42, 0x43, 0x08, 0x60, 0xA3, 0x82, 0x12, 0x00, 0x00, 0x00,
0x80, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
static BYTE CODE ReadCapacity[] = {0x55, 0x53, 0x42, 0x43, 0x28, 0x65, 0x9F, 0x82, 0x08, 0x00, 0x00, 0x00,
0x80, 0x00, 0x0A, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
#endif
static BYTE CODE ReadLBA[] = {0x55, 0x53, 0x42, 0x43, 0x28, 0x65, 0x9F, 0x82, 0x00, 0x02, 0x00, 0x00,
0x80, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
// static BYTE CODE ReadLBA[] = {0x55, 0x53, 0x42, 0x43, 0x28, 0x65, 0x9F, 0x82, 0x00, 0x20, 0x00, 0x00,
// 0x80, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
#if !TEST_HCD_EN
static BYTE CODE ModeSense[] = {0x55, 0x53, 0x42, 0x43, 0x08, 0x20, 0xBD, 0x82, 0xC0, 0x00, 0x00, 0x00,
0x80, 0x00, 0x06, 0x1A, 0x00, 0x1C, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
static BYTE CODE TestUnitReady[] = {0x55, 0x53, 0x42, 0x43, 0x08, 0x90, 0x91, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
#endif
static BYTE CODE WriteLBA[] = {0x55, 0x53, 0x42, 0x43, 0x28, 0x65, 0x9F, 0x82, 0x00, 0x02, 0x00, 0x00,
0x80, 0x00, 0x0A, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
// static BYTE CODE WriteLBA[] = {0x55, 0x53, 0x42, 0x43, 0x28, 0x65, 0x9F, 0x82, 0x00, 0x20, 0x00, 0x00,
// 0x80, 0x00, 0x0A, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,};
#if TEST_INTERRUPT_XFER_EN
// static BYTE CODE DVDataOut1[] = {0x01, 0x00, 0x00, 0x00,};
// static BYTE CODE DVDataOut2[] = {0x07, 0x01, 0x00, 0x01, 0x00,};
static BYTE CODE WifiDataOut1[] = {0x22, 0x00, 0x1D, 0xEE, 0x1E, 0xEE,};
static BYTE CODE WifiDataOut2[] = {0x22, 0x00, 0x1B, 0xF8, 0x1C, 0xF8,};
#endif
BYTE XDATA val[20][64];
BYTE XDATA buffer[512];
#if !TEST_HCD_EN
WORD length;
BYTE i;
WORD temp;
#endif
#if TEST_HCD_EN
URB urb;
isHS = isHS;
/* inquiry */
/* CBW */
urb.FuncAddr = 1;
urb.EndPointNum = 3;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_OUT;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = Inquiry;
urb.DataLength = 31;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* DATA */
urb.FuncAddr = 1;
urb.EndPointNum = 2;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_IN;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = val[0];
urb.DataLength = Inquiry[19];
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* CSW */
urb.FuncAddr = 1;
urb.EndPointNum = 2;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_IN;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = val[1];
urb.DataLength = 13;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* read LBA0 */
/* CBW */
urb.FuncAddr = 1;
urb.EndPointNum = 3;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_OUT;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = ReadLBA;
urb.DataLength = 31;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* DATA */
urb.FuncAddr = 1;
urb.EndPointNum = 2;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_IN;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = buffer;
urb.DataLength = 512;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* CSW */
urb.FuncAddr = 1;
urb.EndPointNum = 2;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_IN;
urb.MaxPacketSize = 64;
urb.Interval = 0;
// urb.FIFOSize = 512;
urb.SetupPacket = NULL;
urb.DataBuffer = val[2];
urb.DataLength = 13;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* write LBA0 */
/* CBW */
urb.FuncAddr = 1;
urb.EndPointNum = 3;
urb.TransferType = USB_ENDPOINT_XFER_BULK;
urb.Direction = USB_DIR_OUT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -