PC机或OTG设备,一个USB系统只能有一个主机 设备:1.集线器HUB:扩展主机接口,设备可以通过其接入主机 2.功能设备 物理连接:即USB电缆,USB使用差分信号传输数据,全速/高速模式电缆必须外层屏蔽铜质传输线 驱动程序通常由操作系统提供,独立于特定的应用程序和USB设备。 3. 主机端控制程序:包括硬件和软件,使USB设备能够被主机识别。 (差分信号) 1 Full Speed :Differential(差分信号) 0 6 USB协议 6.1 USB基本规范 USB在逻辑上被分为三层:信号层、协议层、数据传输层 ,并且在数据中保存时间戳的信息 中断传输(interrput transfers):周期性,低频率,允许有限延迟的通信 大容量数据传输(bulk transfers):非周期性,大容量突发数据的通信 descriptor) 获取(configuration descriptor) 获取(string descriptor)(可选) 配置 6.6.1 USB描述符 通过一套描述符,USB设备向
包(Packet) 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数据在 USB总线上的传输以包为单位,包只能在帧内传输。 然后,设备将数据通过DATA1/DATA0数据信息包回传给主机。 控制写入 是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。 紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备。 因此中断传输的方向总是从USB设备到主机。 DATA0或DATA1中的包含的是中断信息,而不是中断数据。
腾讯云即时通信,1分钟跑通DEMO,结合开源 UI 库,快速搭建IM 应用,全球多点覆盖
mod=viewthread&tid=99710 ---- 说明: 1、各种的CDC,HID,MSC,虚拟网卡,WinUSB,Audio等,还有复合USB设备,Host外挂各种USB设备统统做个案例。 并且制作HID,BULK等通信机制的上位机例子。 2、之所以使用RL-USB作为USB协议栈的首个教程,主要是简单易用,各家M内核芯片都可以方便的移植。 3、基本上掌握了这个,大部分项目需要的USB通信我们基本都可以方便的实现。并且RL-USB的设备源码已经通过DAPLINK开源了出来,大家要查看也十分方便。 V5-4002_RL-USB Template.7z (1.54MB) ? V5-4003_RL-USB Debug Mode.7z (1.55MB) 目录: ? ? RL-USB框图: ? 各种常用功能,基本都整好了。 ?
好久没有写文章了,年前公司新开了一个项目,是和usb转串口通信相关的,需求是用安卓平板通过usb转接后与好几个外设进行通信,一直忙到最近,才慢慢闲下来,趁着这个周末不忙,记录下usb转串口通信开发的基本流程 我们开发使用的是usb主机模式,即:安卓平板作为主机,usb外设作为从机进行数据通信。 2.打开设备 接下来,我们需要打开刚刚搜索到的usb设备,我们可以将平板与usb外设之间的连接想象成一个通道,只有把通道的门打开后,两边才能进行通信。 1.向usb外设发送数据 在第二步中,我们已经获取了数据的输出端口usbEndpointIn,我们向外设发送数据就是通过这个端口来实现的。 转串口通信的基本流程,有些地方写的不是很全面,比如接收usb外设数据的方法应该还有别的,不足之处欢迎指正。
不管怎样,为了简便开发,通信选择串口通信。 pip insatll pyserial 查找可用端口 硬件连接:stm32使用ch340g的串口输出,接入到树莓派的USB口上。 通过如下代码查找端口,通过拔插观察实际端口。 的标号 python3 -m serial.tools.list_ports 最简测试代码 进入python3环境后,该代码实现了读取数据(这里stm32端一直在发送数据,接收到数据表示正常) 发送数据通过
一、环境介绍 操作系统: ubuntu18.04 64位 二、usbmon使用方法 2.1 功能介绍 usbmon 即 usb monitor,是 linux 内置的 usb 抓包工具。 Virtual USB Hub Bus 003 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 003 Device 000: ID 148f:5370 Ralink Technology, Corp. 2.6 监控指定总线上通信的数据 为了只看这个想要的设备数据,可以过滤一下。 后面的 "1:010" ,1表示总线编号。 010表示设备编号。 通过lsusb命令可以看到。 cat /sys/kernel/debug/usb/usbmon/1u | grep "1:010" 输入: cat /sys/kernel/debug/usb/usbmon/3u 读取总线上全部数据
本文告诉大家如何在 dot net core 使用 usb 首先需要打开 Nuget 安装 CoreCompat.LibUsbDotNet ,这是一个usb连接的库。 ? 获得通知 如果需要获得 USB 通知,那么可以通过下面的代码 static void Main(string[] args) { Console.WriteLine 需要注意,通过上面的这个方法只能获得hid设备的通知 读写 在开始读写的时候就需要先知道 usb 的 pid 和 vid ,其中 vid 是 Vendor ID,供应商识别码。 VID由供应商向USB-IF(Implementers Forum,应用者论坛)申请,除了一些诡异的 usb 会重复之外,可以认为不同公司的 vid 是不同。 串口通信 如果需要在 dotnet core 引用 System.IO.Ports 可以在程序包管理器输入下面代码 Install-Package System.IO.Ports -Source https
(3)缺省态 USB在被配置之前,通过地址0与主机进行通信。例如: ? (4)地址态 经过了配置,USB设备复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态;例如: ? (5)配置态 通过各种标准的USB请求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置。例如: ? 说了这么多,那USB又是怎么来识别设备的呢?通过枚举。 ? 枚举将是整个USB学习的重中之重,枚举就是主机从设备读取各种描述符信息,这样主机就可以根据这些信息加载合适的的驱动程序,从而知道是什么类型的设备,如何进行通信等等。
USB Battery Charging V1.2 Specification 定义了USB充电器的类型或者叫做充电源。 1. 然而这些DCP端口不支持通过USB接口进行数据传输。 电池充电规格书定义了数据线应该被短接在这种DCP情况下。 充电类型的检查依赖于这些数据线。 高通平台的电池充电是被PMIC或者外部的充电芯片所控制。它必须知到充电器类型和最大充电电流。 原生的电池驱动直接与PMIC进行交互。 这个驱动通知PMIC开始使用USB VBUS进行充电并且指明可以获取的最大的电流。 PS:这里的电池驱动估计说的不对,或者我自己理解有误,从代码上看应该是USB的驱动检测到充电器类型之后,把这一信息通知给PMIC. 3 充电检测算法 在通用的充电器检测模型中,提到了几个阶段: Data
本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么。 需要在项目右击引用,点击程序集,搜索 System.Management 然后安装他 然后使用下面的代码就可以获得设备的 usb 请看代码 static List<(string DeviceID } collection.Dispose(); return devices; } 如果需要判断是否存在某个 usb ,就通过 pid vid 判断,判断的方法是拿PNPDeviceID字符串比较 参见:c# 获取移动硬盘信息、监听移动设备的弹出与插入事件 - Chris Cheung - 博客园 如果发现找不到 usb ,可能是在开机的时候进行找usb,一般需要开机之后很久才会把所有的设备添加,所以如果找不到,就看开机的时间,如果太短,那么可能是因为程序太快去查。
现在大部分USB设备(比如USB接口的鼠标、键盘、闪存、U盘等等)都是采用了USB通用驱动,而你的系统有USB通用驱动的话(比如XP就内建了USB通用驱动)就能用。 1994 年,Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom 等 7 家世界著名的计算机和通信公司成立了 USB 论坛,花了近两年的时间形成了统一的意见 所谓 USB 互连实际上是指一种 USB 器件和 USB 主机进行通信的方法。 USB 主机是整个 USB 系统通信的控制方,它通过主机控制器与 USB设备进行交互。 本篇到此结束,下一篇带来基于 FPGA 的 USB 接口控制器设计(VHDL)(中),会介绍USB通信原理,包括USB 传输模型、USB 设备检测过程;USB 系统开发,包括USB 硬件系统,USB 接口芯片
Android OTG之USB转串口模块通讯 微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板 2.分析及实现思路 智能门锁的控制是通过使用 433射频(不了解的请百度)来进行通讯的; 平板是没法与智能门锁直接进行通讯,但是厂家提供了一个433通讯模块(支持串口); 而平板(支持OTG)是支持USB 3.主要代码实现 3.1初始化USB转串口模块 由于我们选用的是CH340模块,我们先导入ch340的 jar 包,然后在代码中检查手机/平板是否支持USB HOST模式,如果支持我们就初始化通讯时的相关参数 初始化完成之后,我们就可以打开USB进行通讯了,同时初始化完成之后我们需要开启一个读取数据的线程,这样,一旦收到数据或者相应的响应包(一般也叫ACK)我们就可以进行相应的处理了。 USB设备等信息。
本文实例为大家分享了android通过usb读取U盘的具体代码,供大家参考,具体内容如下 1.关联 compile ‘com.github.mjdev:libaums:+’ 2.权限设置 <uses-permission = null) { mContext.unregisterReceiver(UDiskMountedReceiver); } } /** * 检查usb设备的权限 * @param device * @ position storageDevices.length) { return null; } else { return storageDevices[position]; } } /** * 获取usb ) { mOnUDiskCallBack.onPermissionCallBack(); } break; case UsbManager.ACTION_USB_DEVICE_ATTACHED: //usb { mOnUDiskCallBack.onAttachDeviceCallBack(); } break; case UsbManager.ACTION_USB_DEVICE_DETACHED: //usb
零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一。 硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。 USB_ID:输入信号,由 USB OTG 协议定义,用于识别 USB 口所接设备的默认角色(host or device)。 2个两用OTG设备连接在一起时可交替以主机和从机的方式工作,这个特点兼容了现有USB 规范主机/外设的结构模型。OTG主机负责初始化数据通信的任务,比如:总线复位、获取USB 各种描述符和配置设备。 自供电设备配置一个默认的控制通道,由他提供该设备的配置和状态等信息。 一问一答: 什么是USB OTG? USB OTG是USB 2.0的补充规范 2. 设备,同时也可以发下host设备 做usb通信,首先要先弄清楚哪边是HOST那边是SLAVE 比如你的android手机做host,要获得slave,用UsbDevice表示slave
只需要用一个稍作伪装过的USB设备,插到电脑的USB口中,它就能监听临近USB接口泄露出出来的电信号,如果临近USB口接了键盘的话,那么通过对其进行分析就能获取到用户的键击记录。 近日, 来自澳大利亚阿德莱德大学的研究人员演示了通过USB小工具来监控旁边插入的USB设备的数据流动。 这个间谍小工具可以拦截相邻端口的电信号,来把敏感信息泄露给攻击者。 这在技术上定义为“通道间串扰泄露”。 串扰: 串扰(英文:crosstalk),又称串音干扰,是电子学和通信学的专业术语。 串扰在电子学上是指两条信号线之间的耦合现象。 “重点就是你们应该在完全信任别人的情况下再连接USB,对用户来说,通常就是不要轻易连接别人的设备。对于那些对安全有更高要求的企业组织者而言,就更需要在意整个供应链的安全问题了。 ? 研究人员测试了50个USB设备,其中的90%都会被通道间串扰泄露攻击。 “重点就是不要随便通过USB连那些你不完全信任的设备,”研究人员总结道。
通过MDK的RTE开发环境可以一键添加。 使用MDK基于对话框的配置向导,可以很方便的完成MDK的配置。 注:每个USB端点要用一个信号量。对于自定义类,如果用到了一个输入端点和一个输出端点,那么还需要额外占用两个信号量。 3.4.4 RTX5定时器组 USB Host需要用到RTX5的定时器组。 3.4.5 RTX5信号量 每个例化需要占用一个信号量。 3.4.7 注意事项 USB Host的阻塞API操作是通过RTX5的任务间事件标志实现,用到了bit0到bit12,用户的USB Host应用程序不可再使用这几个bit。 3.5 RL-USB优势 RL-USB的最大优势就是简单易用,创建各种类和USB复合设备都可以通过MDK RTE环境一键添加: ? 一键添加后,配置也十分方便: ?
本文,我将主要通过上图的分类方式来探讨针对USB的攻击向量问题。最上层涉及到更多关于人类应用、业务的基本交互场景。传输层包括设备的固件、协议栈等。物理层则主要描述USB总线上的通信问题。 0xA1 外部威胁 大部分安全从业人员认为,所有的USB攻击都是主机插入了外部usb设备,而这些设备通常带有不同形式的恶意代码。恶意人员会想方设法的欺骗用户,将一个不可信的设备插入到他们的主机中。 0xB2 数据过滤 由于USB设备通常不会对主机上正在通信的应用程序进行身份验证,因此应用程序可能会对USB设备写入或者读取数据。 四、物理层 物理层攻击包括对USB总线通信中的机密性和完整性的攻击。 0xD1 物理窃听 无论数据是否敏感,传输的过程中总是需要暴露在管道一段时间。 我们甚至可以通过USB电流嗅探,示波器信道采集等方式进行攻击,从信道数据可以获得当前主机的重要特征信息,恶意智能手机可以使用该信息来组成攻击目标的提权shellcode。
三、USB通信原理 ? USB 通信可以分为两大类:一类是用来设置 USB 设备的配置;另一类是用来设置应用程序的通信。 之后,主机会通过此通道向设备发送一系列的标准 USB 请求以获取所需的信息,设备必须响应这些请求并且采取适当的动作。这个过程称为 USB 的总线枚举。 (1)主机控制器 USB 主机控制器的功能是实现标准的 USB 主机串口引擎(SIE)和根集线器功能,它们一般通过 PCI 或其他总线和主机 CPU 通信。 该特性为 USB 器件、集线器和 USB 通信状态提供了很方便的指示,作为一个诊断工具对设备的隔离故障是很有用的。 设计的基本要求是通过 FPGA 芯片控制 USB 芯片,实现实验板和 PC 机之间的 USB 接口数据通信,来模拟一个硬件加密设备的功能。
即时通信 IM(Instant Messaging)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富媒体消息收发,全面满足通信需要。
扫码关注云+社区
领取腾讯云代金券