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

Moh*_*aar 3 unix android serial-port at-command

实际上我对串口没什么了解.但我看到一个发送命令的例子:

echo -e "AT" > /dev/smd0
Run Code Online (Sandbox Code Playgroud)

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

hlo*_*dal 5

/dev/smd0并且/dev/ttyS0设备文件.这些文件是虚拟文件,提供文件I/O操作接口,用于处理某些底层事物,例如串行端口,硬盘和内存等硬件资源,或者处理信息,随机数输入,终端屏幕等非硬件资源输出等

设备文件有两种形式,字符和块.串行端口是字符设备,您可以验证c输出中的第一个字符ls -l:

$ ls -l /dev/ttyS0
crw-rw----. 1 root dialout 4, 64 Apr  7 00:25 /dev/ttyS0
$
Run Code Online (Sandbox Code Playgroud)

/dev/ttyS0是用于Linux台式计算机上的串行端口的设备名称,对应COM1于DOS/Windows(在/dev/cua使用linux的非常早期,您可能偶尔会遇到对此的引用).用于移动电话的虚拟USB串行接口/dev/ttyACM0/dev/ttyACM1使用.其他一些设备使用/ dev/ttyUSB0.对于Android,有一些不同的设备文件名正在使用中,其中/dev/smd0之一就是其中之一.您的手机可能会使用另一部手机,因此您必须检查应该专门用于手机的内容.


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

但是,在向调制解调器发送AT命令时,命令行应仅使用\r其他内容终止.这是V.250规定的.

因此,将命令"AT"发送到调制解调器的正确命令应该是

echo -n -e "AT\r" > /dev/smd0
Run Code Online (Sandbox Code Playgroud)

但即使在正确地将AT命令发送到调制解调器时,您也必须回读调制解调器的响应.这样做时关闭和(重新)打开设备文件几次(你将通过运行一系列shell命令来完成)不是一个好的方法,所以我建议你使用我的程序atinout,具体是写入用于命令行AT命令通信:

$ echo AT | atinout - /dev/smd0 -
AT
OK
$
Run Code Online (Sandbox Code Playgroud)

要么

$ echo AT > input.txt
$ atinout input.txt /dev/smd0 output.txt
$ cat output.txt
AT
OK
$
Run Code Online (Sandbox Code Playgroud)

这样,您将正确执行所有调制解调器通信.