首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

USB初学(一)---USB-HID的初步认识【转】

HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容。 USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备。...从框图中,可以看出除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。...HID描述符 0x22:报告描述符 0x23:物理描述符 7 wDescriptorLength 2 数字 报告描述符总长度 9 bDescriptorType 1 常量用于识别描述符类型的常量,使用在有一个以上描述符设备...主机接收USB设备的异步传输数据 USB主机发送有实时性要求的数据USB设备USB主机到USB设备的中断输出数据传输是可选的,当不支持中断输出数据传输时,USB主机通过控制管道将数据传输给USB设备...表1、USB HID规范定义的HID设备可用端点 管道 要求 说明 控制(端点0) 必须 传输USB描述符、类请求代码以及供查询的消息数据等 中断输入 必须 传输从设备到主机的输入数据 中断输出 可选

11.1K50
您找到你想要的搜索结果了吗?
是的
没有找到

基于STM32CUBE的USB鼠标键盘二合一

看来你们对USB兴趣一般,所以这次我把它放在次条。感兴趣的就看一眼,没兴趣的就算了。 前面两篇文章分别说了如何实现基于STM32的USB鼠标和基于STM32的USB键盘。...具体操作和USB鼠标的操作一样,这里就不重复了。 同理,VID和PID要和之前的设备不一样。设置完成以后,直接生成工程。 ?.../*bInterval: Polling Interval */ 第三,修改HID描述符中,报告描述符的长度: ?...向USB主机发送数据的时候,数组的第一个元素是报告ID,后面才是键盘数据或鼠标数据。实现前面两节的例程的时候,USB键盘我们定义了一个8元素的数组,USB鼠标我们定义了一个4元素的数组。...现在我们只需要一个数组,它同一时间,只发送一种数据,所以大小为8,然后,还要包含报告ID,所以变成9. 在USB协议中,报告ID默认是数组的第一个元素。

2.1K41

给MacBook写一个更好的Windows触摸板驱动程序

微软建议是用硬件( USB 或者 I2C )来实现 PTP 的 HID 设备,对于像 MacBook 这种不是原生 PTP HID设备来说,我们可以写一个 HID Miniport 驱动来把它变成一个...所需要的所有 HID 描述符和 Top-level Collection。HID描述符会被对应到相应的 C Struct 里。 之后需要配置和读取设备。...配置设备其实就是给触摸板写一个 HID Feature Report 来打开触摸板模式,在基于 USB 的 MacBook 触摸板可以用 USB Control Transfer,基于 SPI 的触摸板需要给...在基于 USB 的 MacBook 触摸板上,可以使用中断,而 SPI 的需要使用轮询。按照 PTP 的 HID 描述符要求把数据喂回去然后完成请求即可。...注意在 HID 报告里,Timing 的单位是 100 微秒,且这个 Timing 的数据只有两个 2 Byte。

1.5K10

Linux驱动开发: USB驱动开发

USB主机访问USB设备描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。...除此之外, HID 设备还有三种特殊的描述符HID 描述符报告描述符、物理描述符。一个 USB 设备只能支持一个 HID 描述符,但可以支持多个报告描述符,而物理描述符则可以有也可以没有。...3.2 HID 描述符 HID 描述符用于识别 HID 设备中所包含的额外描述符,例如报告描述符或物理描述符等。...他设备描述符的数量。由于 HID 设备至少需要包括一个报告描述符,故其值至小为 0x01。 bDescriptorType: HID 描述符附属的类别描述符长度。...3.3 报告描述符 HID 设备报告描述符是一种数据报表,主要用于定义 HID 设备USB 主机之间的数据交换格式, HID 设备报告描述符的类型值为 0x22。

69.6K20

DIY一个专属HID注入设备

但是由于价格原因,大多数研究人员首选Teensy USB开发板并基于Arduino IDE实现HID注入攻击。...电脑主机是通过设备描述符识别USB设备类型的,并在规定的端点建立与设备的通信关系,因此要做的第一步是要配置好设备描述符。...参考STM32F10X USB设备开发套件(STM32_USB-FS-Device_Lib_V4.0.0)中JoyStickMouse例程,按照lsj9383[1]的思路对配置描述符报告描述符进行修改...在电脑识别出HID设备的基础上,调整端点收发缓存区的分配,再配置设备的Init和Reset函数。接着就可以用Joystick_Send函数发送按键数据,参数非零代表有键按下,全零则代表松开。...按照zengming00[4]的教程,对mass_mal.c中的MAL_Init,MAL_GetStatus,MAL_Read,MAL_Write函数进行修改,使之解锁访问并读写内部flash数据

1.4K00

原创 Paper | USB设备开发:从入门到实践指南(一)

