EDN首页   博客首页

日志档案

发表于 2008-7-25 12:52:21

2

标签: usb  协议层  

USB协议层 --1

 注: 原发表于21ic的读书笔记中,后来发现二姨经常关门,所以现在打算把那边原来的慢慢搬过来,并整理一下,另EDN有一个博客备份,应该可以把以前写的东西都存在电脑上。


如题,边实践边学习,这样才不会空洞.
解析协议,我喜欢从数据流来查,一点一点的来,
位序:  USB的位序为LSB,低位在前;
同步字段,就当是一个包的起始标志吧,不用太在意;
物理数据流的 "NRZI编码和位填充NRZI编码和位填充"也先不考虑了,这些多在IC内部实现了,
(除非你老板让你自己写一个软USB,否则不用看了)
同步字段后就是包标识符PID,  (LSB)PID0|PID1|PID2|PID3|PID0|PID1|PID2|PID3(MSB)

                             由上可知,PID自身有补码校验,

PID表明了包的类型,按我自己的习惯来记吧;
8,9,A,B都属于Token包;
          ----8: OUT,  9: IN,   A: SOF,   B: SETUP

C,D,E,F都属于数据包;
         ----C: Data packet PID even,  D: Data packet PID odd
         ----E,F,isochronous transaction  暂不考虑

4,5,6,7都属于握手包;
        ----4: ACK    5: NAK    7: STALL    6: NYET

0,1,2,3属于特殊包;--------其中0为系统自己保留使用的;
       -----2: PING   1: SPLIT  3: ERR/PRE

地址段,了解一下就知道了,每个设备在host那有唯一的地址,共可128个设备,(当然为7位长),如下:(LSB)PID0|PID1|PID2|PID3|PID4|PID5|PID6|(MSB)

所有的功能部件都必须在端口0提供一个控制管道(缺省控制管道)。对于低速(Low Speed)设备,每个功能部件最多提供3个管道:在端口0的控制管道加上2个附加管道(或是2个控制管道,或是1个控制管道和1个中断端口,或是2个中断端口)。全速(Full Speed)功能部件可以支持最多可达16个的任何类型的端口,定义如下:

(LSB)ENDP0|ENDP1|ENDP2|ENDP3|(MSB)

数据字段可以在01,023字节之间变动,但必须是整数个字节。图8-4为多字节显示格式。每个字节的范围内的数据位移出时都是最低位(LSb)在前.

包格式 主要有:标记包,数据包和握手包
标记包:        PID |  ADDR   |  ENDP   |  CRC5
数据包:        PID |  DATAx..........  |  CRC16
握手包:        PID

特殊的标记包稍后考虑:SPLIT主要用于HOST与HUB之间通信;

先记到这吧,待续

系统分类: 通信网络   |   用户分类: 嵌入式   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(377)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • walnutcy

    2008-9-10 22:17:42

    posted @ Walter 发表于 2008-5-11 9:50:00 阅读全文(1486) | 回复(4) |反映问题 | 引用通告(0) ---------21ic里访问量与这里的差别挺大,且这篇在这连精华都没上,怪怪的。 不同的文章在不同的地方有效吧。

  • walnutcy

    2008-9-10 22:18:21

    当时搬家,就把这个也转过来了。