Moh*_*aar 3 unix android serial-port at-command
实际上我对串口没什么了解.但我看到一个发送命令的例子:
echo -e "AT" > /dev/smd0
Run Code Online (Sandbox Code Playgroud)
什么是/ dev/smd0以及它们为什么有时用/ dev/ttyS0替换它.
/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)
这样,您将正确执行所有调制解调器通信.