——葛洪 分享一下开源项目scrcpy GitHub - Genymobile/scrcpy: Display and control your Android device 它可以用电脑显示和控制您的 Android 设备 通过 USB 或 TCP/IP 连接的 Android 设备(视频和音频),并允许使用计算机的键盘和鼠标控制设备。 ) C7Y6R19923000299 device HLK_AL00 ERROR: --> (usb) JR8XY9EEIJGQQSJV ://github.com/Genymobile/scrcpy> INFO: ADB device found: INFO: --> (usb) C7Y6R19923000299 device HLK_AL00 INFO: (usb) JR8XY9EEIJGQQSJV device RMX3350 /opt/homebrew
(1) 控制传输模式,控制传输用于在外设初次连接时对器件进行配置;对外设的状态进行实时检测;对控制命令的传送等;也可以在器件配置完成后被客户软件用于其它目的。 Endpoint 0信道只可以采用控制传送的方式。 银行交互设备,密码键盘 (2) 块传送模式(bulk),块传送用于进行批量的、非实时的数据传输。 采用块传送方式的信道所占用的 USB 带宽,在实时带宽分配中具有最高的优先级 (3) 同步传输模式,同步传输适用于那些要求资料连续地、实时地、以固定的数据传输率产生、传送并消耗的场合,如数字录像机等。 ,但是,我们大部分情况下还需要对usb串口进行一些配置,比如波特率,停止位,数据控制等,不然两边配置不同,收到的数据会乱码。 3.数据传输 到这里,我们已经可以与usb外设进行数据传输了,首先来看怎么向usb设备发送数据。
为什么 USB 传输速度很重要 无论 "Delta Push" 是否被启用,总会有数据传输到设备上。 如果用的是模拟器,数据会通过 TCP/IP 进行传输,但是如果用的是真机则会用到 USB,USB 传输速度越快,等待时间越短,程序迭代速度也就越快。 但坏消息是,USB 3.0 的设备常常以 USB 2.0 的速度在传输数据。 △ Nexus 6P 标配的 Type-A 转 C 数据线 上图所示是 Nexus 6P 手机标配的数据线,这台手机是使用 USB 2.0 协议,并通过 USB Type-C 接口连接,这些数据线中只有 原因是在开发过程中,如果您一直在使用 Nexus 6P 的这条数据线连接其他不同的手机 (部分手机的 Type-C 接口可能会使用 USB 3.0 协议,而这条数据线最高只能有 2.0 协议的速度),那您的整体开发体验和开发效率可能会降低不少
TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。 TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。 TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由 TCP连接双方的应用层解释。 这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。 T C P的流量控制由连接的每一端通过声明的窗口大小来提供(滑动窗口技术)。 窗口大小是一个 16 bit字段,因而窗口大小最大为 6 5 5 3 5字节。 小结 TCP提供了一种可靠的面向连接的字节流运输层服务。 TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; TCP提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。
TCP 的传输过程与可靠性 1. TCP 的每一端都有固定大小的缓冲空间,用于提供流量控制,TCP 接收端只允许另一端发送接收端缓冲区所能容纳的数据,以防止较慢主机的缓冲区溢出 3.
本文介绍OpenHarmony开源鸿蒙系统的USB控制传输功能实现及相关代码示例,演示设备:触觉智能RK3576开发板Purple Pi OH2演示,相关参数可以查看我的社区主页。 OpenHarmony的USB通信介绍实现OpenHarmony开源鸿蒙设备与外部USB设备之间的连接管理、数据收发及设备信息交互,支持对USB 设备的枚举、配置及数据传输控制,适用于各类USB接口进行设备通信的场景 USB控制传输主要用于主机(Host)和设备(Device)进行设备状态的获取和设置,进行设备属性状态的的控制。根据设备支持的端点类型支持控制传输读和写。 hasRight) { this.log = 'USB设备权限获取失败'; return; } /数据传输模块实现与 USB 设备的双向数据传输,支持批量传输 主机→USB 设备进行数据发送,适用于向 USB 设备发送配置命令、控制参数等场景,需选择 OUT方向端点(端点地址 direction=0),流程包括:解析用户输入的16进制数据、建立设备通信管道、声明目标接口
控制器的名称 3.代码分析 3.1.初始化 usb gadget configfs模块的初始化函数为gadget_cfs_init。 执行流程如下: 判断输入的USB控制器名称,若输出为空或者是none,则解除usb_gadget_driver和底层USB控制器的绑定。 反之调用usb_udc_attach_driver函数进行匹配USB设备控制器。 遍历udc_list链表,查找fe800000.dwc3 USB设备控制器。 调用UDC驱动接口usb_gadget_udc_start使能USB设备控制器。 调用UDC驱动接口usb_udc_connect_control连接USB主机控制器,这样USB主机就能识别并枚举USB设备。
8、USB端点 根据 USB 规范,设备端点是 USB 设备中一个独特的可寻址部分,它作为主机和设备间通信流的信息源或库。USB 枚举和配置一节介绍了设备向默认地址做出响应的步骤。 USB 规范对高速和全速设备的端点数量进行了限制,即每个方向最多使用 16 个端点(16 个 IN、16 个 OUT,总共为 32 个),其中不包含控制端点 0 IN 和 0 OUT 在内。 各端点使用循环冗余校验(CRC)来检测传输中发生的错误。CRC 是一个用于检测错误的计算值。USB 规范中对实际的计算公式进行了解释,这些计算由 USB 硬件进行,这样可确保能够发出正确的响应。 四种端点和各自的特性如下: 控制端点 — 这些端点支持控制传输(即所有设备支持的传输)。控制传输通过总线发送和接收设备的信息。它的优点是可以保证传输准确。它能够立即检测到错误的发生,并重新发送数据。 控制传输在低速和全速设备上使用 10%的保留带宽(在高速设备上为 20%)并提供 USB 系统级控制。 中断端点 — 这些端点支持中断传输。这种传输非常适合需要使用高度可靠的方式来传输少量数据的设备。
OTG是一种新的USB传输技术,是On-The-Go的缩写,是一项新兴技术,主要应用于不同的设备或移动设备间的联接,进行数据交换。 图片手机上的OTG功能的作用1、作为电源给另一台手机或平板供电需要设备:一根OTG线+一根USB数据线手机A插OTG线,通过USB数据线将另一端与手机或平板B相连,就可以用A给B充电了。 Type-C 标准中的 Bridge 设备而开发的 USB-C DRP 接口 USB PD 通信芯片。 具备切换 Data Role 功能,实现边充电边听歌需求,并针对各大手机品牌的 USB-C 兼容性进行了 特别优化,适合于手机音频,USB2.0数据传输转接器应用场景。 图片从下图我们可以看到,此PD芯片的外部元器件非常简洁,仅需要2颗MOS控制充放电管理,就能实现边充电边OTG的功能,D+D-直接连到所需的功能处IC即可。图片
流量控制 背景:假设我是一个水果店老板,你是每天需要给我补货的人,我有一个仓库是放水果的,容量是3000,这是补货的人给我发的货数量就不能大于我仓库的容量,如果今天来补了3000,假设我第二天一箱都没卖出去 上面的例子中,水果店老板就是接收者;补货人就是发送者;仓库就是接收缓冲区 在前文提到的滑动窗口特性中,滑动窗口不能无限大,传输效率太快了接收方反应不过来,应该根据接收方的处理能力来反向制衡发送方的发送速度 从发送方发过来的数据都先到了接收缓冲区(相当于仓库),主机B的应用程序调用read()方法,就在接收缓冲区中读取数据,被read读到的数据就可以从缓冲区中删除了,这时接收方的剩余大小就会变大(相当于阻塞队列) 拥塞控制 在以上的流量控制介绍完,我们多少会有些疑问,第一个窗口大小是如何判断的,这就需要用到拥塞控制:它和流量控制共同决定发送方窗口的大小。 拥塞控制是靠路网络传输路径上的拥堵程度,只能通过“反复试探”的方式,逐渐时弹出应该用多大的窗口, 实际发送的滑动窗口大小 = min(拥塞窗口大小,流量控制窗口大小) 由上图可以看出来: 从一个较小的窗口开始试探
关于USB显示器跟HDMI之类的显示器有本质区别,我们需要实现的有两个: 在USB上插入一个显示器,怎么让windows系统能识别到显示器 如何让USB显示器显示对应的屏幕内容。 返回入口函数地址DpiInitialize给WDDM驱动,被DisplayProxy拦截,替换成自己的函数proxyDpiInitialize 5 驱动实现各个miniport回调函数,复制给结构体 6
1.RK3399 USB 下图是RK3399 SOC的框图。RK3399包含了2个USB2.0 Host控制器;两个USB3.0 OTG控制器,同时兼容USB2.0。 双工操作性能 (3)USB3.0设备特性 7个输入(IN)端点,包括端点0 6个输出(OUT)端点,包括端点0 13个端点传输资源,每个端点对应一个 灵活的端点配置,适用于多种应用/USB配置模式 硬件自动处理 ERDY和burst 基于流(Stream-based)的批量端点可以自动控制启动数据移动 在数据缓冲区中使用等时数据的等时端点 灵活的描述符,具有丰富的功能集,以支持缓冲区中断调节,多次传输,同步,控制和分散的缓冲支持 port 拥有xHCI调试能力 USB3.0/USB2.0并发传输,最大达8.48Gbps的带宽 支持标准或开源的xHCI和类驱动程序 (5)USB 3.0 Dual-Role Device (DRD 控制器内部的USB2.0和USB3.0的PHY和MAC是独立的,各自使用自己的硬件。
1.概述 如下图所示,USB控制器可以呈现出两种不同的状态。USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动。 USB控制器作为Device时,称为USB设备控制器,使用UDC(usb device controller)驱动。本节只分析USB控制器作为Device时的驱动框架。 USB设备控制器通过USB线缆连接USB主机控制器,负责USB数据的发送和接收。 usb_gadget_ops是USB设备控制器的硬件操作函数,包含启动USB设备控制器、停止USB设备控制器、vbus电源等功能。ep0表示端点0,驱动注册时会提前分配好,用于响应控制请求。 )(struct usb_gadget *, const struct usb_ctrlrequest *); // 当主机断开时,所有传输停止后调用,可能会在中断中调用,不可睡眠 void
Transmission Control Protocol (TCP) 用于网络通信的传输控制和网络协议套件,包括很多协议,其中最主要的是TCP和IP协议。 IP协议用于处理数据包,TCP则主要用于网络连接的建立及数据的传输,保障数据包的的可靠传输及传输顺序。 作为IP协议的补充,TCP通过提供可靠的,流式传输的连接,协议弥补了IP协议的很多不足。 可靠传输:头信息中的序号字段用于保障数据的传输及接收,在确认数据丢失的情况下,TCP协议会启动数据的重新传输。 网络自适应:TCP会根据网络状况,动态的进行传输控制,以在不影响网络的情况下,达到最大吞吐。 流控制:TCP负责管理数据缓冲区,协调处理网络冲突以避免缓冲区溢出。 头信息长度:4字节的头信息长度 标志位:6位标志位用以标识传输数据的类型及状态,部分标志位可以同时使用 校验数据 流控制:流控制是通过数据序号进行控制的,发送序号及确认序号。
第17章 TCP:传输控制协议 17.1 引言 本章将介绍T C P为应用层提供的服务,以及 T C P首部中的各个字段。随后的几章我们在了解T C P的工作过程中将对这些字段作详细介绍。 第1 8章描述如何建立和终止一个T C P连接,第1 9和第2 0章将了解正常的数据传输过程,包括交互使用(远程登录)和批量数据传送(文件传输)。
检查各种传输类型的参数是否设置正确。 对于控制传输直接返回0,控制传输使用端点0,无法被匹配 对于等时传输,若使用全速模式则最大包长为1023字节。 主机从不发送NAK,等时传输不使用NAK。 STALL(失败) 表示不被支持的控制请求、控制请求失败或端点失败。 设备在收到不支持的控制请求时,将在数据或状态阶段返回STALL。 为了解决STALL,主机会发送另一个设置信息包,开始新的控制传输。USB 2.0规范称这种失败类型为“协议失败”(protocol stall)。 功能失败的控制端点必须正常响应其他请求,以监视和控制失败状态。端点”能够响应请求“是指能够通信且因此不能被设为设备。等时传输不使用STALL。超高速控制端点不使用功能失败。 清除ep0_out端点pending_list上所有USB请求。 设置ep0_ou端点控制传输的阶段为EP0_SETUP_PHASE,准备被主机枚举。
针对多口USB PD的应用,乐得瑞重磅推出3组6通道CC的USB PD3.1控制SOC芯片LDR6020系列。 乐得瑞LDR6020系列图片LDR6020是带有3组6路DRP USB-C及PD通信协议处理模块和USB2.0 Device模块的16位RISC MCU,拥有USB PD3.1通信功能,具有262字节非折叠 图片在多口移动电源的应用中,LDR6020能很好的控制每个USB Type-C接口的充放电管理,并且休眠模式下的电流小于5μA,非常适合带电池的USB Type-C接口设备。 乐得瑞LDR6020P图片LDR6020P是内置3组6路DRP USB-C及PD通信协议处理模块,两路20V VBUS控制MOS,16位RISC MCU的电源管理芯片,在LDR6020的基础上,加入了两路耐 总结乐得瑞科技一直专注于USB-C接口控制芯片的设计研发,于2015年比多数同行提早一年研发出了USB-C接口控制芯片产品,并且一直持续研发迭代,始终保持先进技术水平。
只有两个模块都初始化完毕,USB3.0控制器才能正常工作。本节只分析USB驱动早期初始化部分。 2.设备树 下面是USB3.0控制器的设备树节点。 // 端点0控制传输的trb // 使用kzalloc函数分配的, 不是dma_alloc_coherent函数 // Get Status和Set Sel等标准请求需要用到该预分配的 ]; // USB主机控制器资源 // 事件buffer,控制器会将传输的事件信息保存到该缓冲区中,由软件统一处理 struct dwc3_event_buffer 控制器事件传输到dwc3_event_buffer后由CPU处理 (4)核心初始化和USB模式初始化,后面详细分析 (5)初始化调试文件,具体如下图所示,用户可以在用户空间获取USB控制器信息和控制USB 控制器硬件,主要流程如下: (1)获取USB控制器IP的版本,便于后续进行不同的配置,USB控制器不同IP版本之间有差别,将Linux内核版本号写入USB控制器寄存器,以便发现某些版本下的bug (2)
TCP报文段结构 TCP即传输控制协议(Transmission Control Protocol ),它是Internet传输层协议,提供面向连接、 可靠、 有序、 字节流 传输服务。 保留字段:占6位。保留为今后使用,目前值为0。 5. URG、ACK、PSH、RST、SYN、FIN各占1位。为标志位字段; 各占1位,取值为0或1。 (1). SYN:同步SYN=1,该TCP报文段是一个建立新连接请求控制段或者同意建立新连接的确认段; (6). FIN:终止FIN=1,TCP报文段的发送端数据已经发送完毕,请求释放连接。 6. SYN=1:建立连接请求控制段 。 seq=x:表示传输的报文段的第1个数据字节的序列号是x,此序列号代表整个报文段的序号,(sequence number,序号的意思)。 查错检测,利用差错编码实现数据包传输过程中的比特查错检测(甚至纠正)。 5. 重传,发送发重新发送接收方没有正确接收的数据。 ? 6. 计时器,在发送发引入计时器,解决数据丢失问题。
USB总线以高效、便捷的特性得到广泛的应用,但是USB本身并不是专为工业控制开发的。工业控制具有实时性强,安全要求高,现场干扰大等特点,因此USB需要进行工业设计才能保证工业应用的可靠性。 支持工业供电、菊花链I/O扩展、浪涌和突波保护,适用于各种工业控制应用。 USB-5800工业特性解析 工业USB防误拔锁紧器:USB产品为方便连接,采用了弹片连接方式,但在工业控制场合,这种方式存在误碰,误拔的风险,使用工业USB防误拔锁紧器,对usb控制模块进行螺丝锁紧, USB断线监测,重连自动恢复:USB产品具有热插拔功能,为保证控制系统自动连接后继续正常运行,模块通过DEVICE ID进行模块锁定,防止出现模块恢复连接后产生混乱。 电压隔离; 6、输出保持:在严重电磁干扰条件下仍保持输出状态,以不干扰现场控制。