串口和USB通信
- 格式:doc
- 大小:112.00 KB
- 文档页数:17
pc机和单片机之间的通信在当今信息化社会中,计算机技术得到了广泛应用和发展,而PC 机和单片机作为计算机的两个重要组成部分,对于信息传输和通信起着至关重要的作用。
本文将重点探讨PC机和单片机之间的通信方式以及相互之间的优缺点。
一、串口通信串口通信是PC机和单片机之间最常见的通信方式之一。
通过串口通信,PC机和单片机可以进行双向数据传输。
串口通信主要通过串行接口来实现,传输速度相对较慢,但稳定可靠,适用于数据量较小且对实时性要求不高的应用场景。
同时,串口通信具有成本低、易于实现的优点,因此在一些简单的嵌入式系统中得到了广泛应用。
二、并口通信并口通信是PC机和单片机之间另一种常见的通信方式。
并口通信通过并行接口来实现,传输速度相对较快,适用于数据量较大且对实时性要求较高的应用场景。
并口通信相对于串口通信而言,不仅传输速度更快,而且还可以一次传输多个数据位,提高了数据传输效率。
但与之相对的是,并口通信所需引脚较多,设计和布线相对复杂,因此在一些对硬件成本和实现难度要求较高的场景下使用较少。
三、USB通信USB通信作为一种常见的通信方式,具有较高的传输速度和较强的兼容性。
对于PC机和单片机之间的通信而言,通过USB接口连接PC机和单片机,可以实现双向数据传输。
USB通信支持热插拔和即插即用的特性,因此使用非常方便。
同时,USB接口还支持供电功能,可以为单片机提供电源。
但需要注意的是,USB通信相对于串口和并口通信而言,实现难度较大,需要借助专门的USB芯片或模块。
四、网络通信随着互联网的快速发展,PC机和单片机之间的网络通信越来越常见。
通过网络通信,PC机和单片机能够实现远程数据传输和控制。
网络通信可以基于以太网、Wi-Fi等多种网络协议进行,其传输速度和稳定性相对较高。
但与之相对应的是,网络通信的实现相对较为复杂,需要考虑网络协议、安全性等诸多因素,同时还需要保证网络的可靠性和稳定性。
五、无线通信无线通信作为一种便捷的通信方式,得到了广泛应用。
windows与android usb串口通信原理一、引言随着移动设备的普及,Android操作系统成为了最为主流的移动操作系统之一。
而在软硬件设备之间进行通信的需求也越来越高。
本文将介绍Windows与Android系统通过USB串口进行通信的原理。
二、USB串口通信概述USB串口通信是将数据通过串口进行传输的一种方式。
USB (Universal Serial Bus)是一种常见的计算机外设接口,而串口作为传统的通信接口之一,在一些设备中仍然得到广泛应用。
通过USB串口通信,可以实现不同设备之间的数据传输和通信。
三、Windows与Android USB串口通信原理1. USB驱动安装:在Windows平台上,如果需要与Android设备进行USB串口通信,首先需要确保系统已经安装了相应的驱动程序。
一般情况下,当连接一个支持USB串口通信的Android设备时,Windows系统会自动安装驱动程序。
但如果系统无法自动安装所需的驱动程序,用户需要手动安装驱动。
2. Android设备USB配置:为了确保Android设备能够以USB串口模式工作,需要在系统设置中进行相应的配置。
用户需要前往设备的设置菜单,并启用“开发者选项”。
在“开发者选项”中,打开“USB调试”和“USB串口调试”选项。
3. 应用程序通信:一旦安装了必要的驱动程序并进行了相关的设备配置,用户可以通过编写应用程序来实现Windows与Android之间的USB串口通信。
在Windows平台上,用户可以使用开发工具如Visual Studio来编写应用程序。
而在Android平台上,用户可以通过Android Studio等工具进行开发。
4. USB设备连接与数据传输:通过USB接口连接Windows计算机与Android设备,并确保设备处于串口调试模式下。
在应用程序中,用户可以使用相应的API来实现USB串口通信。
通过这些API,用户可以完成如打开串口、读取数据、写入数据等操作。
单片机与pc机通信
单片机与PC机通信可以通过多种方式实现,常见的方法包括串口通信、USB通信和以太网通信。
1. 串口通信:串口是最常用的单片机与PC机通信方式之一。
单片机通常具有UART模块,可以通过串口与PC机进行
通信。
通过串口,可以实现数据的发送和接收。
单片机通
过串口发送数据时,需要将数据转换为串口通信所需的格
式(如ASCII码),PC机在接收到数据后,也需要进行相应的解析和处理。
2. USB通信:USB是一种更快的通信方式,可以直接连接单片机和PC机,通过USB接口实现数据的传输。
在这种
通信方式中,单片机需要支持USB接口,并通过USB协议与PC机进行通信。
一般情况下,需要在单片机上实现
USB设备的功能,以及相应的USB驱动程序。
3. 以太网通信:以太网是一种常用的网络通信方式,可以通过以太网接口实现单片机与PC机之间的通信。
单片机需要具备以太网接口,并通过以太网协议进行通信。
在这种通信方式中,单片机可以作为TCP/IP客户端或服务器来连接PC机和网络,实现数据的传输。
无论使用何种通信方式,都需要在单片机和PC机上实现相应的软件和驱动程序,进行数据的传输和处理。
具体的实现方法和细节,可以参考相关的开发文档和资料。
单片机和上位机协议一、引言随着科技的快速发展,单片机在各个领域得到了广泛的应用。
而单片机与上位机之间的通信协议也成为了重要的研究方向。
本文将探讨单片机与上位机之间的通信协议,包括协议的基本原理、常见的协议类型以及它们的应用场景等。
二、单片机与上位机之间的通信协议基本原理单片机与上位机之间的通信协议是为了实现两者之间的数据交换和通信而设计的。
协议的基本原理是通过一定的规则和约定,实现数据的传输和解析。
常见的单片机与上位机通信协议包括串口通信、USB通信、以太网通信等。
其中,串口通信是最常见和简单的通信方式。
它通过串口线将单片机与上位机连接起来,通过发送和接收数据来实现通信。
串口通信具有成本低、易于实现等优点,广泛应用于各个领域。
三、常见的单片机与上位机通信协议类型1. 串口通信协议串口通信协议是最常见和简单的通信方式。
它使用串口线将单片机与上位机连接起来,通过发送和接收数据来实现通信。
常见的串口通信协议包括RS232、RS485等。
RS232是一种标准的串行通信接口,广泛应用于计算机、工业自动化等领域;RS485是一种多点通信协议,支持多个设备同时通信,适用于工业控制系统等应用场景。
2. USB通信协议USB通信协议是一种高速、可靠的通信方式。
它通过USB接口将单片机与上位机连接起来,实现数据的传输和通信。
USB通信协议具有带宽大、速度快等优点,广泛应用于外设设备、嵌入式系统等领域。
常见的USB通信协议包括USB1.1、USB2.0、USB3.0等。
3. 以太网通信协议以太网通信协议是一种广域网通信协议,它通过以太网接口将单片机与上位机连接起来,实现数据的传输和通信。
以太网通信协议具有传输速度快、可靠性高等优点,广泛应用于局域网、互联网等领域。
常见的以太网通信协议包括TCP/IP、UDP等。
四、单片机与上位机通信协议的应用场景单片机与上位机通信协议在各个领域都有着广泛的应用。
在工业控制领域,单片机与上位机通信协议被用于监控系统、物联网等方面。
By bingge 【整理】常用通信接口一(串口/RS232/RS485/USB/TYPE-C 原理与区别)一、什么是串口通信?常见的串口通信一般是指异步串行通信。
与串行通信相对的是并行通信。
数据传输一般都是以字节传输的,一个字节8个位。
拿一个并行通信举例来说,也就是会有8根线,每一根线代表一个位。
一次传输就可以传一个字节,而串口通信,就是传数据只有一根线传输,一次只能传一个位,要传一个字节就需要传8次。
异步串口通信:就只需要一根线就可以发送数据了。
串口通信主要为分232,485,422通信三种方式。
二、RS232接口标准设计电路232通信主要是由RX,T X,G ND 三根线组成。
RX 与TX ,TX 接RX ,GND 接GND 。
这样还是比较好理解吧。
因为发送和接收分别是由不同的线处理的,也就是能同时发送数据和接收数据,这就是所谓的全双工。
By bingge三、RS485EMC 标准设计电路1.RS485概念是为了解决232通信距离的问题。
485主要是以一种差分信号进行传输,只需要两根线,+,-两根线,或者也叫A ,B 两根线。
A ,B 两根线的差分电平信号就是作为数据信号传输。
发送和接收都是靠这两根的来传输,也就是每次只能作发送或者只能作接收,这就是半双工的概念了,这在效率上就比232弱很多了。
RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差;By bingge2.422通信422是为了保留232的全双工,又可以像485这样提高传输距离。
有些标注为485-4。
而485就标注为485-2。
有什么区别呢。
就是为了好记呢。
485-2就是2根线。
485-4就是4根线。
3.RS232与RS485接口的差别由于RS232接口标准出现较早,难免有不足之处,主要有以下四点:1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL 电路连接。
USBTTL串口RS230通信协议篇一:RS232通讯协议RS232通讯协议基本结构波特率 9600 bit/s,8bit,1位停止,无校验位格式0EBH,地址,命令,长度(n),数据1,---数据n,冗余说明:0EBH为帧起始位长度小于输出端口数冗余=地址+命令+长度+数1+---+数n如果冗余=0EBH,为防止与帧起始位相同,则发送反码,即冗余=14H当接收正确时,1)在命令1,2,5,6时,回送 0EBH,地址,命令,01H,0FAH,冗余,并执行命令。
2)在命令3,4,7时,回送相应信息。
当接收不正确时,1)地址正确,冗余不正确,回送0EBH,地址,命令,01H,0F5H,冗余。
2)地址不正确,不回送任何信息。
串口通讯—通信协议所谓通信协议是指通信双方的一种约定。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。
因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI 七层参考模型中的数据链路层。
目前,采用的通信协议有两类:异步协议和同步协议。
同步协议又有面向字符和面向比特以及面向字节计数三种。
其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。
一、物理接口标准1.串行通信接口的基本任务(1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。
在异步通信方式下,接口自动生成起止式的帧数据格式。
在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。
所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。
因此串并转换是串行接口电路的重要任务。
(3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。
串口通信标准串口通信(Serial Communication)是一种常用的数据传输方式,它通过串行方式逐位传输数据。
在串口通信中,数据在两个设备之间逐位传输,每个设备都有发送和接收数据的能力。
以下是串口通信的一些标准:1. RS-232:RS-232是一种常用的串口通信标准,由美国电子工业协会(EIA)制定。
它定义了数据传输的电压和信号线配置,以及数据传输速率等参数。
RS-232标准使用负逻辑,即逻辑0表示-5V至-15V 的电压,而逻辑1表示+5V至+15V的电压。
2. RS-485:RS-485是另一种常见的串口通信标准,它扩展了RS-232的功能,支持多点通信,即多个设备可以通过一个总线上进行通信。
RS-485使用差分信号传输方式,提高了信号的抗干扰能力。
3. USB:USB(Universal Serial Bus)虽然是一种总线标准,但它也可以用于串口通信。
USB是一种常用的接口标准,它支持热插拔和即插即用,并且可以传输数据和电力。
通过USB转串口适配器,可以将USB转换为串口通信。
4. I2C:I2C(Inter-Integrated Circuit)是一种用于连接低速设备的总线标准,它通过两根信号线(SDA和SCL)进行串行通信。
I2C总线可以挂载多个设备,并且设备之间可以进行通信。
5. SPI:SPI(Serial Peripheral Interface)是一种同步串行通信协议,它定义了主设备和从设备之间的通信方式。
SPI使用四根信号线(SCK、MOSI、MISO和NSS),支持高速数据传输。
这些是常见的串口通信标准,每种标准都有其特点和适用范围。
选择合适的串口通信标准取决于具体的应用需求和硬件配置。
RS232接口转USB接口的通信方法USB作为一种新的PC机互连协议,使外设到计算机的连接更加高效、便利。
这种接口适合于多种设备,不仅具有快速、即插即用、支持热插拔的特点,还能同时连接多达127个设备,解决了如资源冲突、中断请求(IRQs)和直接数据通道(DMAs)等问题。
因此,越来越多的开发者欲在自己的产品中使用这种标准接口。
而RS232是单个设备接入计算机时,常采用的一种接入方式,其硬件实现简单,因此在传统的设备中有很多采用了这种通信方式。
一般的IC卡门禁考勤系统也使用RS232接口与PC机通信。
如果将USB技术应用于IC卡门禁考勤系统与PC机之间的数据通信,这样,不仅能使IC卡门禁考勤设备具备USB 通信的诸多优点,而且对PC机而言还可以节余1个RS232串口为其它通信所用。
1 USB系统概述USB规范描述了总线特性、协议定义、编程接口以及其它设计和构建系统时所要求的特性。
USB是一种主从总线,工作时USB主机处于主模式,设备处于从模式。
USB系统所需要的唯一的系统资源是,USB系统软件所使用的内存空间、USB主控制器所使用的内存地址空间(I/O地址空间)和中断请求(IRQ)线。
USB设备可以是功能性的,如显示器、鼠标或者集线器之类。
它们可以作低速或者高速设备实现。
低速设备最大速率限制在1.5 Mb/s,每一个设备有一些专有寄存器,也就是端点(endpoint)。
在进行数据交换时,可以通过设备驱动间接访问它。
每一个端点支持几种特殊的传输类型,并且有一个唯一的地址和传输方向。
不同的是端点0仅用作控制传输,并且其传输可以是双向的。
系统上电后,USB主机负责检测设备的连接与拆除、初始化设备的列举过程,并根据设备描述表安装设备驱动后自动重新配置系统,收集每个设备的状态信息。
设备描述表标识了设备的属性、特征并描述了设备的通信要求。
USB主机根据这些信息配置设备、查找驱动,并且与设备通信。
典型的USB数据传输是由设备驱动开始的,当它需要与设备通信时,设备驱动提供内存缓冲区,用来存放设备收到或者即将发送的数据。
USB和串⼝(COM)的区别,以及相互转换有⼏个概念玩嵌⼊式的同志经常搞混。
也不怨谁,现在的卖家为了⼀点可怜的销量都在故意混淆串⼝的概念。
如果你发现本⽂有哪⾥含糊,或者任何⼀点有可能影响理解的地⽅,请留⾔,我会修正以便帮助后来的朋友。
Point (所有要点都在这,请仔细阅读):1、串⼝、COM⼝是指的物理接⼝形式(硬件)。
⽽TTL、RS-232、RS-485指的是串⼝的电平标准(电信号)。
2、接线的时候,⼀般只接GND、RX(接收)、TX(发送)。
不会接⼊Vcc等电源线,避免与⽬标设备上的供电冲突。
(接线法则:主机的 TX 接⽬标设备的 RX ,主机的 RX 接⽬标设备的 TX ,但是很多设计⼈员为了接线更为直观⽽故意颠倒标记 RX、TX ,如果有问题可以尝试交换RX、TX,不会烧坏设备。
)3、PL2303、CP2102、FT232R 芯⽚是⽤USB来扩展串⼝(TTL电平输出)的芯⽚,需要安装Windows驱动。
(常⽤于笔记本增加串⼝,注意其兼容性不如板载串⼝。
优先选择:FT232R > CP2102 >PL2303 )双向转换芯⽚,不同引脚实现TTL转RS-232或4、MAX232芯⽚是TTL电平与RS232电平的专⽤双向RS-232转TTL的功能。
(TTL与RS232转换芯⽚很多很多,正向、逆向接⼝数量不同:⽐如:MAX202、SP213、MAX3232 )5、TTL电平标准是低电平为0,⾼电平为1(对地,标准数字电路逻辑)。
RS-232电平标准是正电平为0,负电平为1(对地⾼低,电压具体数值不敏感,甚⾄可以⽤⾼阻态)。
6、RS-485、RS-422 与RS-232类似,但是采⽤差分信号逻辑,更适合长距离、⾼速传输。
这⾥略过不讲。
7、台式电脑后边带的D型9针插头(板载串⼝,公⼝),是RS-232电平标准的。
可以通过MAX232转换为TTL电平。
串⼝、COM⼝:COM⼝即串⾏通讯端⼝,简称串⼝。
usb转串口原理USB转串口原理。
USB转串口是一种常见的外设接口转换方式,它可以将USB接口转换成串口接口,实现USB设备与串口设备之间的通信。
USB转串口原理主要涉及USB通信协议、串口通信协议以及转换芯片的工作原理等方面。
下面将从这几个方面来详细介绍USB转串口的原理。
首先,我们来了解一下USB通信协议。
USB(Universal Serial Bus)是一种通用串行总线,它是一种用于计算机的外部设备连接的标准总线。
USB接口在计算机领域应用非常广泛,它可以连接各种外部设备,如鼠标、键盘、打印机、摄像头等。
USB通信协议包括物理层、数据链路层、网络层和传输层等多个层次,通过这些层次的协议规定,USB设备可以进行数据传输和通信。
其次,串口通信协议也是USB转串口原理中的重要部分。
串口通信是一种通过串行接口进行数据传输的通信方式,它包括串口硬件接口和串口通信协议两部分。
串口硬件接口通常包括TXD(发送数据)、RXD(接收数据)、RTS(请求发送)、CTS(清除发送)等引脚,通过这些引脚可以实现串口设备之间的数据传输。
而串口通信协议规定了数据传输的格式、速率、校验等参数,确保数据在串口之间的可靠传输。
最后,转换芯片的工作原理也是理解USB转串口原理的关键。
USB转串口的转换芯片通常包括USB接口模块、串口接口模块和控制模块。
USB接口模块负责与USB设备进行通信,将USB数据转换成串口数据;串口接口模块负责与串口设备进行通信,将串口数据转换成USB数据;控制模块则负责控制整个转换过程,确保数据的准确传输。
通过这些模块的协同工作,USB转串口设备可以实现USB和串口之间的数据转换和通信。
综上所述,USB转串口原理涉及USB通信协议、串口通信协议以及转换芯片的工作原理等多个方面。
只有深入理解这些原理,才能更好地应用USB转串口设备,并解决在实际应用中遇到的问题。
希望本文能够帮助读者更好地理解USB转串口的原理,为实际应用提供参考。
windows与android usb串口通信原理USB串口通信是一种常见的通信方式,它通过USB接口来实现计算机与外部设备的通信。
在Windows操作系统和Android操作系统中,USB串口通信都是非常常用的技术。
本文将介绍Windows和Android中USB串口通信的原理。
一、Windows中的USB串口通信在Windows中,USB串口通信是通过Windows驱动程序来实现的。
Windows驱动程序包括USB控制器驱动程序和串口通信驱动程序。
USB控制器驱动程序负责管理USB接口,将USB数据传输转换为串口数据传输。
串口通信驱动程序负责与外部设备通信,将串口数据传输转换为计算机可以理解的数据格式,并将计算机的数据传输给外部设备。
在Windows中,串口通信通常使用异步通信方式,即一个线程负责发送数据,另一个线程负责接收数据。
当计算机需要与外部设备通信时,它会创建一个串口通信线程,并打开相应的串口。
串口通信线程会不断地读取外部设备的响应数据,并将其传递给应用程序。
二、Android中的USB串口通信在Android中,USB串口通信的实现方式与Windows有所不同。
在Android 中,USB串口通信是通过Android驱动程序和Android操作系统来实现的。
Android驱动程序包括USB控制器驱动程序和串口通信驱动程序。
Android中的串口通信通常使用同步通信方式,即应用程序和外部设备之间直接进行通信,不需要通过其他线程或进程。
当应用程序需要与外部设备通信时,它会打开相应的串口,并直接与外部设备进行数据传输。
在Android中,USB串口通信的实现需要使用Android USB开发框架。
开发者可以使用Java语言编写应用程序,并通过Android USB开发框架来访问外部设备的数据接口。
开发者需要了解Android USB开发框架中的相关API和数据格式,以便正确地与外部设备进行通信。
使用VB开发串口USB通信软件串口和USB通信软件是一种用于在计算机和外部设备之间进行数据传输的工具。
VB语言是一种适用于Windows平台的编程语言,可以使用VB 开发串口、USB通信软件。
串口通信是一种常见的数据传输方式,它通过计算机的串口(串行通信口)与外部设备进行连接。
在VB中,可以使用SerialPort类来实现串口通信。
下面是一个使用VB编写的串口通信软件的示例代码:```vbImports System.IO.PortsPrivate WithEvents SerialPort As New SerialPortPublic Sub New'设置串口参数SerialPort.PortName = "COM1"SerialPort.BaudRate = 9600SerialPort.Parity = Parity.NoneSerialPort.DataBits = 8SerialPort.StopBits = StopBits.OneEnd SubPublic Sub Open'打开串口SerialPort.OpenEnd SubPublic Sub Close'关闭串口SerialPort.CloseEnd SubPublic Sub WriteData(ByVal data As String)'向串口写入数据SerialPort.WriteLine(data)End SubPrivate Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) HandlesSerialPort.DataReceived'串口接收到数据时触发的事件Dim data As String = SerialPort.ReadLine'处理接收到的数据Console.WriteLine("Received data: " & data)End SubEnd Class```USB通信是另一种常用的数据传输方式,它通过计算机的USB接口与外部设备进行连接。
触摸屏信号采集与控制实验原理一、引言随着智能手机、平板电脑等电子设备的普及,触摸屏已经成为了一个必备的输入设备。
触摸屏可以通过触摸、滑动等手势进行操作,取代了传统的鼠标和键盘,方便了用户的使用。
触摸屏信号采集与控制技术是触摸屏的核心技术之一,本文将对其原理进行介绍。
二、触摸屏信号采集原理触摸屏信号采集是指将触摸屏上的触摸操作转化为电信号进行采集的过程。
一般来说,触摸屏信号采集分为电阻式触摸屏和电容式触摸屏两种方式。
1.电阻式触摸屏信号采集原理电阻式触摸屏由两层透明的导电层组成,当手指触摸屏幕时,导电层之间的电阻值会发生变化。
因此,可以通过测量电阻值的变化来检测手指的触摸位置。
电阻式触摸屏信号采集主要包括四个步骤:(1)将触摸屏上的X、Y坐标分别连接到信号采集电路中;(2)通过一组电压分压器将X、Y坐标的电压信号转换为电流信号;(3)将电流信号输入到运算放大器中进行放大;(4)将放大后的信号输入到模数转换器中进行数字化处理。
2.电容式触摸屏信号采集原理电容式触摸屏是由一层透明的导电玻璃和一层透明的导电膜组成。
当手指触摸屏幕时,会改变导电膜上的电场分布情况,因此可以通过检测电容值的变化来检测手指的触摸位置。
电容式触摸屏信号采集主要包括三个步骤:(1)将触摸屏上的电容值转换为电压信号;(2)将电压信号输入到运算放大器中进行放大;(3)将放大后的信号输入到模数转换器中进行数字化处理。
三、触摸屏信号控制原理触摸屏信号控制是指将采集到的触摸信号转化为计算机可以识别的指令,从而实现对设备的控制。
触摸屏信号控制主要包括两种方式:串口通信和USB通信。
1. 串口通信串口通信是一种基于串行通信协议的通信方式,它可以将计算机和外部设备进行连接。
串口通信的原理是将采集到的触摸信号通过串口传输到计算机上,并将其转化为计算机可以识别的指令。
串口通信的优点是通信速度快,适用于小型系统,但缺点是通信距离短,容易受到干扰。
2. USB通信USB通信是一种基于USB接口的通信方式,它可以通过USB接口将计算机和外部设备进行连接。
详解AndroidUSB转串⼝通信开发基本流程好久没有写⽂章了,年前公司新开了⼀个项⽬,是和usb转串⼝通信相关的,需求是⽤安卓平板通过usb转接后与好⼏个外设进⾏通信,⼀直忙到最近,才慢慢闲下来,趁着这个周末不忙,记录下usb转串⼝通信开发的基本流程。
我们开发使⽤的是usb主机模式,即:安卓平板作为主机,usb外设作为从机进⾏数据通信。
整个开发流程可以总结为以下⼏点:1.发现设备UsbManager usbManager = (UsbManager) context.getSystemService(B_SERVICE);Map<String, UsbDevice> usbList = usbManager.getDeviceList();通过UsbManager这个系统提供的类,我们可以枚举出当前连接的所有usb设备,我们主要需要的是UsbDevice对象,关于UsbDevice这个类,官⽅是这样注释的:This class represents a USB device attached to the android device with the android deviceacting as the USB host.是的,这个类就代表了Android所连接的usb设备。
2.打开设备接下来,我们需要打开刚刚搜索到的usb设备,我们可以将平板与usb外设之间的连接想象成⼀个通道,只有把通道的门打开后,两边才能进⾏通信。
⼀般来说,在没有定制的android设备上⾸次访问usb设备的时候,默认我们是没有访问权限的,因此我们⾸先要判断对当前要打开的usbDevice是否有访问权限:if (!usbManager.hasPermission(usbDevice)) {usbPermissionReceiver = new UsbPermissionReceiver();//申请权限Intent intent = new Intent(ACTION_DEVICE_PERMISSION);PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0, intent, 0);IntentFilter permissionFilter = new IntentFilter(ACTION_DEVICE_PERMISSION);context.registerReceiver(usbPermissionReceiver, permissionFilter);usbManager.requestPermission(usbDevice, mPermissionIntent);}这⾥我们声明⼀个⼴播UsbPermissionReceiver,当接受到授权成功的⼴播后做⼀些其他处理:private class UsbPermissionReceiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {String action = intent.getAction();if (ACTION_DEVICE_PERMISSION.equals(action)) {synchronized (this) {UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);if (device.getDeviceName().equals(usbDevice.getDeviceName()) {if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {//授权成功,在这⾥进⾏打开设备操作} else {//授权失败}}}}}}接下来,我们要找到具有数据传输功能的接⼝UsbInterface,从它⾥边⼉找到数据输⼊和输出端⼝UsbEndpoint,⼀般情况下,⼀个usbDevice有多个UsbInterface,我们需要的⼀般是第⼀个,所以:usbInterface=usbDevice.getInterface(0);同样的,⼀个usbInterface有多个UsbEndpoint,有控制端⼝和数据端⼝等,因此我们需要根据类型和数据流向来找到我们需要的数据输⼊和输出两个端⼝:for (int index = 0; index < usbInterface.getEndpointCount(); index++) {UsbEndpoint point = usbInterface.getEndpoint(index);if (point.getType() == B_ENDPOINT_XFER_BULK) {if (point.getDirection() == B_DIR_IN) {usbEndpointIn = point;} else if (point.getDirection() == B_DIR_OUT) {usbEndpointOut = point;}}}最后,才是真正的打开usb设备,我们需要和usb外设建⽴⼀个UsbDeviceConnection,它的注释很简介的说明了它的⽤途:This class is used for sending and receiving data and control messages to a USB device.它的获取也很简单,就⼀句代码:usbDeviceConnection = usbManager.openDevice(usbDevice);到这⾥,理论上平板和usb外设之间的连接已经建⽴了,也可以⾸发数据了,但是,我们⼤部分情况下还需要对usb串⼝进⾏⼀些配置,⽐如波特率,停⽌位,数据控制等,不然两边配置不同,收到的数据会乱码。
串口转USB使用说明1.通过USB电缆将PC机与实验平台连接起来;2.如果第一次使用,PC会提示找到新硬件,如图1所示,进入添加新硬件向导,选择“从列表或指定位置安装”,然后单击“下一步”按钮;图1 添加新硬件向导3.出现如图2所示画面,勾选“在搜索中包括这个位置”,点击“浏览”按钮查找驱动程序所在路径,光盘中“CH341SER”目录下,然后点击“下一步”按钮;图2 搜索驱动程序路径4.出现如图3所示画面,为硬件安装驱动,点击“仍然继续”按钮;图3 安装驱动提示窗口5.驱动安装成功,弹出如图4所示界面,点击“完成”按钮结束安装;图4 完成硬件安装提示窗口6.硬件安装成功后,在设备管理器窗口的“端口”列表中会出现一个新增端口,如图5所示。
以后每当将实验平台连接到PC上时,系统都会自动在端口中添加此端口,将连接断开时,此端口即被卸载。
图5 增加端口查看7.启动联机软件,从菜单选择“【端口】—【串口选择】”,弹出如图6所示对话框。
该命令会自动检测当前系统可用的串口号,并列于组合框中,选择某一串口(这里就需要选择COM4)后,按确定键,对选定串口进行初始化操作,并进行联机测试,报告测试结果,如果联机成功,则会将指令区初始化。
图6 串口选择对话框注意事项:1. USB-SERIAL CH341为即插即用USB设备,插入设备,操作系统自动加载设备,拔出设备,操作系统自动卸载设备,因此开启联机软件前应首先将设备与PC机连接;2.在数据传输过程中,不可以从USB插座中拔出,必须在联机软件关闭后方可拔出;3.如果在联机软件使用CH341 USB通信过程中,将其从USB插座中拔出,那么应该关闭联机软件,待重新连接设备后再开启联机软件;4.如果在CH341 USB使用过程中出现错误,极有可能CH341 USB已经物理连接中断,可以在设备管理器中查看“USB-SERIAL CH341(COMn)”是否存在,如图5所示;若是存在可以关闭联机软件,等待两秒后再打开。
串口通信协议什么是串口串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal SerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(b yte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ASCII码是0~127(7位)。
扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。
典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:在串口通信中一种简单的检错方式。
有四种检错方式:偶、奇、高和低。
当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位位1,这样就有3个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
什么是RS-232RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。
可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。
用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。
RS-232只限于PC串口和设备间点对点的通信。
RS-232串口通信最远距离是50英尺。
DB-9针连接头-------------\ 1 2 3 4 5 /\ 6 7 8 9 /-------从计算机连出的线的截面。
RS-232针脚的功能:数据:TXD(pin 3):串口数据输出(Transmit Data)RXD(pin 2):串口数据输入(Receive Data)握手:RTS(pin 7):发送数据请求(Request to Send)CTS(pin 8):清除发送(Clear to Send)DSR(pin 6):数据发送就绪(Data Send Ready)DCD(pin 1):数据载波检测(Data Carrier Detect)DTR(pin 4):数据终端就绪(Data Terminal Ready)地线:GND(pin 5):地线其他RI(pin 9):铃声指示什么是RS-422RS-422(EIA RS-422-AStandard)是Apple的Macintosh计算机的串口连接标准。
RS-422使用差分信号,RS-232使用非平衡参考地的信号。
差分传输使用两根线发送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。
在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。
什么是RS-485RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。
有了多个设备的能力,你可以使用一个单个RS-422口建立设备网络。
出色抗噪和多设备能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。
RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。
RS-485可以用超过4000英尺的线进行串行通行。
DB-9 引脚连接-------------\ 1 2 3 4 5 /\ 6 7 8 9 /-------从计算机连出的线的截面。
RS-485和RS-422的引脚的功能数据:TXD+(pin 8),TXD-(pin 9),RXD+(pin 4),RXD-(pin 5)握手:RTS+(pin 3),RTS-(pin 7),CTS+(pin 2),CTS-(pin 6)地线:GND (pin 1)什么是握手RS-232通行方式允许简单连接三线:Tx、Rx和地线。
但是对于数据传输,双方必须对数据定时采用使用相同的波特率。
尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。
这时需要串口的握手功能。
在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。
a,软件握手:我们讨论的第一种握手是软件握手。
通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。
必须的线仍然是三根:Tx,Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。
这些字符在通信中由接收方发送,使发送方暂停。
例如:假设发送方以高波特率发送数据。
在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。
为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。
一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。
输入buffer半满时,L abWindows发送XOFF。
此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%时发送XOFF。
显然,发送方必须遵循此守则以保证传输继续。
b,硬件握手:第二种是使用硬件线握手。
和Tx和Rx线一样,RTS/CTS和DT R/DSR一起工作,一个作为输出,另一个作为输入。
第一组线是RTS(Request to Send)和CTS(Clear toSend)。
当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。
另一组线是DT R(DataTerminal Ready)和DSR(Data SetReady)。
这些现主要用于Modem通信。
使得串口和Modem通信他们的状态。
例如:当Modem已经准备好接收来自P C的数据,它置高DTR线,表示和电话线的连接已经建立。
读取DSR线置高,PC机开始发送数据。
一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CT S用于单个数据包的传输。
在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。
如果CTS模式使能,LabWindows使用如下规则:当PC发送数据:RS-232库必须检测CTS线高后才能发送数据。
当PC接收数据:如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。
如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。
如果端口队列近乎空了,库函数置高RTS,但使DRT维持高电平。
如果端口关闭,库函数置低RTS和DTR。
c,XModem握手:最后讨论的握手叫做XModem文件传输协议。
这个协议在M odem通信中非常通用。
尽管它通常使用在Modem通信中,XModem协议能够直接在其他遵循这个协议的设备通信中使用。
在LabWindows中,实际的XModem应用对用户隐藏了。
只要PC和其他设备使用XModem协议,在文件传输中就使用Lab Windows的XModem函数。
函数是XModemConfig,XModemSend和XModemRe ceive。
XModem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、w ait_delay、start_delay、max_tries、packet_size。
这些参数需要通信双方认定,标准的XModem有一个标准的定义:然而,可以通过XModemConfig函数修改,以满足具体需要。
这些参数的使用方法由接收方发送的字符neg_ack确定。
这通知发送方其准备接收数据。
它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的start_of_data,发送方停止尝试。
如果从发送方收到start_of_data,接收方将读取后继信息数据包。
包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。
在读取数据后,接收方会调用wait_delay,然后想发送方发送响应。
如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。
如果一直没有收到响应,发送方通知用户传输数据失败。
由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。
这导致接收的数据比原数据多。
在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。