其实我对串口一窍不通。但我看到了一个向它发送 at-command 的例子:
echo -e "AT" > /dev/smd0
什么是/dev/smd0 以及为什么他们有时会用/dev/ttyS0 替换它。
最佳答案
/dev/smd0
和 /dev/ttyS0
是 device 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/