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/23454258/

相关文章:

java - PhoneGap (2.4) 插件错误 : 'class not found'

android - 等一下 - Android

android - 在 BuildConfig 中隐藏 api key 安全吗?

sockets - 了解套接字编程中的select()

c - 压缩实用程序使用的 LZW 算法的 POSIX 系统库是什么

c++ - 如何在 async_read_until 之后使用 asio 缓冲区进行连续读取

java - Android、Web 服务、AsyncTask 请帮助菜鸟/确保我开始正确

linux - 如何管道或重定向 curl -v 的输出?

vb.net - 查找连接我的设备的串行端口

linux - 在带有单个串行连接的远程设备上使用 gdbserver?