android - 如何处理android手机中的串口?

标签 android unix serial-port at-command

其实我对串口一窍不通。但我看到了一个向它发送 at-command 的例子:

echo -e "AT" > /dev/smd0

什么是/dev/smd0 以及为什么他们有时会用/dev/ttyS0 替换它。

最佳答案

/dev/smd0/dev/ttyS0device files .这些文件是 virtual files它提供了一个文件 I/O 操作接口(interface),用于处理一些底层的东西,例如串行端口、硬盘和内存等硬件资源,或者处理信息、随机数输入、终端屏幕输出等非硬件资源。

设备文件有两种类型,字符型和 block 型。串行端口是字符设备,您可以使用 c 验证 ls -l 输出中的第一个字符:

$ ls -l /dev/ttyS0
crw-rw----. 1 root dialout 4, 64 Apr  7 00:25 /dev/ttyS0
$

/dev/ttyS0是linux台式电脑串口使用的设备名,对应DOS/Windows中的COM1(在很早的时候使用了 linux /dev/cua,您可能偶尔会遇到对它的引用)。对于移动电话的虚拟 USB 串行接口(interface),使用 /dev/ttyACM0/dev/ttyACM1。其他一些设备使用/dev/ttyUSB0。对于 Android,有几个不同的设备文件名在使用,其中 /dev/smd0 就是其中之一。您的手机可能使用另一个,因此您必须检查您应该专门为您的手机使用什么。


命令 echo -e "AT">/dev/smd0 没有意义。 -e 选项启用对反斜杠转义字符的解释,但由于以下字符串不包含此类字符,因此它只等同于 echo "AT">/dev/smd0

但是,当向调制解调器发送 AT 命令时,命令行应该仅以 \r 结束,没有其他任何内容。这是由 V.250 规定的.

所以向调制解调器发送命令“AT”的正确命令应该是

echo -n -e "AT\r" > /dev/smd0

但即使将 AT 命令正确发送到调制解调器,您也必须读回调制解调器的响应。在执行此操作时多次关闭和(重新)打开设备文件(您将通过运行一系列 shell 命令来完成)不是一个好的方法,因此我建议您使用我的程序 atinout专门写成用于命令行AT命令通信的:

$ echo AT | atinout - /dev/smd0 -
AT
OK
$

$ echo AT > input.txt
$ atinout input.txt /dev/smd0 output.txt
$ cat output.txt
AT
OK
$

这样您就可以正确执行所有调制解调器通信。

关于android - 如何处理android手机中的串口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447365/

相关文章:

JavaScript - React Native 等待回调执行并使用其变量

java - 仅覆盖 Java 对象的 equals() 方法

linux - socat:通过 TTY 隧道 IP

c - 用C语言设计主站(PC或ARM板)和从站(微处理器)之间简单而强大的串行协议(protocol)

c++ - 应用程序未从 COM 端口接收串行数据 - C++

java - 由回收器 View 按钮和notifyItemRemoved插入

android - 调用 Android native 方法失败

c++ 字符串到 ipAddress windows/unix 系统

unix - 在 UNIX 中的 sed 命令中使用否定

c - Unix环境运行C程序