请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:OMAP-L138 工具/软件:TI C/C++编译器
我有一个在 ARM 中工作正常的 USB 代码,现在我想将其集成到引导加载程序中,不幸的是,当我将库和一些与 USB 相关的其他头文件复制到引导加载程序项目时,它显示了很多错误。 任何帮助都将得到批准
此致
安东尼
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我有一个在 ARM 中工作正常的 USB 代码,现在我想将其集成到引导加载程序中,不幸的是,当我将库和一些与 USB 相关的其他头文件复制到引导加载程序项目时,它显示了很多错误。 任何帮助都将得到批准
此致
安东尼
// // //! 此结构描述了通用描述符标头。 这些字段为// ! 所有有效 USB 描述符的开头。 //// ***************** typedef 结构 { // //! 表示的此描述符的长度(包括此长度字节) //! 以字节为单位。 // unsigned char bLength; // //! 描述符的类型标识符、其信息紧随其后。 原因 //! 标准描述符、例如、此字段可以包含 //! USB_DTYPE_DEVICE 来标识器件描述符或 USB_DTYPE_终结 点 //! 以标识端点描述符。 // 无符号字符 bDescriptionType; } USBLIB_packed tDescriptionorHeader; //********* // //! 此结构描述了 USB //!中定义的 USB 设备描述符 2.0规范第9.1.1节。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有器件描述符都是 //! 18字节长。 // unsigned char bLength; // //! 描述符的类型。 对于器件描述符、这将是 //! USB_DTYPE_DEVICE (1)。 // unsigned char b 描述符类型; // //! BCD 格式的 USB 规范版本号。 对于 USB 2.0、这是 //! 将是0x0200。 // unsigned short bcdusb; // //! 器件类代码。 // unsigned char bDeviceClass; // //! 器件子类代码。 此值限定中的值 //! b DeviceClass 字段。 // unsigned char bDeviceSubClass; // //! 器件协议代码。 该值由的值限定 //! bDeviceClass 和 bDeviceSubClass。 // unsigned char bDeviceProtocol; // //! 端点0的最大数据包大小。 有效值为8、16、32 //! 和64。 // unsigned char bMaxPacketSize0; // //! 由 USB-IF 分配的器件供应商 ID (VID)。 // 无符号短整型 idVendor; // //! 由制造商分配的器件产品 ID (PID)。 // 无符号短整型 idProduct; // //! BCD 格式的器件版本号。 // unsigned short bcdDevice; // //! 描述制造商的字符串描述符的索引。 // unsigned char 制造商; // //! 描述产品的字符串描述符的索引。 // unsigned char iProduct; // //! 描述器件串行的字符串描述符的索引 //! 数字。 // unsigned char iSerialNumber; // //! 器件提供的可能配置的数量。 这种情况 //! 字段表示不同配置描述符的数量 //! 器件提供的功能。 // unsigned char bNumConfigurations; } USBLIB_packed tDeviceDescriptor; //************* //// tDeviceDescriptor.bDeviceClass 字段中使用的 USB Device Class 代码。 // bDeviceSubClass 和 bDeviceProtocol 字段的定义是特定于器件 的//并可在相应的器件类头文件中找到。 //// ***************** #define USB_class_device 0x00 #define USB_class_audio 0x01 #define USB_class_CDC 0x02 #define USB_class_HID 0x03 #define USB_class_physical 0x05 #define USB_class_image 0x06 #define USB_class_printer 0x07 #define USB_class_mass_storage 0x08 #define USB_class_hub 0x09 #define USB_class_CDC_data 0x0A #define USB_class_smart_card 0x0B #define USB_class_security 0x0D #define USB_class_video 0x0E #define USB_class_health医护0x0F #define USB_class_DIAG_device 0xdc #define USB_class_wireless 0xe0 #define USB_class_misc 0xef #define USB_class_app_specific 0xFE #define USB_class_vend_specific 0xff #define USB_class_events 0xFFFFFFFF //********* // ////未定义子类和协议的通用值。 //// ***************** #define USB_subclass_undefined 0x00 #define USB_Protocol_undefined 0x00 //********* // //以下是其他子类值。 //// ***************** #define USB_MISC_SUBCLASS_SYNC 0x01 #define USB_MISC_SUBCLASS_COMMON 0x02 //********* // //以下是其他协议值。 //// ***************** #define USB_MISC_PROTOCOL_IAD 0x01 //********* // //! 此结构描述 了//!中定义的 USB 器件限定符描述符 USB 2.0规范、第9.2.2节。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有器件限定符 //! 描述符的长度为10字节。 // unsigned char bLength; // //! 描述符的类型。 对于器件描述符、这将是 //! USB_DTYPE_DEVICE_QUAL (6)。 // unsigned char b 描述符类型; // //! BCD 格式的 USB 规范版本号。 对于 USB 2.0、这是 //! 将是0x0200。 // unsigned short bcdusb; // //! 器件类代码。 // unsigned char bDeviceClass; // //! 器件子类代码。 此值限定中的值 //! b DeviceClass 字段。 // unsigned char bDeviceSubClass; // //! 器件协议代码。 该值由的值限定 //! bDeviceClass 和 bDeviceSubClass。 // unsigned char bDeviceProtocol; // //! 端点0以某种速度运行时的最大数据包大小 //! 而不是高速。 // unsigned char bMaxPacketSize0; // //! 支持的其他速度配置的数量。 // unsigned char bNumConfigurations; // //! 保留供将来使用。 必须设置为零。 // unsigned char b 保留; } USBLIB_packed tDeviceQualifierDescriptor; //********* // //! 此结构描述 了//!中定义的 USB 配置描述符 USB 2.0规范第9.6.3节。 此结构也适用于 //! 第9.4.4节中定义的 USB 其他速度配置描述符。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有配置描述符 //! 为9字节长。 // unsigned char bLength; // //! 描述符的类型。 对于配置描述符、这将是 //! 为 USB_DTYPE_CONFIGURATION (2)。 // unsigned char b 描述符类型; // //! 为此配置返回的数据总长度。 这种情况 //! 包括所有描述符的组合长度(配置、 //! 为此返回的接口、端点和类或供应商特定) //! 配置。 // 无符号短整型 wTotalLength; // //! 此配置支持的接口数。 // unsigned char bNumInterfaces; // //! 用作 SetConfiguration 标准请求参数的值 //! 以选择此配置。 // unsigned char bConfigurationValue; // //! 描述此配置的字符串描述符的索引。 // unsigned char iConfiguration; // //! 配置的属性。 // unsigned bmchar Attributes; // //! USB 器件在这种情况下的最大总线功耗 //! 在器件完全运行时进行配置。 这表示 //! 以2mA 为单位、例如、100表示200mA。 // unsigned char bMaxPower; } USBLIB_packed tConfigDescriptor; //************* // //构建分配给字段的值时使用的标志 // tConfigDescriptor.bmAttributes。 请注意、位7是保留的并且必须被设定 //为1。 //// ***************** #define USB_CONF_ATTR_PWR_M 0xC0 #define USB_CONF_ATTR_SELF 0xC0 #define USB_CONF_ATTR_BUS_PWR 0x80 #define USB_CONF_ATTR_RWAKE 0xA0 //********* // //! 此结构描述了 USB //!中定义的 USB 接口描述符 2.0规范第9.6.5节。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有接口描述符 //! 为9字节长。 // unsigned char bLength; // //! 描述符的类型。 对于接口描述符、这将是 //! 应为 USB_DTYPE_interface (4)。 // unsigned char b 描述符类型; // //! 该接口的编号。 这是中的一个基于零的索引 //! 此配置支持的并发接口阵列。 // unsigned char bInterfaceNumber; // //! 用于为接口选择此备用设置的值 //! 在 bInterfaceNumber 中定义。 // unsigned char bAlternateSetting; // //! 此接口使用的端点数量(不包括端点) //! 零)。 // unsigned char bNumEndpoints; // //! 由 USB-IF 分配的接口类代码。 // unsigned char bInterfaceClass; // //! 由 USB-IF 分配的接口子类代码。 // unsigned char bInterfaceSubClass; // //! 由 USB-IF 分配的接口协议代码。 // unsigned char bInterfaceProtocol; // //! 描述此接口的字符串描述符的索引。 // unsigned char iInterface; } USBLIB_packed tInterfaceDescriptor; //********* // //! 这个结构描述了 USB //!中定义的 USB 端点描述符 2.0规范第9.6.6节。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有端点描述符 //! 为7字节长。 // unsigned char bLength; // //! 描述符的类型。 对于端点描述符、这将是 //! 应为 USB_DTYPE_终结 点(5)。 // unsigned char b 描述符类型; // //! 端点的地址。 此位域包含端点号 //! 使用标志 USB_EP_DESC_OUT 或 USB_EP_DESC_IN 进行 OR 运算以指示 //! 端点方向。 // unsigned char bEndpointAddress; // //! 端点传输类型 USB_EP_ATTR_CONTROL、USB_EP_ATTR_ISOC //! USB_EP_ATTR_BULK 或 USB_EP_ATTR_INT、如果等时、则为附加 //! 指示使用类型和同步方法的标志。 // unsigned bmchar Attributes; // //! 此端点能够发送或的最大数据包大小 //! 选择此配置时接收。 用于高速 //! 等时端点或中断端点、位11和位12用于 //! 传递附加信息。 // unsigned short wMaxPacketSize; // //! 以帧或表示的数据传输的轮询间隔 //! 微帧、具体取决于运行速度。 // unsigned char bInterval; } USBLIB_packed tEndpointDescriptor; //************* // //构建分配给字段的值时使用的标志 // tEndpointDescriptor.bEndpointAddress。 //// ***************** #define USB_EP_DESC_OUT 0x00 #define USB_EP_DESC_IN 0x80 #define USB_EP_DESC_NUM_M 0x0F //********* // //掩码用于从 端点描述符的// wMaxPacketSize 字段中提取最大包大小(以字节为单位)。 //// ***************** #define USB_EP_MAX_PACKE_COUNT_M 0x07FF //********* // //// tEndpointDescriptor.bmAttributes 中使用的 Endpoint 属性。 //// ***************** #define USB_EP_ATTR_CONTROL 0x00 #define USB_EP_ATTR_ISOC 0x01 #define USB_EP_ATTR_BULK 0x02 #define USB_EP_ATTR_INT 0x03 #define USB_EP_ATTR_TYPE_M 0x03 #define USB_EP_ATTR_ISOC_M 0x0C #define USB_EP_ATTR_ISOC_NOSYNC 0x00 #define USB_EP_ATTR_ISOC_异 步 0x04 #define USB_EP_ATTR_ISOC_ADAPE 0x08 #define USB_EP_ATTR_ISOC_SYNC 0x0C #define USB_EP_ATTR_USAGE_M 0x30 #define USB_EP_ATTR_USAGE_DATA 0x00 #define USB_EP_ATTR_USAGE_FEEDBACK 0x10 #define USB_EP_ATTR_USAGE_IMPFEEDBACK 0x20 //********* // //! 此结构描述了定义 的索引0的 USB 字符串描述符//! USB 2.0规范第9.6-7节中的说明。 请注意、语言数量 //! IDS 是可变的、可以通过检查 bLength 来确定。 //!的数量 描述符中存在的语言 ID 由(((bLength - 2)/2)给出。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 该值将会变化 //! 具体取决于描述符中提供的语言代码的数量。 // unsigned char bLength; // //! 描述符的类型。 对于字符串描述符、这将是 //! USB_DTYPE_STRING (3)。 // unsigned char b 描述符类型; // //! 第一种支持的语言的语言代码(LANGID)。 请注意 //! 此描述符可能支持多种语言、在这种情况下、为 //! wLANGID 数组中的元素数量将增加、bLength 将增加 //! 进行相应更新。 // 无符号短整型 wLANGID[1]; } USBLIB_packed tString0描述符; //************* // //! 此结构描述了所有字符串索引的 USB 字符串描述符 //! USB 2.0规范第9.6-7节中定义的0以外的其他参数。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 该值将会增加2 //! 构成 Unicode 字符串的字节数 //! 描述符包含。 // unsigned char bLength; // //! 描述符的类型。 对于字符串描述符、这将是 //! USB_DTYPE_STRING (3)。 // unsigned char b 描述符类型; // //! Unicode 字符串的第一个字节。 此字符串不为 NULL //! 已终止。 其长度(以字节为单位)可通过减去2来计算 //! 从 bLength 域中的值中删除。 // unsigned char bString; } USBLIB_packed tStringDescriptor;