USB ID信号

USB ID信号

为了实现两个设备无需使用计算机主机完成通信链接,USB协会为此增加了其附属协议来解决现在这个问题,而引入了一个新的引脚:ID检测脚。

USB-OTG

USB-On The Go(OTG)。
USB 2.0规范定义了主机/外设关系,PC始终是主机,插入它的设备是外围设备。
随着PDA,数码相机和各种其他便携式设备的技术进步,需要直接互连这些设备而无需增加计算机。USB 2.0不支持此功能。

因此,为了克服这一限制,USB-OTG被发布。
USB-OTG是USB 2.0设备的附录,定义一类新的设备。这些设备旨在增加外围设备的功能,以包括有限的主机功能。

OTG特性

意味着只能使用USB-OTG连接两个设备。在USB-OTG下,用户插入两个设备以建立链接。
主机/外围设备协商由设备完成,无需用户提供任何输入以使体验舒适。
USB-OTG定义了两种类型的设备。

  • 默认为主机的A-设备
  • B-设备默认为外围设备。

OTG增加引脚-ID
USB标准的引脚,一共五个信号线。
在这里插入图片描述
(1)Vbus:电源引脚。
(2)D+:数据线+。
(3)D-:数据线-。
(4)GND:地参考。
(5)ID脚:Identification,检测的意思。ID线—以用于识别不同的电缆端点,mini-A插头(即A外设)中的ID引脚接地,mini-B插头(即B外设)中的ID引脚浮空。

当OTG设备检测到接地的ID引脚时,表示默认的是A设备(主机),而检测到ID引脚浮空的设备则认为是B设备(外设)。

支持USB OTG的设备(即可以做USB Host有可以做Slave的设备),USB_ID信号才有意义。
当设备检测到USB_ID信号为低时,表该设备应作为Host(主机,也称A设备)用。
当设备检测到USB_ID信号为高时,表示该设备作为Slave(外设,也称B设备)用。

实际的USB连接线中,是没有USB_ID这根线的。都是在接口部分直接确定上拉的,比如U盘。

  • 对于Host端,只需将连接线的USB_ID pin和地短接即可,
  • 对于Slave端,USB连接线的USB_ID pin是悬空的。(设备内部上拉)。
Reference

https://www.nxp.com/docs/en/brochure/75016113.pdf
http://apachetechnology.in/KC/Multimedia/USB/USB_Specs_OTG.pdf

2019-07-26人吃土一辈子,土吃人一回

  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
