通过串行

时间:2017-07-21 06:54:56

标签: linux character-encoding serial-port at-command

我需要发送一个PEM格式的证书,用于存储模块,该模块可以通过AT命令集通过/dev中某个Linux设备节点上的串行接口进行通信。

到目前为止,我一直在使用

echo 'AT' > /dev/ttyX

发出必要的命令,它已经完成了诀窍。

在另一个终端窗口上使用cat /dev/ttyX监控设备的任何输出。

我现在有一个用ANSI编码的证书文件。文档告诉我仅使用LF换行符将其输入到模块,并使用Ctrl+Z终止输入,我认为这是十六进制0x1A。该文档还指定证书文件可能不以EOF字符结尾。我使用十六进制编辑器来验证文件的格式是否正确。

我尝试使用echoprintf将证书字符/字符串发送到模块。

我试图在文件中包含0x1A字符,并在证书字符之后单独发送:

printf '\x1a' > /dev/ttyX

或者

echo -n -e '\x1a' > /dev/ttyX

该模块似乎承认0x1A因为它停止了> - 提示证书,并给了我最冗长的回复:ERROR

通常,我发送的证书文件内容如下:

echo -e "$(cat certfile)" > /dev/ttyX

printf '%b' "$(cat certfile)" > /dev/ttyX

请假设我可以访问基本的Linux shell工具(例如echo, printf, nano, stty等),但没有选择轻松安装新工具。我使用SSH访问目标设备,pscp将文件传输到目标设备。我也有一个Windows装备。

有什么建议我应该考虑什么?也许我错过了stty选项? cat在输入阶段做了些讨厌的事吗?调查即将发送到模块的实际字符数据的一个启示技巧?我错过了连串通讯的一些奇怪的问题?

如果我

printf '%b' "$(cat cert)" > ./testoutput

od -x testoutput

该文件在十六进制中看起来没问题(我手动重新排序od -x的输出,它似乎成对的十六进制数字并切换它们)。例如,结尾是:

2d 2d 2d 2d 2d 45 4e 44 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 1a 00

stty或接收端必定存在导致问题的内容。正确?

1 个答案:

答案 0 :(得分:0)

  

例如,结尾是:

     

2d 2d 2d 2d 2d 45 4e 44 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 00 1a

等一下。在00之前1a在那里做什么?

那不属于。尝试删除它。