USB 之人性化介面装置(HID)的报告描述元(1)
关于 USB 的标准描述元已经在 e 科技杂志的第 24 和 25 期中作了完整的介绍。
有些读者来函希望能早日刊出报告描述元的介绍。人性化介面装置 HID 的类别特定描述元有三种,其中 HID 描述元因为需要连接在介面描述元(标准描述元之一)之后,所以也已经在前文介绍了。其他二个 HID 类别特定描述元为报告描述元和实体描述元。实体描述元几乎很少使用到,所以不拟介绍,虽然它不会很複杂。本文仅专注介绍报告描述元。相对来说,报告描述元最複杂,也不容易理解,可是却最重要,因为 HID 装置与主机间的经常性数据传输都由报告描述元来规范。因为报告描述元的複杂和难理解,使得此文的编撰花了不少时间,因此无法在上次刊完 USB 标准描述元后,接著刊出。
由于内容篇幅颇长,所以仅能分为三篇陆续刊出。本期的第一篇中仅介绍到区域性项目,下期的第二篇再继续介绍全域性项目和主项目。这三类项目构成一个报告描述元。最后仍需要以一个实际的范例来解说使用方法,所以第三篇文章将提供一个实际的范例:整合滑鼠的键盘装置。此外,也会将该范例的韧体程式码提供给有兴趣的读者。这个韧体程式码不只是该范例的报告描述元,也含括了它的标准描述元。
概述
报告(report)在这裡意指数据传输(data transfer),而报告描述元则是对这些传输的数据作用途(usage)的说明。
USB 通讯协定的规范是以 1 毫秒产生一个 USB 讯(frame), USB 装置可以在每一个讯框中传送和接收一个交易(transaction)。交易是由数个封包(packet)组成,而传输是由一或数个交易来完成传递一串有意义的数据。在这裡,传输和报告的意义大同小异。传输方式有四种,初学者只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求,是最一般的传输,组态、命令和状态的通讯都可以使用,主要用于讯息型数据(message-type data)。中断型传输目的在做重複的数据更新(recurring data)传输,精确一点而言,即是在每个有限的週期内(bounded period)作至少一次的小量数据传送或接收﹔所以适用于流动型数据(stream-type data),注意这裡所谓的週期间就是在端点描述元中的轮询间隔时间。报告有三种: Input, Output,和Feature。
后文会做进一步介绍。中断型输入管线(interrupt in pipe)仅可以传送 Input 报告,中断型输出管线(interrupt out pipe)仅可以传送 Output 报告,但是控制型管线(control pipe)可传送 Input, Output,和 Feature 报告。端点描述元有宣告所使用的端点为何种管线数据本身无意义,要赋于用途才知其为何种操控(control)﹔例如装置上的按钮、指示灯和 x 与 y 轴的位移等都通称操控,数据则为按钮和指示灯的开关状态或 x与 y 轴的位移量。为了这个目的应运而生报告描述元,它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操控。所以『传输的数据』和『操控』可谓一体的两面。用途是以一个 32 位元的标籤(称作 Usage tag)来表示,较高的 16 位元称作 UsagePage(用途类页),较低的 16 位元称为 Usage ID(用途识别名):
主项目用来定义报告中数据的种类和格式,而说明主项目之意义与用途为全域性项目和区域性项目。顾名思义,区域性项目只能适用于列于其下面的第一个主项目,不能扩及其他主项目,若一个主项目之上方有数个不同标籤的区域性项目,则这些区域性项目皆适用于描述该主项目。相反的,全域性项目适用于其下方所列的所有主项目,除非另一个相同标籤的全域性项目出现在其下方来取代它。为求清楚说明报告描述元,将使用『项目状态表』(item state table)用来表示在某位址处适用的全域性项目的组合。图1 显示全域性项目和区域性项目与所描述的主项目之对应关係。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|