文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>随笔

随笔

时间:2010-03-31  来源:donotgiveup

学习USB已经几次了,每次都半途而废。原因分析: 1 概念学习不扎实 http://wenku.baidu.com/view/b7174628915f804d2b16c1d0.html介绍了usb的常用的概念 2 没有自己去动手 应该选择一个容易模拟的环境,例如2440开发板上,你实现Linux下从设备。 或者在2440开发板上,使用ucos,实现从设备的功能。 关键:找到一个可用的例子。 如果有一个入门的例子,就好了。   网上搜索了一下,有很多2410的例子。 OHCI(open host controller interface) 在这个网址有《Linux设备驱动开发乡街》的电子版(http://book.51cto.com/art/200803/66929.htm   USB数据格式 域(七种)=>包=>事务(IN,OUT,SETUP)=>传输(控制、中断、批量、并行/分时) ==域== 1 同步域(SYNC) 0000 0001 用于本地时钟与输入同步 2 标志域(PID)  4位标识符和4位标识符反码构成,表明包的类型和格式,可见有16种包 3 地址域(ADDR) 七位地址,代表了设备在主机上的地址,0000 0000是零地址,是任何设备被主机配置,               枚举之前的默认地址,由此可知usb只能连接127个设备 4 端点域(ENDP) 4位,由此可知一个USB设备的端点最大为16个 5 帧号域(FRAM) 11位,2^11为2K,共0x800,。对于同步传输很重要。 6 数据域(DATA) 长度为0~1023字节 7 校验域(CRC)  对令牌包和数据包中非PID域进行校验的一种方法   ==包== 令牌包      输入包|输出包|设置包      SYNC+PID+ADDR+ENP+CRC5      帧起始包      SYNC+PID+FRAM+CRC5 数据包      DATA0和DATA1包,两个包是交替的。同步传输除外,在同步传输中,所有的数据包都是DATA0包。      SYNC+PID+CRC16 握手包      SYNC+PID   ==事务== 每一个事务都是由令牌包,数据包,握手包3个阶段组成。    令牌包:启动一个输入,输出或设置的事务    数据包:按输入,输出发送相应的数据    握手包:返回数据接收情况。在同步传输的IN和OUT事务中没有这个阶段。这是比较特殊的。 IN事务    令牌包阶段:         主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据。    数据包阶段:         设备会根据情况作出3种反应         1)设备端点正常,设备向主机发送数据包(DATA0和DATA1交替)         2)设备正在忙,无法向主机发送数据包,就发送NAK无效包。            IN事务提前结束,到下一个IN事务才继续。         3)相应设备端点被禁止,发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。    握手包阶段:         主机正确接收到数据包之后就会像设备就会向ACK数据包。 OUT事务    令牌包阶段:         主机发送一个PID为OUT的输出包给设备,通知设备准备接收数据。    数据包阶段:         比较简单,就是主机向设备发送数据,DATA0和DATA1交替。    握手包阶段:         设备会根据情况作出3种反应         1)设备端点接收正确,设备向主机发送ACK,通知主机可以发送新的数据。            如果发生了CRC校验错误,就不会返回任何握手包。         2)设备正在忙,无法往主机发送数据,就发送NAK数据包,通知主机再次发送数据。         3)相应设备端点被禁止,发送错误包STALL,事务提前结束,总线直接进入空闲状态。 SETUP事务    令牌包阶段:         主机发送一个PID为SETUP的输出包给设备,通知设备准备接收数据。    数据包阶段:         比较简单,就是主机向设备发送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节         就是标准的USB设备请求命令(共有11条)。    握手包阶段:         设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输。         (在SETUP事务之后通常是一个IN或OUT事务构成的传输)   ==传输==    传输有IN,OUT,SETUP这三种事务组成,共有4种类型。    中断传输 批量传输 同步传输 控制传输       中断传输和批量传输的结构一样,同步传输有罪简单的结构,而控制传输是最重要的也是最复杂的传输    1 中断传输      由IN事务和OUT事务构成,用于键盘,鼠标等HID设备的数据传输中。    2 批量传输      由IN事务和OUT事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽-当总线忙时,USB会优先进行其它类型的数据传输,而暂时停止批量传输。    3 同步传输      由OUT事务和IN事务构成,有两个特殊的地方,第一,在同步传输的IN和OUT事务中是没有握手包阶段的。第二,在数据包阶段所有的数据包都为DATA0    4 控制传输      最重要也是最复杂的传输。      控制传输由3个阶段构成(初始设置阶段,可选数据阶段,状态信息步骤),每一个阶段      看成一个传输,也就是说控制传输其实是由3个传输组成的。      USB设备初次接到主机之后,主机通过控制传输来交换信息,设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB开发者都关心的问题。      1 初始设置步骤:就是一个有SETUP事务构成的传输      2 可选数据步骤:就是一个由IN或OUT事务构成的传输,这个步骤是可选的,要看初始设置步骤有没有要求读/写数据(由SETUP事务数据包阶段发送的标准请求命令决定)      3 状态信息步骤:顾名思义,这个步骤就是要获取状态信息,由IN或OUT事务构成的传输,但是要注意这里的IN和OUT事务和之前有两点不同:      1)传输方向相反,通常IN表示设备往主机发送数据,OUT表示主机向设备发送数据,在这里,恰恰相反。      2)在这个步骤里,数据包阶段的数据包都是0长度的,及SYNC+PID+CRC16。      (思考:这些传输模式在实际操作中应如何通过什么方式去设置?)
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载