2.1.6 HID报告描述符USB主机通过接口描述符得知USB设备USB HID设备时,将会再获取HID报告描述符,在USBPcap中捕获到的HID报告描述符如图21所示: 图21:Wireshark...查看HID报告描述符 定义HID报告描述符的代码在bash脚本中如下所示: # Write the report descriptor # Source: https://www.kernel.org/...报告描述符来源于Linux内核示例,如图22所示: 图22:Linux USB HID gadget 驱动文档 所以下一步我们需要能顺利阅读HID报告描述符,可以参考官方文档,官方文档的优点是内容齐全,...在大致了解了如何向USB主机发送数据后,再来看看HID报告描述符: static struct hidg_func_descriptor my_hid_data = { .subclass...到这里键盘的HID报告描述符的定义就分析完了,我们发现该描述符定义的内容和我们的输入数据的格式是吻合的。 发送的buf第一字节就是表示8个控制按键,第二字节固定为0,后面6个字节为输入按键。

72400

基于STM32CubeMX的USB鼠标例程

最近在玩STM32CUBE的USB功能,用起来还是挺方便的。只要配置一下,设备描述符、配置描述符、接口描述符什么的,都能给你自动生成,其中还包括比较复杂的报告描述符。...只要在USB设备的D+数据线上接一个1.5K的上拉电阻即可。而我这里这个上拉电阻的电源端是接到了STM32的PA15上面。如图: ? 所以,如果你的板子上,上拉电阻默认接到VCC,这一步就不用管了。...USB设备回答:… 6、两次回答一样,说明USB设备的地址分配成功。USB主机继续提问,获取其它描述符。 7、USB设备,在向主机回复配置集合的时候,表明自己的身份:你好,我是个鼠标!...也就是说,在配置集合中,有信息说明这个设备是鼠标,我们看下。在usb_hid.c文件中,有一个数组:USBD_HID_CfgFSDesc,其中一行: ? 单是这个还不够,还要结合报告描述符。...无论是配置集合,还是报告描述符,这里都不做解释,因为一两篇文章根本说不完。这里只说一点,由于报告描述符的规定,鼠标设备向电脑发送数据的时候,一般是发送4个字节的数据

1.5K20

硬件笔记(8)----USB学习笔记5

bMaxPacketSize 会报告由端点 0 支持的数据包的最大字节数量。根据设备数据包的大小可以为 8 个字节、16 个字节、32 个字节和 64 个字节。...10.7 其他杂项描述符类型 报告描述符:某个 USB设备可能需要一组扩展式的描述符信息。开发者必须保证 USB 设备所需要的任意额外的描述符信息都包含在描述符文件里。...例如,对于 HID设备,开发者必须将报告描述符添加到描述符文件内,用于定义其他设备属性。如果需要额外的描述符,可以在类定义规范或其他类的支持文档中查找相关的描述符格式。...更多有关报告描述符的信息,请参考 AN57473 — PSoC®3 和 PSoC 5LP 的 USB HID 初级应用笔记以及 AN58726 — PSoC®3 和 PSoC 5LP 的 USB HID...支持 LPM 特性的所有 USB 2.0 设备都需要使用 USB 2.0 的扩展描述符报告其 LPM 能力。USB 2.0 扩展描述符是BOS 描述符的一部分。

1.6K20

基于STM32CUBE的USB键盘例程.docx

还有就是端点每次发送的数据包长度: ? 之前是4,不够用了,现在改成16. 最后配置集合中增加一部分端点描述符,因为USB键盘对主机来说,不光有输入,还有输出。..., /*bInterval: Polling Interval */ 3 修改HID描述符 修改HID描述符中的报告描述符长度: ?...上面提到了,之前是鼠标描述符,长度74,现在改成键盘描述符,长度63. 4 生成键盘的报告描述符USB鼠标的报告描述符删掉,换成USB键盘的报告描述符。...不会写USB键盘的报告描述符怎么办? USB官方提供了一个USB报告描述符自动配置的工具,打开!里面有各种例程,我们直接复制一个USB键盘的报告描述符即可。 ?...获取报告描述符的部分,之前这里是鼠标的报告描述符信息,现在换成了键盘的。

68630

【STM32F429】第9章 RL-USB各种USB描述符简介

