⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_hcd.c

📁 一个USB主机核的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;

	/* read capacity */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = ReadCapacity;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* DATA */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[4];
	urb->DataLength = 8;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[5];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;

	/* mode sense */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = ModeSense;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* DATA */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[6];
	urb->DataLength = 8;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[7];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;

	/* test unit ready */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = TestUnitReady;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[8];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;

	/* request sense */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = RequsetSense;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* DATA */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[9];
	urb->DataLength = 18;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[10];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;


	/* read LBA16 */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = ReadLBA16;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* DATA */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = buffer;
	urb->DataLength = 8192;
	urb->IsUseDMA = UDISK_BULK_DMA_EN;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[12];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
	if (HciSendUrb(urb) != NO_ERROR)
		return FALSE;

	/* write LBA0 */
	/* CBW */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_OUT_EPNUM;
	urb->Direction = USB_DIR_OUT;
	urb->SetupPacket = NULL;
	urb->DataBuffer = WriteLBA16;
	urb->DataLength = 31;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
//	if (HciSendUrb(urb) != NO_ERROR)
//		return FALSE;
	/* DATA */
//	urb->Ed = bulkOutEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = buffer;
	urb->DataLength = 8192;
	urb->IsUseDMA = UDISK_BULK_DMA_EN;
	urb->Err = NO_ERROR;
//	if (HciSendUrb(urb) != NO_ERROR)
//		return FALSE;
	/* CSW */
//	urb->Ed = bulkInEd;
	urb->EndPointNum = UDISK_BULK_IN_EPNUM;
	urb->Direction = USB_DIR_IN;
	urb->SetupPacket = NULL;
	urb->DataBuffer = val[13];
	urb->DataLength = 13;
	urb->IsUseDMA = 0;
	urb->Err = NO_ERROR;
//	if (HciSendUrb(urb) != NO_ERROR)
//		return FALSE;

	return TRUE;
}

#endif



volatile OTG_REG XDATA	*otg = (volatile OTG_REG XDATA	*)OTG_REG_ADDR;

#ifdef PPP

int
main(void)
{
	VOID	XDATA	*hci;
	URB		XDATA	urb;
	HC_RH_PORT	XDATA	*port;
	BOOL	flag = 1;

	/* init OTG into host mode */
	OpenSysTime();

	hci = AllocHci();
	OpenHci(hci);

	port = &hci->Port[0];
	while(1)
	{
		HciPollRootHub(hci);
		if (port->IsChange)
		{
			if (port->IsConnect)
			{
				urb.HcPriv = hci;

				urb.FuncAddr = 0;
				urb.EndPointNum = 0;
				urb.TransferType = USB_ENDPOINT_XFER_CONTROL;
				urb.Direction = USB_DIR_IN;
				urb.MaxPacketSize = 8;
				urb.Interval = 0;
				
				if (!TestUdiskCtrl(&urb))
					flag = 0;
			}
			else if (!port->IsConnect)
			{
				flag = 1;
			}
		}
		else if (port->IsConnect)
		{
			if (!TestUdiskBulk(&urb, (BYTE XDATA *)0xB000))
			{
				flag = 0;
			}
		}
	}

}

#endif

DWORD	XDATA	gCnt = 0;

int
main(void)
{
	VOID	XDATA	*usb;
	VOID	XDATA	*hub;
	DWORD			a, b;
//	WORD	DATA	i;
	BYTE			err;
	
	/* init OTG into host mode */
	OpenSysTime();

	usb = AllocUsbBus();
	OpenUsb(usb);

	hub = AllocHub();
	OpenHub(hub, usb);
	
	a = GetSysTime();
	while(1)
	{
		HubPoll(hub);

		if (GetStorLun() != 0)
		{
//			a = GetSysTime();
//			for (i = 0; i < 1000; ++i)
				gCnt++;
				err = StorReadBlock(0, 0, 0xB000, 8);
				if (err != 0)
				{
					b = GetSysTime();
					b = b - a;
					a = err;
				}
//			b = b - a;
//			ApplyREQ();
//			ReleaseREQ();
		}
	}

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -