usb 数据传输调度解析

1、ohci

基于OHCI的USB主机 —— OHCI(HCCA)_Rainman的技术博客_51CTO博客

如何调度USB事务 - 爱码网

s3c2440的USB主机控制器_zhaocj的博客-CSDN博客

1.1、ED

 驱动ohci.h对ed结构定义:

struct ed {
	__hc32			hwINFO;      /* endpoint config bitmap */
	__hc32			hwTailP;	/* tail of TD list */
	__hc32			hwHeadP;	/* head of TD list (hc r/w) */
	__hc32			hwNextED;	/* next ED in list */

	/* rest are purely for the driver's use */
	dma_addr_t		dma;		/* addr of ED */
	struct td		*dummy;		/* next TD to activate */
	struct ed		*ed_next;	/* on schedule or rm_list */
	struct ed		*ed_prev;	/* for non-interrupt EDs */
	struct list_head	td_list;	/* "shadow list" of our TDs */
	struct list_head	in_use_list;
	u8			state;		/* ED_{IDLE,UNLINK,OPER} */
	u8			type;		/* PIPE_{BULK,...} */
	u8			branch;
	u16			interval;
	u16			load;
	u16			last_iso;	/* iso only */
	u16			tick;
	unsigned		takeback_wdh_cnt;
	struct td		*pending_td;


} __attribute__ ((aligned(16)));

hc只会读取ed的前四个字段的数据,后面的字段用于hcd(主机控制器驱动),也就是hc在给ed分配的一块大的内存中,只读取约定的开头前16个字节的数据。

1.2、TD

驱动ohci.h对td结构定义:

struct td {
	/* first fields are hardware-specified */
	__hc32		hwINFO;		/* transfer info bitmask */
	__hc32		hwCBP;		/* Current Buffer Pointer (or 0) */
	__hc32		hwNextTD;	/* Next TD Pointer */
	__hc32		hwBE;		/* Memory Buffer End Pointer */
#define MAXPSW	2
	__hc16		hwPSW [MAXPSW];

	/* rest are purely for the driver's use */
	__u8		index;
	struct ed	*ed;
	struct td	*td_hash;	/* dma-->td hashtable */
	struct td	*next_dl_td;
	struct urb	*urb;

	dma_addr_t	td_dma;		/* addr of this TD */
	dma_addr_t	data_dma;	/* addr of data it points to */

	struct list_head td_list;	/* "shadow list", TDs on same ED */
} __attribute__ ((aligned(32)));	/* c/b/i need 16; only iso needs 32 */

相同的,hc只会读取td的前四个字段的数据,后面的字段用于hcd(主机控制器驱动),也就是hc在给td分配的一块大的内存中,只读取约定的开头前16个字节的数据

2、ehci

基于EHCI协议的USB2.0主机传输调度的设计与实现 - 道客巴巴

linux ehci ehci_urb_enqueue之qh_urb_transaction()分析 【史上最强大分析】_CH_Qing的博客-CSDN博客

 2.1、流程简述:

 

2.2、参考文章:

基于EHCI协议的USB2.0主机传输调度的设计与实现 - 道客巴巴

linux ehci ehci_urb_enqueue之qh_urb_transaction()分析 【史上最强大分析】_CH_Qing的博客-CSDN博客

 

3、usb事务传输:

Linux usb子系统(一):子系统架构 - 爱码网

(转)linux设备驱动之USB数据传输分析 二 - 我有一壶酒 - 博客园

4、端点:

   USB设备控制器端点缓冲区的优化技术 - 接口/总线/驱动 - 电子发烧友网

   摘抄:从物理层的角度来看,端点是一块存储器区域(FIFO),用以缓冲实际接收到或待发送的数据包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值