实际上我对串口一无所知。但我看到一个发送at命令的例子:
echo -e "AT" > /dev/smd0
/dev/smd0 是一种设备文件,用于与移动通信模块进行通信。有时,由于不同硬件供应商的差异,/dev/smd0 可能会被替换为 /dev/ttyS0。
实际上我对串口一无所知。但我看到一个发送at命令的例子:
echo -e "AT" > /dev/smd0
/dev/smd0
和/dev/ttyS0
是设备文件。这些文件是虚拟文件,提供了一个文件I/O操作接口,用于处理一些底层的东西,比如硬件资源,例如串口、硬盘和内存,或者非硬件资源,例如进程信息、随机数输入、终端屏幕输出等。
设备文件有两种类型,字符设备和块设备。串口是字符设备,你可以通过ls -l
命令的输出中第一个字符为c
来验证:
$ 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串行接口,使用/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
$
通过这种方式,您将正确执行所有调制解调器通信。