/USB_hardware 9.2 USB描述符概述(USB Descriptors) USB设备使用描述符报告其属性,描述符是具有定义格式的数据结构。...设备加入USB网络后,USB主机立即发送设置请求。将指示该设备选择配置和接口,以匹配USB主机上运行的应用程序需求。选择配置和接口后,设备必须为活动的端点提供服务,以此与USB主机交换数据。...例如,IP语音电话可能具有: 一个音频类接口,带有2个同步端点,用于在每个方向上传输音频数据。 一个HID接口,带有一个用于内置键盘的IN中断端点。...RL-USB支持用户在必要时可以选择覆盖USB描述符。当需要在运行时更改设备类或需要创建其他报告时,可能就是这种情况。...USB主机可以动态选择接口。 接口描述符永远不会在端点编号中包含端点0。如果接口使用端点0,则必须将字段bNumEndpoints设置为零。

52330

【STM32H7】第9章 RL-USB各种USB描述符简介

/USB_hardware 9.2 USB描述符概述(USB Descriptors) USB设备使用描述符报告其属性,描述符是具有定义格式的数据结构。...设备加入USB网络后,USB主机立即发送设置请求。将指示该设备选择配置和接口,以匹配USB主机上运行的应用程序需求。选择配置和接口后,设备必须为活动的端点提供服务,以此与USB主机交换数据。...例如,IP语音电话可能具有: 一个音频类接口,带有2个同步端点,用于在每个方向上传输音频数据。 一个HID接口,带有一个用于内置键盘的IN中断端点。...RL-USB支持用户在必要时可以选择覆盖USB描述符。当需要在运行时更改设备类或需要创建其他报告时,可能就是这种情况。...USB主机可以动态选择接口。 接口描述符永远不会在端点编号中包含端点0。如果接口使用端点0,则必须将字段bNumEndpoints设置为零。

54320

【STM32F407】第9章 RL-USB各种USB描述符简介

/USB_hardware 9.2 USB描述符概述(USB Descriptors) USB设备使用描述符报告其属性,描述符是具有定义格式的数据结构。...设备加入USB网络后,USB主机立即发送设置请求。将指示该设备选择配置和接口,以匹配USB主机上运行的应用程序需求。选择配置和接口后,设备必须为活动的端点提供服务,以此与USB主机交换数据。...例如,IP语音电话可能具有: 一个音频类接口,带有2个同步端点,用于在每个方向上传输音频数据。 一个HID接口,带有一个用于内置键盘的IN中断端点。...RL-USB支持用户在必要时可以选择覆盖USB描述符。当需要在运行时更改设备类或需要创建其他报告时,可能就是这种情况。...USB主机可以动态选择接口。 接口描述符永远不会在端点编号中包含端点0。如果接口使用端点0,则必须将字段bNumEndpoints设置为零。

49910

使用stm32cubeMX生成模板,配置stm32f103c8t6键鼠一体化

引脚设置为GPIO_EXTI1 NVIC中使能EXTI line1 interrupt RCC中HSE选择Crystal/ceramic Resonator SYS中Debug选择serial wire USB...中勾选Device(FS) USB_DEVICE中Class选择HID 设备描述符修改vid和pid的值(避免和连接到电脑上其他usb设备冲突而引起错误) GPIO中pa1配置成Pull-down(按键接...修改USBD_HID_CfgFSDesc(HID设备全速配置描述符) *USB_HID_CONFIG_DESC_SIZ 大小改为41U image.png *Descriptor of Joystick...Mouse interface 中端点数量改为0x02,接口协议改为0x01 image.png *配置描述符末尾新增输出端点描述符 image.png 3....修改报告描述符HID_MOUSE_ReportDesc *替换报告描述符内容为 //将整个报告描述符复制替换过去, 其中键盘REPORT_ID是1,鼠标REPORT_ID是2 0x05, 0x01

1.1K60

浅谈总线通信机制----USB学习指南与总结

(2)电源态(供电态) 就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最大值,可通过编程设置),在配置描述符中可以配置最大电流。...USB的包(宏观上来说)有四种:令牌包、数据包、握手包、特殊包。包是USB传输数据的基本单位。每种类型的包都会有不同的域来构成。...枚举将是整个USB学习的重中之重,枚举就是主机从设备读取各种描述符信息,这样主机就可以根据这些信息加载合适的的驱动程序,从而知道是什么类型的设备,如何进行通信等等。...而主机要获取设备相关的信息就必须要发起请求,请求主要有:USB标准请求(有一定的格式组成)、HID类请求等。 ? ? ?...说到描述符USB有标准描述符,分别是:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符 (可选),每个设备都必须要支持标准描述符,还有HID描述符报告描述符,物理描述符等。 ? ?

1.2K20

19.Linux-USB总线驱动分析

