精华内容
下载资源
问答
  • TypeC转串口TTL,micro USB转串口实验调试成功,有测试demo
  • android usb转串口数据通信示例

    热门讨论 2017-09-14 15:50:37
    android usb转串口数据通信示例。物联网开发中也会经常用到usb转串口,对android手机进行通信。一般都会用otc线进行转换。我在GitHub下来一份代码,亲测可用。并进行了修改封装。我的博客地址:...
  • USB转串口通信模块简要说明: 一、尺寸:全长mm42宽20mm高10mm 二、主芯片:CP2102 三、工作电压:USB供电 USB转串口通信模块实物展示: USB转串口通信模块电路特点: 1、具有电源指示. 2、输入口直接接电脑USB口。 3、...
  • Android 实现USB转串口通信

    千次阅读 2021-01-27 21:18:43
    某天浏览Android Developers开发者指南时,看到了关于USB使用的文档,因此想参考文档做USB转串口通信实验,但实验的过程中遇到了不少问题,特此记录。 说明一下实验所用的硬件: 1.工业安卓平板(带有USB接口) 2....

    目前我正在使用工业安卓平板做上位机,工业安卓平板带有232、485串口以及USB接口,通常驱动232、485接口需要有厂家提供的JNI库以及相关的java类。某天浏览Android Developers开发者指南时,看到了关于USB使用的文档,因此想参考文档做USB转串口的通信实验,但实验的过程中遇到了不少问题,特此记录。
    说明一下实验所用的硬件:
    1.工业安卓平板(带有USB接口)
    2.USB转TTL数据线(芯片型号PL2303HXD)

    遇到的问题

    首先USB转TTL线插到工业安卓平板的USB口,然后根据参考文档(Android 开发者指南USB主机概览),获取UsbManager,利用UsbManager枚举出所有的UsbDevice,通过UsbDevice的getProductId()和getDeviceId()两个方法返回的Int值,与所需要通信设备的ProductId和DeviceId进行比较,最终得到所需要的设备UsbDevice。
    取得所需要的UsbDevice后,找到该Device的对应的UsbInterface和UsbEndpoint,再打开UsbDeviceConnection建立连接,使用bulkTransfer()方法发送和接收数据。
    这里说一下如何查看USB设备的Product Id和Device Id:将USB设备插到电脑上,通过设备管理器找到该端口,右击打开属性,属性栏中有一列详细信息,选中硬件信息就可以看到了,VID对应Android中的Device Id,PID对应Android中的Product Id,注意Window下查看的ID号是16进制的,Android中是10进制的,要进行一下进制转换(查看USB设备ID操作方法链接)。
    到目前为止都是根据参考文档的Demo写的,发送接收数据时发现如下问题:
    1.文档中没有说明如何配置波特率、奇偶校验位、停止位等重要方法
    2.数据无法发送和接收

    解决方法

    通过查阅资料,发现网上针对波特率配置等问题都指向UsbDeviceConnection.controlTransfer()这个方法,但很少有博客把这个方法说清楚,它其实是要根据USB协议设置controlTransfer()这个方法的参数,非常复杂,不建议用这个方法。
    进一步查阅资料发现,有的博客提到是由于安卓平板没有安装对应USB转串口设备的驱动造成的,我们都知道在Windows下无法识别某串口很有可能是没安装驱动的原因。
    因此,深入研究后发现USB转串口的数据线,其核心是一块转换芯片,有很多品牌,如Prolific生产的型号为PL2303的USB转串口芯片,型号为CH340的转换芯片。其实芯片厂家早已给我们提供好了各大平台的驱动,如Windows、Mac、Android平台。
    这里以为手上使用的PL2303HXD型号的USB转串口数据线为例,通过官方给的安卓驱动链接自行下载。这里需要注意某些PL2303型号的芯片不支持安卓驱动,如PL2303HXA。
    PL2303Note
    下载解压之后,里面提供了测试程序的APK和使用说明,测试成功说明USB转串口数据线可用,即可卸载测试程序。在Android Studio开发项目下导入官方提供的驱动类,是一个jar文件,解压后是一个名为PL2303Driver的类,通过这个类提供的方法驱动想应的设备。
    PL2303Driver
    官方下载的驱动包里含有PL2303Driver类的说明文档,比较常用的方法如InitByBaudRate(PL2303Driver.BaudRate R)以指定的波特率打开一个PL2303设备,write(byte[] buf)和read(byte[] buf)分别为写字节和读字节,end()关闭PL2303设备。
    经测试后,通信成功。

    展开全文
  • Android USB通信与USB转串口通信

    千次阅读 2020-07-25 12:51:58
    Android USB通信与USB转串口通信 安卓的搬运工关注 0.3662017.07.14 17:07:35字数 892阅读 8,522 前段时间公司有个项目,涉及Android BLE硬件通讯,需要用到Android USB转PL232、FD232Rl等串口进行硬件与app的...

    Android USB通信与USB转串口通信

    安卓的搬运工关注

    0.3662017.07.14 17:07:35字数 892阅读 8,522

           前段时间公司有个项目,涉及Android BLE硬件通讯,需要用到Android USB转PL232、FD232Rl等串口进行硬件与app的通信,楼主以前并没做过USB通信,也是一脸的懵逼哈,于是乎查阅了网上的资料,发现USB通信较为简单,网上资源也比较多,但是转串口的话,通信通道持续建立不起来。后来发现是缺少串口驱动,下面大致过程分享下吧。

       首先是单纯的USB通信,大致分为以下几个主要步骤:

    一:查找连接手机的USB设备,使用到的是官方的UsbManager类。分为获取usbManager对象,查找设备就是用到这个对象的getDeviceList()方法,然后通过USB设备的PID和VID进一步筛选我们连接的设备(vid和pid可以通过打印device的信息获取),下面上图。

    二:USB设备需要用户授权,才能正常使用,处理权限问题。同样使用到了usbManager对象。这里使用到了广播监听用户的授权情况,下面上图。

     

    三:进行到了这里,我们找到了USB设备,并且处理了权限问题,剩下的就是打开USB设备的通信通道,进而可以读取数据。首先我们需要获取设备的UsbInterface,一个USb设备有多个UsbInterface,我们需要的是第一个。一个UsbInterface有多个端口,我们需要的是处理数据的端口,通过遍历可以获取到数据输入端口usbEndpointIn和输出端口usbEndpointOut。这两个端口就是我们进行数据读取的时候用到的。最后usbManager.openDevice(device)打开端口。到现在,我们进可以进行读写操作了。

     

    四:读写操作,均使用usbManager.bulkTransfer()方法往USB通道里读写数据,有几个参数,下面以写数据为例,读数据和这差不多。参数1:输入输出端口。参数2:发送的字节数组。参数3:字节数组的长度。参数4:超时时间。返回值ret就是发送成功以后返回实际发送的字节数,可以当做发送成功与否的标志。接收的时候定义的字节数组应该比设备一次返回的字节数组大,查阅的资料是最少应该比设备返回的字节数大2个字节,比如设备返回的字节是480,那定义的数组长度应该是>480。接收数据开线程,循环接收,有数据随时处理。

     

    至此,基本完成了主要的通信过程,可也可成功的读取设备数据,但是还需要优化一下,例如随时监听厂家USB设备的插入,自动打开项目。需要在清单文件中作配置。其中device_filter中内容是设备的VID和PID。然后在java中注册监听。嗨,就这样吧,基本差不多了,过几天把转串口的记录一下,以便于下次项目使用。

     

     

    鄙人主要是看的这篇博客,大家也可以看下,介绍很详细:

    Android开发之USB数据通信

    展开全文
  • USB转串口与USB协议的区别

    千次阅读 2020-01-11 13:19:13
    关于SV613模块常见的问题:模块能不能做USB协议模块 在正常的数据传输系统中(如图1),传输...通过USB转串口电路通信的双方要遵守串口的通信协议,而串口是按照位(bit)来发送和接收数据的,包括起始位,数据位,奇...

    关于SV613模块常见的问题:模块能不能做USB协议模块

    在正常的数据传输系统中(如图1),传输数据的端口都有固定的格式要求,首先USB有数据输入,经过电平转换进入mcu,注意数据仍是串口协议,非串口协议的数据SV613模块不能识别处理。

    一.USB转串口电路通信的设备

    通过USB转串口电路通信的双方要遵守串口的通信协议,而串口是按照位(bit)来发送和接收数据的,包括起始位,数据位,奇偶校验位,停止位;通信之前要设置比特率。在具体电路硬件上又有TTL、RS232、RS485等不同的标准,不同的标准逻辑电平是不同的。

    二.通过USB接口进行通信的设备

    在实际应用场景中,通过USB接口进行通信的双方要遵守USB协议。标准的USB链接线使用4芯电缆:5V电源线(Vbus)、差分数据线负(D-)、差分数据线正(D+)和地线(GND)。USB是一种支持在USB主机和USB设备之间进行串行数据传输的通信协议。主机作为总线的主叫方,采用两种信令模式:全速模式12Mb/s和低速模式1.5Mb/s。USB使用四种数据传输方式:控制传输、中断传输、批量传输及等时传输。

     USB系统是由三个逻辑层组成:功能层、USB设备层和USB总线接口层。并且每一层都是由主机和USB设备不同的功能模块组成,如下图所示:

    使用USB转串口的SV613与使用USB接口的设备在硬件电路上是不兼容的,并且SV613模块之间只能使用串口进行通信,不能发送USB协议数据。

    展开全文
  • Android之USB转串口通信-基本流程

    千次阅读 2019-07-06 15:27:26
    背景:近期公司一个项目对接第三方支付设备(类似平板的设备外接usb转串口设备),需要使用usb转串口,实现通信和交互,今天记下过程。 有引用这个库https://github.com/mik3y/usb-serial-for-android,感谢开源的...

    背景:近期公司一个项目对接第三方支付设备(类似平板的设备外接usb转串口设备),需要使用usb转串口,实现通信和交互,今天记下过程。

    有引用这个库 https://github.com/mik3y/usb-serial-for-android,感谢开源的大佬。

    这个库已经集合了一般的芯片协议,就不需要自己再配置了。我们设备是用的ProlificSerialDriver.

    唯一要注意的是配置设备的参数:波特率,数据位,体制位,奇偶校验等。其中我就在奇偶校验的参数配置上坑了一把。

    只需要按照流程,注意些细节就能跑。

    贴下核心的几段代码:

    import android.hardware.usb.UsbDevice
    import android.hardware.usb.UsbDeviceConnection
    import android.hardware.usb.UsbManager
    import com.hoho.android.usbserial.driver.UsbSerialPort
    import com.hoho.android.usbserial.driver.UsbSerialProber
    
    class ZYDataSource(){
        var mUsbSeriaPortManager: USBSerialPortManager? = null
        private var usbDeviceConnection: UsbDeviceConnection? = null
        private var mDevice: UsbDevice? = null
        private var mUsbSerialPort: UsbSerialPort? = null
        private var usbPermissionReceiver: UsbPermissionReceiver? = null
    
        private var mUsbManager: UsbManager? = null
        
        /**
        * 初始化
        */
        override fun initCompletable(context: Context): Completable {
            return Completable.create() {
                mUsbManager = context.getSystemService(Context.USB_SERVICE) as UsbManager
                //查找所有设备
                val driversList = UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager)
                if (driversList == null || driversList.size == 0) {
                    throw Exception("未找到设备")
                }
                //直接取第一个.
                mDevice = driversList.first().device
    
                if (!mUsbManager?.hasPermission(mDevice)!!) {
                    usbPermissionReceiver = UsbPermissionReceiver()
                    //申请权限
                    val intent = Intent(ACTION_DEVICE_PERMISSION)
                    val mPermissionIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
                    val permissionFilter = IntentFilter(ACTION_DEVICE_PERMISSION)
                    context.registerReceiver(usbPermissionReceiver, permissionFilter)
                    mUsbManager?.requestPermission(mDevice, mPermissionIntent)
                } else {
                    this.openDeviceConnection(device = mDevice!!)
                }
    
                it.onComplete()
            }
        }
    
        inner class UsbPermissionReceiver : BroadcastReceiver() {
            override fun onReceive(p0: Context?, intent: Intent?) {
                val action = intent?.getAction()
                if (ACTION_DEVICE_PERMISSION.equals(action)) {
                    synchronized(this) {
                        val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
                        openDeviceConnection(device)
                    }
                }
            }
    
        }
        
        /**
        * 打开连接
        */
        fun openDeviceConnection(device: UsbDevice) {
            synchronized(this) {
                //授权成功,在这里进行打开设备操作
                val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager)
                if (availableDrivers.isEmpty()) {
                    return
                }
    
                // Open a connection to the first available driver.
                val driver = availableDrivers[0]
                // Read some data! Most have just one port (port 0).
                mUsbSerialPort = driver.ports[0]
                try {
                    mUsbSeriaPortManager = USBSerialPortManager(mUsbSerialPort!!)
                    usbDeviceConnection = mUsbManager?.openDevice(device)
                    mUsbSerialPort?.open(usbDeviceConnection)
                    mUsbSerialPort?.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_EVEN)
                } catch (e: Exception) {
                    XLog.tag(TAG).e(e.message)
                    throw Exception("设备初始化失败")
                }
    
            }
        }
    
        /**
        * 实际通信调用方法-找卡
        */
        override fun searchCardSingle(requestData: ByteArray): Single<ByteArray>                     {
            return Single.just(requestData)
                .flatMap { data ->
                    val command = USBSerialPortManager.Command(data, data.size)
                    //通信
                    mUsbSeriaPortManager!!.execute(command)
                }
                .flatMap {
                    Single.just(it.rxBytes)
                }
        }
    }

    下面这个是USBSerialPortManager工具类

    import com.hoho.android.usbserial.driver.UsbSerialPort
    import io.reactivex.Single
    import io.reactivex.schedulers.Schedulers
    
    
    class USBSerialPortManager(private val usbSerialPort: UsbSerialPort,
                               private val writeTimeout: Int = 100,
                               private val readTimeout: Int = 50) {
        open class Command(val hex: String, var rxLength: Int = 0, var rx: String = "") {
            val bytes: ByteArray
                get() = hex.hexStringToByteArray()
            val rxBytes: ByteArray
                get() = rx.hexStringToByteArray()
    
            constructor(bytes: ByteArray, rxLength: Int) : this(bytes.toHex(), rxLength, "")
        }
    
        private fun runOnceSingle(command: Command, timeoutInMillis: Int = 2000): Single<Command> {
            return Single.create {
                XLog.tag(TAG).i("send data=${command.hex} to $usbSerialPort")
                val txBytes = command.hex.hexStringToByteArray()
                usbSerialPort.write(txBytes, writeTimeout)
    
                if (command.rxLength <= 0) {
                    command.rx = ""
                    it.onSuccess(command)
                    return@create
                }
    
                var times = 0L
                val interval = 2L
                val bytes = ByteArray(command.rxLength)
                var totalLength = 0
                while (totalLength < command.rxLength) {
                    val bytesToRead = ByteArray(command.rxLength - totalLength)
                    val n = usbSerialPort.read(bytesToRead, readTimeout)
                    if (n > 0) {
                        for (i in 0 until n) {
                            bytes[totalLength + i] = bytesToRead[i]
                        }
                        totalLength += n
                    }
                    Thread.sleep(interval)
                    times += interval
                    if (times > timeoutInMillis) {
                        XLog.tag(TAG).e("read data from $usbSerialPort timeout, expect ${command.rxLength} bytes")
                        it.onError(Exception("read data from $usbSerialPort timeout, expect ${command.rxLength} bytes"))
                        return@create
                    }
                }
                command.rx = bytes.toHex()
                XLog.tag(TAG).i("recv data=${command.rx} from $usbSerialPort")
                it.onSuccess(command)
            }
        }
    
        fun execute(command: Command, retryTimes: Long = 0L): Single<Command> {
            return runOnceSingle(command).retry(retryTimes).subscribeOn(Schedulers.single())
        }
    
        companion object {
            const val TAG = "USBSerialPortManager"
        }
    }

    代码是kotlin语言,没有写注释,目前项目已上线。工具类基本可以通用。

    展开全文
  • Android之USB转串口通信

    万次阅读 热门讨论 2016-02-26 14:02:26
    实验目的: STM32通过USB转串口向Android Device持续发送数据,并让其显示在Android Device的Editview界面上 manifest.xml package="com.example.dai.usb_t
  • 安卓系统使用USB转串口

    千次阅读 2021-09-23 09:34:21
    USB 配件产品包括USB转接设备、诊断和音乐设备、读卡器等,遵循 Android 附件通信协议(Android Accessory Communication Protocol)。这种模式使不具备主机功能的 Android 设备具有了与 USB 硬件交互的能力...
  • USB转串口 TTL RS-232 RS-485 COM口 UART区别

    千次阅读 多人点赞 2019-07-27 11:06:48
    串口,即串行通信接口,与之相对应的另一种接口叫并口,并行接口。两者的区别是,传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输,而并口则将8个位一字排开,分别在8条连接线上同时...
  • 安卓usb转串口通讯

    千次阅读 2017-08-09 16:10:43
    由于最近公司项目要连接一个usb转串口的设备,之前没有搞过这个,于是就各种网上找资料了1.首先我们得了解安卓的usb编程,我是参考了这篇博客http://blog.csdn.net/tianruxishui/article/details/38338087,里面讲解...
  • 学习modbus(二)——USB转串口通信

    千次阅读 2019-08-20 11:41:39
    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是...我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T...
  • linux下的usb转串口的使用

    千次阅读 2018-03-02 19:09:24
    环境:Ubuntu 10.10 Serverminicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有“超级终端”那么易用,但是使用习惯之后读者将会体会到它的高效与便利,下面将讲解minicom的安装和配置。...
  • Android USB转串口通信

    2018-08-14 21:07:00
    1、Git上最火的USB转串口通信 2、Android之USB转串口通信 3、安卓开发中的USB转串口通讯 二、截图 废话不多说,先上图,micro usb -> usb 连接的测试温度的外设(其实是个测试粮油品质的,还有TPM值等等) ...
  • 串口芯片一直作为产品跟主机的主要连接作用,今天我们深入了解已下串口芯片的应用以及注意事项 1.串口通信的基本概念 ...后期出现的传输协议都改成了差分信号传输了。 3.串行通信 串口通信每次同时只能传输1
  • 经朋友介绍接的一个外包,要求用USB和PLC设备通信,于是乎就有了本文。内容不深,权当做个记录整理一下当时的思路。 一、解决思路 ...在开放的外围接口中,只有USB可以使用,因此需要在外部加一个USB转串口...
  • 11.3 USB转串口通信

    2019-02-25 11:13:08
    随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是...我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T...
  • http请求转串口通信系统开发者文档 入口一 点击跳转 入口二 点击跳转
  • USB转串口的驱动 cp210x

    千次阅读 2020-04-11 23:17:05
    网盘自取: 链接:https://pan.baidu.com/s/1mRqLWa0FPxtmX8q29YS03w 提取码:0esq
  • USB转串口芯片CH340

    2021-01-19 10:03:41
    CH340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或USB转打印口 CH340C是USB转串口,内置晶振,引脚兼容CH340G D4:小型的高速开关二极管,开关比较迅速。 CH340模块的RXD引脚是对于CH340自身而言的...
  • 串口,USB,USB转串口,串口驱动,仿真器下载程序 在初学stm32,接触到的第一步便是下载程序, 方法一:利用仿真器下载程序 方法二:利用串口下载程序 本文简单介绍两种下载方法,浅入窥探下载原理,因为初学,错误...
  • 当计算机或者其他USB主机上使用多个USB转串口设备时,会遇到多个串口无法与具体的串口设备对应起来的问题,包括更换不同USB端口串口序号发生改变,多个设备USB插拔顺序不同导致串口序号改变等问题。 本文提出几种...
  • 广大的电子攻城狮们在硬件电路设计的时候通常会遇到一个...虚拟串口类USB转串口芯片,可以在上位机端虚拟出一个串口供串口软件使用,这种USB设备类型最大的优势就是可以兼容到原有的上位机软件,无需重新写软件。 ...
  • USB转串口通讯

    2016-08-29 14:36:29
    跟着技巧的开展,工业上还有 RS232 串口通讯的少量运用,然则贸易技巧的使用...我们只需求在电路上添加一个 USB 转串口芯片,就可以胜利完成 USB 通讯协定和规范UART 串行通讯协定的转换,在我们的开辟板上,我们运...
  • RS-232分TX/RX,全双工的,可以同时收发; USB只有一对差分数据线D+/D-,是...一般情况下,usb转串口的芯片 为 ch340 ,ch341等,这样 就将usb转换成了 TX/RX 串口信号。但是此时 的串口还不能直接与单片机连接,由于
  • Android OTG之USB转串口模块通讯

    千次阅读 2018-04-01 00:26:12
    Android OTG之USB转串口模块通讯 微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁、等其他智能设备,...
  • USB转TTL模块主要采用PL2303HX芯片,28脚贴片SOIC封装,工作频率为12MHZ,符合USB 2.0通信协议,可以直接将USB信号转换成串口信号,波特率从75~1228800,有22种波特率可以选择,并支持5、6、7、8、16共5种数据...
  • linux查看新增串口、USB设备,Minicom + Usb转串口注意:虚拟机环境下的ubuntu默认情况下是不能自动识别的,需要在虚拟机窗口右下角点击"Prolific USB-Serial Controller",然后选择"Connect...
  • CH342与CH343是沁恒推出的第三代USB转串口产品,内部高度集成,外围精简,均提供VIO电源引脚,串口I/O支持独立供电。 CH342实现USB转两路高速异步串口,支持串口波特率高达3Mbps。 CH343实现USB转一路高速异步串口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,253
精华内容 2,101
关键字:

usb转串口通信协议