对于USB传输大体有个概念,下一步就来看看到底USB上传的什么东西,以什么格式传数据,先不涉及端点的概念。
各种总线的数据传输都是以固定的层次协议进行的,USB当然也不例外。所谓的层次也只是个抽象的概念罢了,就是表达一种依附关系,上层要依赖与底层,上层以底层为基础,上层只需要关心自己的东西就行了,如果你还不明白,那就继续看,学习一个东西不可能一两句话说的明白一个点,需要全面了解后才能清楚各个点。
要实现两个机器(机器的范围比较广,可以是电脑,交换机,单片机)的通信总是要有一个载体才可以,对于机器当然是电平高低为载体,具体的说机器甲要告诉机器乙一件事情(比如说一条指令),那么机器甲可以通过一根线(串行数据总线)连到机器乙的一个IO口上,甲发送一个个的高低电平,乙固定时间检测自己的这个IO口,然后逐个记录下放到自己的缓冲里,这样乙就收到甲送的数据了。上述就是一个简单的数据链路层(计算机网络里这么叫)的描述,这一层要保证的就是甲发的每一位数据,乙都可以正确及时的接受,并且对在传输过程中出错的数据做出反应。其实比数据连路更底层的还有物理层,这就是真正的物理介质,对于机器就是电线了,数据就是电线上传输的电压,USB是用的四线,两个电源,两个数据线。
这里也打个比方,比如人与人进行交流,我们当然是通过说话了,物理层就是空气和传输的声波,数据链路层就是我们说的每一个字,物理层就是空气,负责把我们说的话转换成声波传给对方,数据链路层负责让对方能正确的听到每个字,如果听的不清可以告诉对方重新说一遍。
经过上述的两个底层,就可以保证每一位数据可以正确的传到对方那里去。下一步的工作当然是解析数据代表了什么,一般来说,数据都是以一串数为单位,一般称为一个包,机器间传输都是以一个包为单位传出,就像人们说话都是以一句话为单位输出一样。每一个包包含有许多位数据,这些数据又分段表示不同的意义,如图一,这是一个USB令牌阶段的包,Sync是同步数据(相当于说话时先打个招呼,告诉对方要跟他说话了),PID是包标示(告诉对方这个包是干什么用的),ADDR是对方的地址(叫对方的名字),ENDP是用端点几通讯(先不介绍这个),CRC5是校验位(判断这个包是否在传输中出错),EOP是包结束。
|--------------------------------------------------------|
| Sync | PID | ADDR | ENDP | CRC5 | EOP |
|________________________________________________________|
图一
USB的数据包又分为三种,一个是令牌包,一个是数据包,另一个是握手包。每一次的USB通讯事务处理都是以令牌包开头,告诉对方要跟谁说话,这句话是用来干嘛的。如果要求有数据传输,则下一步就是数据包,另外如果要求对方要有反馈,则会发出握手包。令牌包又简单的包括OUT,IN,STEP三种类型,OUT是用于主机告诉设备主机要向USB设备发送数据,IN是用于主机告诉设备要上传数据,而STEUP是用于主机向USB设备发送配置信息,在枚举过程中会用到。另外数据包和握手包的具体格式什么的,可以参照详细的协议。
可以看到在所以的通讯过程中,主机都是发起者,不管是主机发送数据到USB设备还是USB设备发送数据到主机,都必须收主机控制。图二为一次事务的过程
令牌阶段 ——》 数据阶段 ——》 握手阶段
图二
这个过程可以这样描述,甲和乙对话,甲是老板,乙是职员。第一节已经讲过了,乙面试就是枚举,在这个过程中,甲多段的发送STEP令牌包给乙,乙收到后如果要反馈数据,就发数据包给甲,甲正确接收后,跟甲握握手,表示这次对话成功。
乙被正式录取后,甲会分派任务(OUT),这时甲对乙说有任务给你(令牌阶段),然后乙就开始听,甲说你的任务就是记录数据并且上报(这段话就是数据包),乙说好的(握手包)。
乙开始正式工作,并且记录数据。过了一段时间,甲开始要求提交数据(IN),乙把数据报告给甲(数据阶段),甲说好(握手成功)。这里乙不能主动的去向老板汇报,只能被动的干活。
USB之数据包阐述
- usb(257400)
相关推荐
USB数据包的同步域可以同步主机端和从机端的时钟,这个怎么理解
在看u***,书上说u***数据包的同步域可以同步主机端和从机端的时钟,这个怎么理解u***接口没有时钟线,我又想到了单片机串口的波特率,不知道有没有关系,向大家请教了这个简单的问题,很想知道答案
2019-07-02 18:06:13
USB入门总结(3) 数据包阐述(转载)
||________________________________________________________|图一USB的数据包又分为三种,一个是令牌包,一个是数据包,另一个是握手包。每一次的USB通讯事务处理都是以令牌包开头,告诉对方要跟谁
2011-11-17 08:29:01
USB控制传输间歇性孤立数据包
的转移如UBFultUR.PNG所示。而不是捆绑在一起作为一个单一的控制转移,比格解释它作为两个独立的,不相关的数据包(一个设置TXN和OUT TXN),并检测后续数据包作为孤立的数据包,Beagle
2018-11-06 14:34:12
数据包解密必须要配置哪些
1、数据包解密必须要配置 Netkey,Appkey,Devkey, IV Index的,可以找一下配置接口。2、广播包需要 37,38, 39 三通道同时抓才行,一般使用的是专门的仪器。
2021-07-22 08:04:06
AXI流数据包传输问题
嗨eveyone,我是这个论坛的新人。如果我弄错了,我道歉。我正在尝试使用AXI Stream协议传输数据包。这些数据包包括512 * 32位数据。使用1 kHz时钟使能发送重新生成的数据包。我
2019-04-15 13:51:29
C6678 SRIO数据包接收方式
C6678 SRIO数据包接收有两种方式,一种是DestIDs与DeviceID匹配,另一种是多路径操作,第二种方式如何工作?谢谢,
2018-06-21 01:04:23
CC1101同时接收两个数据包的话,会怎么处理?
CC1101 当有两个数据包同时给一个CC1101,接受侧接受一个数据包之后放在RXfifo内,未读取,第二个数据包可以接受放在上一个数据包RXfifo之后吗?还是将上一个数据包覆盖,还是接收不到?CC1101是怎么处理的?
2016-04-18 15:04:34
CC1101在快速接收两个数据包的处理方式是怎么样的?
CC1101在快速接收两个数据包的处理方式是怎么样的?当接受到一个数据包之后,来一个中断,在中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状态,当在读取第一个数据包的时候,还未读完数据
2016-04-05 15:57:53
CC1101在快速接收两个数据包的处理方式?
CC1101在快速接收两个数据包的处理方式?当接受到一个数据包之后,来一个中断,在中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状态,当在读取第一个数据包的时候,还未读完数据,又来了一个数据包
2016-03-10 14:04:55
CC2540能否抓取与Android手机之间的数据包?
现在使用Android手机与CC2564MODN进行通信,请问利用packet sniffer和CC2540 USB Dongle能否抓取cc2564MODN与Android手机之间的数据包?
2016-03-31 16:35:19
CH559能否一次接收超过USB设备端点大小的数据包?
数据长度为256字节,读卡器不能收发数据。上位机驱动的端点收发设置是否要调整为跟CH559的USB支持的最大64字节的数据包
2022-06-10 07:16:41
CYUSB3013在ISO模式下配置设备时,最后一个数据包缺少LPF设置,这是为什么?
125us(导致每个 USB 微帧有 3*11 KB 的数据),设备按预期执行。 但是,当我们将突发长度设置为 12 时,设备会以 12 KB 的数据进行响应,但最后一个数据包缺少 LPF(突发结束)设置。 有人知道为什么会发生这种情况吗?
2024-02-26 06:07:22
EDK到ISE集成无法接收数据包
你好我正在使用ML506板,我已经将以太网从EDK集成到ISE,逻辑没有区别。在SDK中我发送ARP请求,我收到了ARP回复以及从GUI发送的UDP数据包。我在ethereal中验证了它,并在
2020-03-25 09:43:19
FixDATA RANSFER()失败导致丢失数据包
嗨,大家好我用C流拖缆(最新版本)从USB板(3014)读取数据,当源数据通过分组增加包时,通过检测包的报头,发现丢失了一些包。BTI检查在USBAnalyzer中传输的所有数据包,表明所有数据包
2019-04-25 13:57:11
LPC55S69 SDK HID如何快速发送HID数据包?
LPC55S69 SDK:版本 2.12.0。 示例程序:dev_hid_generic_bm。USB速度:使用高速端口平台:LPC55S69 EVK此演示接收 HID 数据包,并立即将其发回。当我
2023-04-19 06:54:38
LS1046上的UDP数据包顺序是怎样的?
我的 cpu 是 ls1046,所有以太网都在 DPAA1 上工作。当MAC10 收到UDP 数据包时,它有一些无法纠正的乱序数据包。我们的板子用MAC10跑10G,集成了FMC工具,运行FMC工具
2023-03-30 07:07:16
LS1046如何使用iperf3工具测试TCP数据包传输?
LS1046:
我尝试使用iperf3工具测试TCP数据包传输。
找到一些速度为 10Mb/s 的重传。数据包大小为 60 字节。(网络链接为 100Mbps)
ethtool notify
2023-05-10 08:07:18
LWIP UDP数据包长度为什么不一样?
服务端和开发板DUP客户端 使用同样的命令,互相发送,之后抓取UDP数据包)现象如下:1 - 计算机UDP服务端发送数据包2 - 开发板UDP客户端发送数据包两者命令码是一样,但是数据包长度为什么不一样
2019-10-31 04:35:29
LabVIEW 与其他语言TCP通信,数据包解析求助
做为下位机与上位机进行TCP通信,上位机非labview编程语言设计,切已经定好包数据格式:帧头EB90+两个字节数据包长度+包数据,不能更改。以前做的TCP通信,还有LV自带的例子,都是先发固定
2016-09-14 09:15:40
NUC505如果USB发送一个512Byte的数据包,发送不出去是为什么?
] = {0};其中的64应改为512,这是HOST向USB虚拟串口发送大与64字节数据包时发现的。
2. 如果USB发送一个512Byte 的数据包,是发送不出去的。
改正方法:
对于512Byte 的数据包,再补充发送一个0长度的数据包。
或者, 每次发包的最大长度定为511
2023-06-16 06:15:23
PC端就是接收不到数据包是为什么?
我现在有一块定制的C6455的开发板,使用intel的LXT971 PHY芯片,使用MII模式,连接方法都是参考DSK6455的。现在的情况是,DSP能够接收到pc发送过来的数据包,但是pc接收
2020-05-22 08:51:57
PIC32不能接收数据包
。就像板没有收到任何数据包一样,我把ICMP服务器/客户端放在板上,这样我就可以告诉PIC32可以成功发送数据包,但是不能接收。我用调试器检查:从我的PC发送的包成功地生成了ISR。我发现在内存中修正了
2019-10-08 09:27:45
SI4432数据包较短,加长数据包以后尾部是乱码
小弟最近在用STC11L08X+SI4432做通信,设置数据包长度为14个字节的时候可以正常通信也没有错码,但是一旦我将数据包长度扩大超过了14个字节后,从FIFO中读取出来的数据第14字节以后
2014-12-08 14:41:41
SL811HS和USB高速设备数据包丢失该怎么办?
现了。主机可以成功地向设备发送请求命令,但无法获取数据。在多包数据级中,主机只能接收第一个分组,所有的数据包都丢失。请把你的手给我。谢谢。最佳问候
2019-08-02 07:25:22
STM32H7 USB自定义类,当通过端点2发送IN数据包时不会触发怎么处理?
......在数据输出阶段结束时调用DataOut回调是很好,因为所有接收到的数据都是可用的,但是对于 DataIn,我想在数据开始阶段得到通知,即被通知收到一个 IN 数据包,然后通过它发送我自己的数据
2023-01-05 08:42:37
STM32H750如何提高数据包大小?
我使用STM32H750官方的VCP例程,FS模式。
程序默认CDC_DATA_FS_MAX_PACKET_SIZE是64位,我试着修改最大只能到256,如果再大会导致接收不到数据。芯片资料MPSIZ设置范围可以到2047。
我想提高数据包大小应该怎么修改
2024-03-07 06:12:31
STM32H7接收数据包异常,一包接收的数据出现两包发送的内容怎么解决?
);__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT);
2、发送数据包1
2024-03-08 08:05:24
UART数据包设计与解析
上一节讲到起止式SST(Start-Stop-Type)帧结构协议,该协议利用帧头、长度、校验构建帧结构,基于帧结构能实现对数据包的可靠、准确传输。应用层数据...
2021-12-16 06:15:13
blueNRG中的数据包计数器怎么发送
嗨,大家好, 我想计算我在广告频道发送的数据包。我该怎么做?也许我可以用任何功能手动发送每个数据包?然后我会在发送一个数据包后增加我的计数器。 BR 玛丽W以上来自于谷歌翻译以下为原文 Hi
2019-02-14 16:50:32
esp8266如何接收完整的数据包吗?
Beacon 数据包,但数据包有问题。
只收到部分数据包。
使用回调:static void sniffer_callback(uint8_t *buffer , uint16_t length
2023-05-19 09:58:11
labview串口解析数据包思路是怎么样的?
各位大神,小弟labview初学者,现有一个任务如下:串口设置:波特率:115200数据位:8bit校验:无停止位:1 串口描述:上电后MCU以每秒200次的速率向串口发送数据包。数据内容为从0
2017-06-30 13:26:40
odbus实现主机对从设备读取数据包和从设备写入数据包
六.modbus实现主机对从设备读取数据包和从设备写入数据包1.准备好硬件上能精确到1ms的定时器2. 先完成一个MODBUS所需要的软件上的定时器void Timer2_Init(void
2022-02-22 07:59:56
uart引导加载程序数据包长度无效
加载程序的例子。我修改的项目支持UART bootloader和它不工作。我收到以下错误:“引导程序报告错误的数据包长度无效:数据包的长度不符合要求的数据包格式”我ahvedouble和三倍检查我的设置
2019-09-26 12:21:10
为什么ESP时不时会丢失UDP数据包?
完成后,我发现有些数据包时不时会丢失,所以我切换到 TCP 协议,这显然带来了自己的挑战。我目前正在使用一些 TCP 套接字测试工具来建立与 ESP8266 的连接并向其发送命令。问题是,ESP 似乎有
2023-02-28 07:10:49
从机向主机发送数据时,数据包会出现丢包
我使用2541作为从机向2540主机发送数据,通过串口从2540接收数据,完全单向传输。每5ms发送一次数据包,一个数据包有7个字节。算下来速度也不算太快,每秒钟7*200=1400个字节但是从串口
2020-03-18 09:46:01
低功耗蓝牙(BLE)MTU交换数据包
在做数据传输时不超过这个最大数据单元 MTU交换通常发生在主从双方建立连接关系后(参见"一分钟读懂低功耗蓝牙连接数据包") 做个对比就可以知道BLE MTU 比较小(不过新的BLE
2018-11-09 09:33:19
低功耗蓝牙(BLE)MTU交换数据包
每次在做数据传输时不超过这个最大数据单元 MTU交换通常发生在主从双方建立连接关系后(参见"一分钟读懂低功耗蓝牙连接数据包") 做个对比就可以知道BLE MTU 比较小(不过
2018-11-08 10:08:37
关于K2_STK_DSP里的GE例程接收数据包的MAC地址问题
:88:00:01:01时,DSP才能收到,下列几张图阐述上述情况:首先是xcap软件建立数据包的图:建立了两种数据包,第一种数据包(第一行)源MAC地址为88:88:88:00:00:01,目的MAC
2018-08-03 09:18:46
在USB dongle中烧入了sniffer_fw_cc2540_u***.hex看不到相关的数据包?
端可以看到相应的数据包,但其后扫描、连接、读写等过程在sniffer中都看不到相关的数据包,请问是在哪里出了问题?在GAPRole_Init中固定gapRole_AdvChanMap = 0x27;在sniffer中如下图选择:还是不行,求指教。谢谢!
2020-08-28 13:18:21
如何使用FRDM-KW41Z devkit和Wireshark创建一个zigbee数据包嗅探器?
我很好奇使用 FRDM-KW41Z devkit 和 Wireshark 创建一个 zigbee 数据包嗅探器。 是否有捷径可寻?我是否需要 USB 加密狗才能嗅探 zigbee 数据包?
2023-04-03 06:37:20
如何发送音频/视频ISOC数据包?
我想开发带有音频和/或视频类的 USB 主机应用程序。是否有任何工作示例项目或代码片段?我检查了 STM32 HCD 驱动文件 - -ux_hcd_stam32_periodic_schedule.c,但它总是生成 EP_TYPE_INTR 数据包。如何发送音频/视频 ISOC 数据包?
2022-12-26 08:18:26
如何在没有收到另一个udp数据包的情况下简单地发送一个udp数据包?
大家好!
我正在尝试发送一个简单的 udp 数据包,如下所示:
sk = net.createUDPSocket()
sk:send(6000,\"255.255.255.255
2023-04-27 06:17:57
如何强制ESP32-S2向Station和SoftAP接口发送UDP广播数据包?
我有一个特别的问题。我有两个ESP32-S2设备,一个配置为 Station + SoftAP,另一个连接到第一个(作为站)。两个设备都设置为在同一端口上相互发送和接收 UDP 广播数据包。他们都
2023-03-02 08:09:16
如何检测数据包丢失?
问题:我想做一个RFC2544速度测试。有人知道如何检测数据包丢失吗?包数据中是否有UNIQ标识符(什么是RF2544数据包结构?)……我找不到这个信息。谢谢。
2020-03-13 08:56:22
如何用虚拟数据填充数据包
如果主机要发送长度不为512倍的数据流,则最后一个包不会自动提交给USB,因为它小于512字节。为了提交最后一个数据包,主机可以做两件事之一:它可以用虚拟数据来填充数据包,以便使它精确地长512字节
2018-12-28 15:24:15
如何获得ESP32端接收到的数据包数量?
我们目前正在开发基于ESP32的新产品,我们想做一些认证。我们正在使用 ESP RF 工具在 Tx 数据包、Rx 等中设置产品。这部分按预期工作。我们使用 ESP RF 工具进行适应性测试
2023-04-13 07:25:08
如何设置LWIP的传入数据包大小使其可以接受大于16字节的数据包呢?
错误并无限期挂起。如何设置传入数据包大小,使其可以接受大于 16 字节的数据包?请查看我的一些以太网配置的附件图片
2022-12-20 07:46:42
如何连接其他USB设备后的失败数据包?
你好,我使用CYSUB3014,Stuuler-C,AUB3.0我有很好的速度和没有失败的数据包。但当我连接USB闪存时,拖缆打印所有故障包,并需要重置装置。
2019-09-04 14:42:28
怎么从PIC32MZ直接发送UDP数据包?
嗨,我想把带有命令数据的UDP数据包从PIC32MZ发送到终端控制设备。但是,我不知道如何更改UDP客户端和UDP服务器项目示例的TCPIP示例。我需要知道如何设置UDP的信息,以便UDP
2019-10-16 12:30:34
怎么跟踪每个连接间隔的数据包数
你好,我想知道是否有一种方法来跟踪每个连接间隔发送的数据包的数量。实际使用一个延迟等于我的连接间隔的计时器来计算我使用BLE堆栈API推送数据的次数。但我正在寻找其他解决方案。我需要这个控制来确保我的移动设备不会丢失这样的数据包。谢谢您,
2019-09-16 06:14:45
接收CAN公共汽车上数据包的代码
应用程序: 这个样本代码接收 CAN 公共汽车上的数据包, 使用协议中断的检测来与 CAN 公共汽车通信的失败率匹配, 并动态调整 M253 CANFD 的失败率 。
BSP 版本:M253系列
2023-08-29 06:24:08
有关短数据包的slave fifo传输的问题
,所以我想我必须使用PKKATE来传输短数据包,然后问题就来了。我找不到正确的数据,有人能告诉我这个问题吗?手册上说,PKTAN是在最后一个字被转移,当我传送一个短的数据包,我可以继续传输一个完整
2019-05-10 15:14:17
蓝牙数据包的抓取与分析!
本帖最后由 bbsc 于 2017-5-7 17:10 编辑
各位大佬好,我想用电脑抓取蓝牙数据包,然后用wireshark分析,需要哪些硬件协助?最好便宜点(学生dang)需要测试的设备支持
2017-05-07 16:55:28
请问51串口怎么发送数据包
想利用定时器每隔50ms发送一串数据包,数据包里最后两位是变量,比如{0XAA 0XBB 0XCC 0XDD 0XEE 0XFF 0XAB 0XAC 0XAD 0XBB}最后0XAD和0XBB 是变量,利用串口方式1 请问这个怎么发送?求个思路
2019-02-18 23:23:13
请问DSP硬件定时器怎么实现不同优先级数据包的发送速度不同
在调度到一个数据包发送给物理层时,有算法能求出它要延时几毫秒后发送。问题是一个数据包延时时,可能调度算法要发送另一个数据包,也可能另一个也要延时,怎么通过硬件定时器实现不同速率数据包之间互不影响的延时后发送
2019-01-24 11:27:22
请问SRIO每次出传输数据包的个数,数据包负载大小怎么设置?
本帖最后由 一只耳朵怪 于 2018-6-19 14:25 编辑
DSP一次发送16个数据包,每个数据包256字节,一次传输4096个字节。如果现在DSP向FPGA发送2048字节数据,后面2048个字节它自动为零,造成效率变低。请问如何配置每次发送数据包的个数让它只发送有效的数据?
2018-06-19 05:22:46
请问使用CC2540EMK-USB Packet Sniffer怎么抓取数据包?
Hi,我手上有TI的CC2540 USB DONGLE, 并且安装了TI packet sniffer。但是由于BLE是调频的,我应该如何设置packet sniffer来随着我的BLE应用来调频,进而抓取空中的数据包?
2020-04-02 09:38:33
请问在串口通信中数据包的帧头和帧尾怎样加入到数据包?
,请问在串口通信中,数据包的帧头和帧尾(比如0x55,0xaa)是怎样加入到数据包的?是不是定义一个数组,将帧头和帧尾设置成0x55,0xaa,再将整个数组发送?在发送包含帧头帧尾的数据包时,是否需要
2020-03-30 05:55:39
请问如何在嗅探器应用程序中获取wifi数据包速率?
我想构建一个应用程序来测量 WiFi 信道负载。这需要计算接收到的数据包的空中时间。我的做法是:1. 将ESP32配置为混杂模式,开启接收各种数据包。2. 在rx回调中,获取包速率和包长度。3.
2023-04-14 07:14:51
请问怎么通过蓝牙发送具有数据头和数据尾的数据包?
项目需要使用蓝牙来发送内容不固定的数据包,并且数据头和数据尾最好具有唯一性,不会与别的内容相重复。 以前使用蓝牙都是用的模块,蓝牙模块内部不是很清楚怎么给数据处理的。这里请教下各位能否用AT指令来做数据包的头和尾?是否需要写通信协议还是说已经有例程?
2019-04-25 22:45:32
请问蓝牙USB Dongle是否可以抓蓝牙2.0数据包?
各位社区朋友, 现在蓝牙USB Dongle可以抓蓝牙4.0数据包,是否可以抓2.0数据包呢? 有没有只抓蓝牙2.0,或者蓝牙2.0/4.0数据包同时抓的USB Dongle? Honggui Li
2019-09-26 10:32:17
造成UDP数据包丢失的原因?
芯片时遇到了使用 TCP 的延迟问题,所以我想“我将使用 UDP”。这个想法是我们在网络中,所以数据包丢失应该非常低,如果我在 X 时间内没有收到响应作为备份,我可以处理重新发送数据。
无论如何,我写了
2023-06-02 13:46:39
评论