概述 USB2642是符合USB 2.0规范的高速集线器和读卡器组 合解决方案。这种完全集成的单芯片解决方案可提供 USB扩展和集成的闪存卡读卡器。 Microchip USB2642 在USB主机和当今流行的闪存卡格式之间提供超高速 接口。该控制器能够对以下闪存卡进行读写: • 安全数字(Secure Digital™, SD)卡 • SD高容量(SD High Capacity™, SDHC)卡 • SD扩展容量(SD Extended Capacity™, SDXC)卡 • 多媒体卡(MultiMediaCard™, MMC) • 嵌入式多媒体卡(Embedded MultiMediaCard™, eMMC) USB2642提供了一个用途广泛且经济高效的节能型 集线器控制器,具有2个下行USB 2.0端口和1个闪存介 质接口。闪存介质接口可支持超过35 MBps的持续传输 速率。 此外, USB2642还提供了1个I2C™转USB桥接器和1个 SD转USB桥接器。 I2C桥接器可控制以50 KHz串行时 钟运行的任何I2C从器件。 亮点 • PortMap - 灵活的端口映射和禁止顺序,支持多平台设计 • PortSwap - 可编程USB差分对引脚位置,它可使USB信号 线与连接器直接对齐,从而简化PCB设计 • PHYBoost - 可编程USB收发器驱动强度,用于恢复信号完 整性 特性 • 单芯片USB 2.0集线器控制器,具有2个外露高速下 行端口 • 专用闪存卡读卡器作为USB复合设备在内部连接到 集线器的第3个下行端口 • 通过单一来源实现集线器和闪存卡读卡器配置: - 使用外部SPI ROM配置内部代码 - 支持通过SPI闪存EEPROM执行外部代码 - 使用外部EEPROM时支持自定义供应商、产品 和语言ID • 支持全面的电源管理,每个下行端口均支持单端口 电源控制或多端口电源控制 • 集线器中的事务转换器(Transaction Translator, TT)支持运行FS和LS外设 • 支持24 MHz单晶振 • 通过USB主机控制外设I2C器件 • 通过内部或外部稳压输出1.8V内核电压 • 支持最高2 TB的存储寻址能力 • 符合RoHS标准的封装 - USB2642: 48引脚(7x7 mm²) QFN • 温度范围: - 商业级范围(0 °C至+70 °C) - 工业级范围(-40 °C至+85 °C) 目标应用 • 台式机和笔记本电脑 • 监视器和电视 • 笔记本电脑扩展坞 • 消费类影音 • 媒体播放器/查看器 • 打印机 • 闪存卡读卡器
USB-IF高速;,经认证符合通用串行总线规范修订版 2.0 接口在 8 位模式下与 ULPI 规范修订版 1.1 兼容 工业标准 UTMI+ 低引脚接口 (ULPI) 可将 54 UTMI+ 信号转换为标准的 12 引脚链路控制器接口 54.7mA 未配置电流(典型情况)— 适用于总线供电的应用 83uA 挂起电流(典型情况)— 适用于电池供电的应用 闭锁性能超过 150 mA(每 EIA/JESD 78),Class II ESD 防护水平达 ±8kV HBM(在不使用外部保护设备的情况下) 集成了各种保护措施,在每个第三方的测试设备中均可耐受 IEC61000-4-2 ESD 测试(±8kV 接触电压和 ±15kV 空气电压) 支持用于附带 LS 设备的 FS 集线器的 FS 前导码 (UTMI+ Level 3) 支持 HS SOF 和 LS keep-alive 脉冲 包括对可选的 On-The-Go (OTG) 协议的全面支持,在 On-The-Go 附录修订版 1.0a 规范中有详细说明 支持 OTG 主机协商协议 (HNP) 和会话请求协议 (SRP) 允许主机关闭 VBUS,以便在 OTG 应用中节省电池电量 通过内部比较器支持 VBUS 电平的 OTG 监视。包括对外部 VBUS 或故障监视器的支持。 低潜伏高速接收器(最高为 43 高速时钟)允许使用带 ULPI 包装器的潜伏 UTMI 链路 用于接口保护的 STP 上的集成下拉电阻,允许在使用低速链路(针对低功率情况对软件进行了配置)的情况下,可靠地启动 Link/PHY 内置的 1.8V 调节器允许在使用单个 3.3V 电源的情况下工作 对 ID、DP 和 DM 线路到 VBUS 或接地进行内部短路保护 集成的 24MHz 晶振支持水晶操作或 24MHz 外部时钟输入 用于 480MHz 高速 USB 操作的内部 PLL 工业运行温度:-40°C 到 +85°C 符合 RoHS 的 32 引脚无铅 QFN 封装(5 x 5 毫米, 高度为 0.90 毫米)
在C++中处理USB输入信号可以通过调用Windows平台提供的API函数来实现。其中,使用WinUSB API是处理USB输入信号的一种常见方式。以下是一个简单的例子,演示如何使用WinUSB API在C++中读取USB输入信号: ```cpp #include <Windows.h> #include <winusb.h> #define USB_VID 0x1234 #define USB_PID 0x5678 int main() { // 打开WinUSB设备 HANDLE hDev = NULL; hDev = CreateFile(L"\\\\.\\WinUSBInterface1", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (hDev == INVALID_HANDLE_VALUE) { printf("Failed to open device!\n"); return 1; } // 初始化WinUSB上下文 WINUSB_INTERFACE_HANDLE hWinUSB = NULL; BOOL bResult = WinUsb_Initialize(hDev, &hWinUSB); if (!bResult) { printf("Failed to initialize WinUSB context!\n"); return 1; } // 读取USB输入信号 UCHAR buffer[64] = { 0 }; ULONG length = 0; bResult = WinUsb_ReadPipe(hWinUSB, 0x81, buffer, sizeof(buffer), &length, NULL); if (!bResult) { printf("Failed to read USB input signal!\n"); return 1; } // 输出读取到的数据 printf("Read %d bytes from USB input signal: ", length); for (ULONG i = 0; i < length; i++) { printf("%02X ", buffer[i]); } printf("\n"); // 关闭WinUSB设备 WinUsb_Free(hWinUSB); CloseHandle(hDev); return 0; } ``` 需要注意的是,在使用WinUSB API进行USB输入信号处理时,需要先获取设备的句柄,然后通过WinUsb_Initialize函数初始化WinUSB上下文,最后使用WinUsb_ReadPipe函数读取USB输入信号。此外,还需要根据USB设备的厂商ID和产品ID来打开正确的设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值