然后USB总线驱动程序都会给它分配一个地址(编号) PC机想访问USB总线上某个USB设备时,发出的命令都含有对应的地址(编号) USB是一种主从结构。...集线器检测到这个状态后,它就报告USB主控制器(或者通过它上一层的集线器报告USB主控制器),这样就检测到设备的插入了。...中断传输不是说我的设备真正发出一个中断,然后主机会来读取数据。它其实是一种轮询的方式来完成数据的通信。USB设备会在设备驱动程序中设置一个参数叫做interval,它是endpoint的一个成员。...设备与主机会有若干个通信的”端点”,每个端点都有个端点号,除了端点0外,每一个端点只能工作在一种传输类型(控制传输、中断传输、批量传输、实时传输)下,一个传输方向下 传输方向都是基于USB主机的立场说的...; //设置匹配USB的接口类型为HID类, 因为USB_INTERFACE_CLASS_HID=0x03 //HID类是属于人机交互的设备,比如:USB键盘,USB鼠标,USB触摸板,

8.6K91

USB 协议核心概念与实践

在介绍数据发送流程之前,我们先来看下描述符描述符 所有的 USB 设备设备,都使用一系列层级的描述符 (Descriptors) 来向主机描述自身信息。...中断传输通常是非周期性的,并且传输过程保留部分带宽,常用于时间敏感的数据,比如键盘、鼠标等 HID 设备。...('test') 总的来说分为几步, 根据设备描述符查找到指定的设备 获取该设备的配置描述符,选择并激活其中一个 在指定的配置中查找接口和端点描述符 使用端点描述符进行数据传输 如果不清楚 USB 的工作原理...Upper Level: 通过 Gadget Driver 抽象的接口,实现基于 USB 协议的上层应用,比如 USB 网卡、声卡、文件存储、HID 设备等。...gfs.png 前文提到的基于树莓派 Zero 实现的各类 USB 设备,大部分都是基于 Gadget ConfigFS 接口实现的。

1.5K50

带你遨游USB世界

用于数据量大、同时对实时性要求较高的场合,如音视频。 不保证数据完整性,没有ACK/NAK应答包,不进行数据重传。 2.1.6、USB设备结构及描述符 ?...从Device侧看,UDC驱动程序直接访问硬件,控制USB设备和主机间的底层通信。Gadget API是UDC驱动程序回调函数的包装。Gadget Driver具体控制USB设备功能的实现。...2.3、USB描述符 对应上述USB设备的构成,USB采用描述符来描述USB设备的属性,在USB协议的第九章(chaper 9)中,有对USB描述符的详细说明,在Linux驱动的以下文件中,定义了USB...一个URB用来向一个特定USB设备的特定USB端点发送数据或接收数据设备中的每个端点都处理一个URB队列。 URB的处理流程: ?...USB鼠标遵循USB HID(Human Interface Device)规范。 在probe中探测设备是否符合HID规范,并且创建和初始化URB: ? ?

2.6K21

13.USB驱动

USB设备就必须回答"我是xxx", 并且回答的语言必须是中文 USB总线驱动程序会发出某些命令想获取设备信息(描述符), USB设备必须返回"描述符"给PC 问3....每一个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号 接在USB总线上的每一个USB设备都有自己的编号(地址) PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址) 问4....例子:USB鼠标滑动一下立刻产生数据,但是它没有能力通知PC机来读数据,只能被动地等得PC机来读。 2.USB的传输类型: a. 控制传输:可靠,时间有保证,比如:USB设备的识别过程 b....每一个端点只支持一个方向的数据传输 端点0用于控制传输,既能输出也能输入 4.每一个端点都有传输类型,传输方向 5 术语里、程序里说的输入(IN)、输出(OUT) “都是” 基于USB主机的立场说的。...; //设置匹配USB的接口类型为HID类, 因为USB_INTERFACE_CLASS_HID=0x03 //HID类是属于人机交互的设备,比如:USB键盘,USB鼠标,USB触摸板,

2K20

基于KT6368A蓝牙芯片开发智能抖音翻页翻页笔总结

一、功能简介KT6368A蓝牙芯片也是基于 HID 开发,主要用于浏览当下火爆的抖音等小视频的上下翻页、左右菜单切换、暂停等操作。打开手机蓝牙进行连接,进入视频浏览界面操作对应按键即可。...,由于是 HID 设备,所以数据的发送形式从对应的 HID 设备描述符产生。...用户如需要对设备进行功能自定义,可以结合 HID 官方文档对下述描述符进行修改。暂停按键对应的 HID 设备发送数据包,通过下图的 hid_data_send_pt()进行数据传输。1....KEY_DELAY_TIME();7. }8. }由描述符可知,设备一共有 5 个输入实体 Input,一共组成 7byte 的数据,所以对应的暂停按键数据包由 7byte 的数据组成...第二个IO口是外挂adkey芯片的2脚LED,7脚【USB-DM】开关机按键,8脚【USB-DP】外挂adkey 。

27820
领券