在android中使用串口RS-232?
Posted
技术标签:
【中文标题】在android中使用串口RS-232?【英文标题】:using serial port RS-232 in android? 【发布时间】:2011-06-05 00:41:06 【问题描述】:我想在 android 设备上使用 JavaComm API 类通过串口发送信号,这是我的想象:
1- Android 设备将是:Archos 3.2,它具有 android 2.2 和 USB 主机模式。
2- 在我的 Android 应用中包含 RxTx 库包。并包含使用 Android NDK 的 RxTx 本机代码。
3- 一根短电缆,USB-->串行。
您能向我解释一下我可能会遇到哪些问题吗?
【问题讨论】:
【参考方案1】:可能不完全符合您的要求,但this instructable 可能会为您指明正确的方向
【讨论】:
【参考方案2】:最大的问题可能是USB->串口适配器:
您需要 USB 串行驱动程序的设备驱动程序,它可能不包含在 android 内核中。
另一种选择是使用类似 libusb(可能也必须移植到 android)和基于 libusb 的用户空间驱动程序。
【讨论】:
好的,但是由于设备启用了主机模式,那么内核必须配备驱动程序才能完成这项工作,对吧?如果我们把它想象成一个普通的 linux 盒子,如果我只是插入一个 usb--serial 适配器,我会遇到问题吗? 将其与普通 PC 进行比较。它的 USB 端口处于主机模式。在Windows下插入USB串口适配器需要驱动。在 Linux 下,驱动程序是内核的一部分。 BUt Android 使用一个精简的内核,其中不需要的驱动程序被删除。我相信 USB 串行驱动程序也被删除了。 最有可能“删除”只是在未选择编译的意义上。如果在配置中启用,源可能仍然存在,并且很可能构建得很好。【参考方案3】:与普通 PC 不同,大多数用于 android 设备的库存内核都带有最少的编译模块。您需要使用启用的 USB 到串行转换器的驱动程序重新编译内核。您的运气取决于您使用的特定设备。许多制造商违反 GPL,不提供内核源代码。一些制造商(例如带有 Droid 2 的摩托罗拉)需要签名内核。这使得无法在设备上加载自定义内核。
此外,尽管许多设备都有 USB 主机模式,但您必须跳过箍来切换设备模式。例如,Motrola 机器人需要一个特殊的加密狗插入 USB 端口,然后才能打开电源以切换到主机模式。
这里有一些链接可以解释你需要做什么:
“关于 Droid 主机模式的更多信息”,http://www.tombom.co.uk/blog/?p=134。
“摩托罗拉 Droid 上的 USB 主机模式”,http://www.tombom.co.uk/blog/?p=124。
【讨论】:
谢谢,我见过那些 Droid 的东西,但至少 Archos 和 Acer 提供了内核源 原始机器人也是如此。使用 Droid2,你就不走运了。除非你让摩托罗拉给你钥匙。 :-(【参考方案4】:如上所述,您需要为您拥有的任何 USB串行设备提供设备驱动程序。其中许多设备使用 Prolific PL2303 芯片:
http://www.qbik.ch/usb/devices/showdr.php?id=175
股票 linux 内核已经支持并且已经支持了很长时间。我用过这个,它工作得很好,所以我建议你坚持使用使用这个芯片的 USB串行设备。
除此之外,使用 udev 这些设备通常显示为 /dev/ttyUSB#。 Android 是如何发生的,我不知道,所以你需要弄清楚这一点。
最后,您需要构建 RxTx 本机代码。这段代码非常笨拙——我在相当现代的 Angstrom 上构建它时遇到了问题,而且我根本没有尝试交叉编译。
【讨论】:
【参考方案5】:我刚刚将 JavaCOMM (GNU RXTX) 库移植到 Android。这是链接http://v-lad.org/projects/gnu.io.android/
您可能仍需要重新构建内核,并可能为您的环境重新编译共享库。但这应该可以帮助您入门。
【讨论】:
【参考方案6】:您首先需要对平板电脑进行 root 以获得对串行端口的读/写访问权限。
完成此操作后,请查看 Android Serial Port API。可以下载源码看看是怎么实现的。
它有一个本地库,可以获取串行端口的文件描述符,然后您可以读取和写入端口。通常,该应用程序可能不会列出平板电脑上的所有可用端口。要查看设备的连接位置,请将其插入 USB 并使用 HostMode,然后在模拟器中键入“dmesg | tail”。它应该为您提供有关设备的详细信息以及所连接的端口。
我还使用了爱可视平板电脑,我的设备连接到“/dev/ttyACM0”。
祝你好运!
【讨论】:
【参考方案7】:是的,在 Android 上从手机端使用串行设备绝对是一团糟。问题是 AOS 上的各种设备没有记录,并且很少与标准 Linux 设备一致。因此,您永远无法确定您实际上在与什么/谁交谈,某些设备、抽象层(HAL、UART、PCI 等)。这是有关如何从外部 USB 连接的 PC 与串行设备(调制解调器)通信的教程。
无论如何,如果您的手机确实支持 USB 主机模式,则必须有另一种方法来使用它来访问您的串行端口/设备。毕竟,向后兼容性通常可以确保您的 USB 电缆支持某种传真、电话或外部调制解调器。还有可能包含一些虚拟串行设备的 tehtering...
here 有一些教程。
附言。此类程序(如 Vlad 的程序)和应用程序(如 serial-api)的主要问题是它们对设备/端口名称以及访问(读/写)这些所需的权限做出了过于强烈的假设......
【讨论】:
【参考方案8】:我已经做到了。 你需要: 1. 根设备。
为您将要使用的特定 USB 芯片组创建您自己的模块:Building kernel module for Android
我建议使用移植的 usb-serial-for-android 库,它已经实现了 PL2303 驱动程序: https://code.google.com/r/felixhaedicke-usb-serial-for-android
【讨论】:
以上是关于在android中使用串口RS-232?的主要内容,如果未能解决你的问题,请参考以下文章
UART,串口,RS232,RS485等等,之间有啥联系和区别?
在Linux中如何使用命令进行RS-232串口通信和数据包解析
串口协议和RS-232标准,以及RS232电平与TTL电平的区别,“USB/TTL转232“模块(以CH340芯片模块为例)的工作原理。