关于ubuntu上读取sim卡iccid的问题

我们是菜鸟,很想起飞,请多点耐心关注和指点
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#16

帖子 dicce » 2019-11-25 21:58

astolia 写了:
2019-11-25 10:02
源里面有的东西直接用apt安装啊
sudo apt install socat
谢谢大佬 是我太菜了 我记得之前用过apt-get 没有成功就以为不行
下载下来之后也能用 就是最后一步不知道出了什么问题,报了个CME ERROR:13的错误 我换卡也没用 不知道什么情况。我查了一下好像是sim failure
但是也没排查出来是什么问题,希望能请大佬在帮我分析一下,谢谢了 :Adore :Adore
firefly@firefly:/dev$ sudo socat - /dev/ttyUSB3
AT+QCCID=?

OK(指令的返回结果)

AT+QCCID

+CME ERROR: 13(指令的返回结果)

括号里面的是我自己加的
谢谢大佬了
头像
astolia
论坛版主
帖子: 4178
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 697 次

Re: 关于ubuntu上读取sim卡iccid的问题

#17

帖子 astolia » 2019-11-27 12:18

你试过其他的SIM卡查询命令没有?如果其他的也是这种错误,那用ATI命令确认一下ttyusb3确实是你的ec20模块吗?还有如果模块有探测sim卡是否存在或者进行初始化的命令,也用一下试试
这些用户感谢了作者 astolia 于这个帖子:
dicce (2019-11-30 16:22)
评价: 3.7%
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#18

帖子 dicce » 2019-11-30 16:07

astolia 写了:
2019-11-27 12:18
你试过其他的SIM卡查询命令没有?如果其他的也是这种错误,那用ATI命令确认一下ttyusb3确实是你的ec20模块吗?还有如果模块有探测sim卡是否存在或者进行初始化的命令,也用一下试试
谢谢大佬,我终于读出来了,但是是很莫名其妙的就成功了,我先使用AT+QPOWD
It is recommended to execute AT+QPOWD command to turn off the module, as it is the safest and best
way. This procedure is realized by letting the module log off from the network and allowing the software to
enter into a secure and safe data state before disconnecting the power supply.
After sending AT+QPOWD, do not enter any other AT commands. The module outputs message
POWERED DOWN and sets the STATUS pin as low to enter into the shutdown state. In order to avoid
data loss, it is suggested to wait for 1s to switch off the VBAT after the STATUS pin is set as low and the
URC POWERED DOWN is outputted. If POWERED DOWN has not been received within 65s, the VBAT
shall be switched off compulsorily.
然后在打AT+QCCID就显示成功了,然后我又直接重启整个板子,SIM卡并没有拔,然后直接打AT+QCCID后结果仍然返回了。然后我把sim卡给拔了,在插上再次使用AT+QCCID 然后就显示+cem error:13的错误。然后我用AT+QSIMSTAT? 查看sim卡的插入状态发现,并没有插上。我在使用AT+QPOWD之后,再使用AT+QCCID指令,结果就正确返回了,这是不是跟sim卡的热插拔有关啊?
我还有最后一个疑问,具体情况如下:
root@firefly:/home/firefly# socat - /dev/ttyUSB3
AT+QCCID(这是我自己输入的)
AT+QCCID(命令显示的)

+QCCID:929293939494929

OK
(这往上都可以理解为该指令返回的)

AT+Q

ERROR

AT+Q

ERROR
(就是这最下面的四行,除了那个AT+QPOWD外,其他的指令都会多上这四行,不知道是什么情况)
谢谢大佬了!!
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#19

帖子 dicce » 2019-11-30 17:04

astolia 写了:
2019-11-27 12:18
你试过其他的SIM卡查询命令没有?如果其他的也是这种错误,那用ATI命令确认一下ttyusb3确实是你的ec20模块吗?还有如果模块有探测sim卡是否存在或者进行初始化的命令,也用一下试试
对了大佬,还有就是怎么用socat把命令返回的结果,放进一个文件啊,我发现这个执行 socat - /dev/ttyUSB3 之后,要想结束必须ctrl+c才能退出,我按你之前给我说的那个 socat - /dev/ttyUSB3,crn1试了下,然后报了一个 E parseopts(): unknown option "crn1"
然后我用 socat - /dev/ttyUSB3 crn1 报了一个 E exactly 2 addresses required 说是我打了三个地址,但是如果把前面的 - 换成别的,那么怎么向ttyUSB3里面写命令呢?
谢谢大佬了!
头像
astolia
论坛版主
帖子: 4178
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 697 次

Re: 关于ubuntu上读取sim卡iccid的问题

#20

帖子 astolia » 2019-12-01 21:17

dicce 写了:
2019-11-30 16:07
然后在打AT+QCCID就显示成功了,然后我又直接重启整个板子,SIM卡并没有拔,然后直接打AT+QCCID后结果仍然返回了。然后我把sim卡给拔了,在插上再次使用AT+QCCID 然后就显示+cem error:13的错误。然后我用AT+QSIMSTAT? 查看sim卡的插入状态发现,并没有插上。我在使用AT+QPOWD之后,再使用AT+QCCID指令,结果就正确返回了,这是不是跟sim卡的热插拔有关啊?
我没碰过这模块,不知道它怎么设计的。翻了一下它的手册上说AT+QSIMDET可以启用热插拔功能,你自己试一下呗


dicce 写了:
2019-11-30 16:07
我还有最后一个疑问,具体情况如下:
root@firefly:/home/firefly# socat - /dev/ttyUSB3
AT+QCCID(这是我自己输入的)
AT+QCCID(命令显示的)

+QCCID:929293939494929

OK
(这往上都可以理解为该指令返回的)

AT+Q

ERROR

AT+Q

ERROR
(就是这最下面的四行,除了那个AT+QPOWD外,其他的指令都会多上这四行,不知道是什么情况)
谢谢大佬了!!
应该是命令终止字符不对。我看它手册里命令的语法是
1.2. AT Command Syntax
The “AT” or “at” prefix must be set at the beginning of each command line. To terminate a command line enter <CR>.Commands are usually followed by a response that includes “<CR><LF><response><CR><LF>”. Throughout this document, only the responses are presented, “<CR><LF>” are omitted intentionally.
它是要求以回车符(Carriage Retrurn, CR)结尾,linux下面按回车是输出的换行符(Line Feed, LF)。我猜想是它认为命令没有结束,一直从缓冲区读下去结果溢出了。解决方法就是我前面提到的加crnl参数。cr参数应该也有效,不过会导致返回的数据中的换行符也被替换成回车符,显示上可能会遇到问题。


dicce 写了:
2019-11-30 17:04
对了大佬,还有就是怎么用socat把命令返回的结果,放进一个文件啊
这种情况下用tee吧,把socat输出到标准输出的数据复制一份到文件

代码: 全选

socat - /dev/ttyUSB3 | tee /path/to/file

dicce 写了:
2019-11-30 17:04
我按你之前给我说的那个 socat - /dev/ttyUSB3,crn1试了下,然后报了一个 E parseopts(): unknown option "crn1"
然后我用 socat - /dev/ttyUSB3 crn1 报了一个 E exactly 2 addresses required 说是我打了三个地址,但是如果把前面的 - 换成别的,那么怎么向ttyUSB3里面写命令呢?
谢谢大佬了!
你把字母的l和数字的1看错了。crnl是指Carriage Return New Line,也就是回车符+换行符,和上面的CRLF是同一个东西。
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#21

帖子 dicce » 2019-12-01 23:06

astolia 写了:
2019-12-01 21:17
dicce 写了:
2019-11-30 16:07
然后在打AT+QCCID就显示成功了,然后我又直接重启整个板子,SIM卡并没有拔,然后直接打AT+QCCID后结果仍然返回了。然后我把sim卡给拔了,在插上再次使用AT+QCCID 然后就显示+cem error:13的错误。然后我用AT+QSIMSTAT? 查看sim卡的插入状态发现,并没有插上。我在使用AT+QPOWD之后,再使用AT+QCCID指令,结果就正确返回了,这是不是跟sim卡的热插拔有关啊?
我没碰过这模块,不知道它怎么设计的。翻了一下它的手册上说AT+QSIMDET可以启用热插拔功能,你自己试一下呗


dicce 写了:
2019-11-30 16:07
我还有最后一个疑问,具体情况如下:
root@firefly:/home/firefly# socat - /dev/ttyUSB3
AT+QCCID(这是我自己输入的)
AT+QCCID(命令显示的)

+QCCID:929293939494929

OK
(这往上都可以理解为该指令返回的)

AT+Q

ERROR

AT+Q

ERROR
(就是这最下面的四行,除了那个AT+QPOWD外,其他的指令都会多上这四行,不知道是什么情况)
谢谢大佬了!!
应该是命令终止字符不对。我看它手册里命令的语法是
1.2. AT Command Syntax
The “AT” or “at” prefix must be set at the beginning of each command line. To terminate a command line enter <CR>.Commands are usually followed by a response that includes “<CR><LF><response><CR><LF>”. Throughout this document, only the responses are presented, “<CR><LF>” are omitted intentionally.
它是要求以回车符(Carriage Retrurn, CR)结尾,linux下面按回车是输出的换行符(Line Feed, LF)。我猜想是它认为命令没有结束,一直从缓冲区读下去结果溢出了。解决方法就是我前面提到的加crnl参数。cr参数应该也有效,不过会导致返回的数据中的换行符也被替换成回车符,显示上可能会遇到问题。


dicce 写了:
2019-11-30 17:04
对了大佬,还有就是怎么用socat把命令返回的结果,放进一个文件啊
这种情况下用tee吧,把socat输出到标准输出的数据复制一份到文件

代码: 全选

socat - /dev/ttyUSB3 | tee /path/to/file

dicce 写了:
2019-11-30 17:04
我按你之前给我说的那个 socat - /dev/ttyUSB3,crn1试了下,然后报了一个 E parseopts(): unknown option "crn1"
然后我用 socat - /dev/ttyUSB3 crn1 报了一个 E exactly 2 addresses required 说是我打了三个地址,但是如果把前面的 - 换成别的,那么怎么向ttyUSB3里面写命令呢?
谢谢大佬了!
你把字母的l和数字的1看错了。crnl是指Carriage Return New Line,也就是回车符+换行符,和上面的CRLF是同一个东西。
好的,谢谢大佬。我明天去试一下。十分感谢!!
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#22

帖子 dicce » 2019-12-06 22:05

astolia 写了:
2019-12-01 21:17
dicce 写了:
2019-11-30 16:07
然后在打AT+QCCID就显示成功了,然后我又直接重启整个板子,SIM卡并没有拔,然后直接打AT+QCCID后结果仍然返回了。然后我把sim卡给拔了,在插上再次使用AT+QCCID 然后就显示+cem error:13的错误。然后我用AT+QSIMSTAT? 查看sim卡的插入状态发现,并没有插上。我在使用AT+QPOWD之后,再使用AT+QCCID指令,结果就正确返回了,这是不是跟sim卡的热插拔有关啊?
我没碰过这模块,不知道它怎么设计的。翻了一下它的手册上说AT+QSIMDET可以启用热插拔功能,你自己试一下呗


dicce 写了:
2019-11-30 16:07
我还有最后一个疑问,具体情况如下:
root@firefly:/home/firefly# socat - /dev/ttyUSB3
AT+QCCID(这是我自己输入的)
AT+QCCID(命令显示的)

+QCCID:929293939494929

OK
(这往上都可以理解为该指令返回的)

AT+Q

ERROR

AT+Q

ERROR
(就是这最下面的四行,除了那个AT+QPOWD外,其他的指令都会多上这四行,不知道是什么情况)
谢谢大佬了!!
应该是命令终止字符不对。我看它手册里命令的语法是
1.2. AT Command Syntax
The “AT” or “at” prefix must be set at the beginning of each command line. To terminate a command line enter <CR>.Commands are usually followed by a response that includes “<CR><LF><response><CR><LF>”. Throughout this document, only the responses are presented, “<CR><LF>” are omitted intentionally.
它是要求以回车符(Carriage Retrurn, CR)结尾,linux下面按回车是输出的换行符(Line Feed, LF)。我猜想是它认为命令没有结束,一直从缓冲区读下去结果溢出了。解决方法就是我前面提到的加crnl参数。cr参数应该也有效,不过会导致返回的数据中的换行符也被替换成回车符,显示上可能会遇到问题。


dicce 写了:
2019-11-30 17:04
对了大佬,还有就是怎么用socat把命令返回的结果,放进一个文件啊
这种情况下用tee吧,把socat输出到标准输出的数据复制一份到文件

代码: 全选

socat - /dev/ttyUSB3 | tee /path/to/file

dicce 写了:
2019-11-30 17:04
我按你之前给我说的那个 socat - /dev/ttyUSB3,crn1试了下,然后报了一个 E parseopts(): unknown option "crn1"
然后我用 socat - /dev/ttyUSB3 crn1 报了一个 E exactly 2 addresses required 说是我打了三个地址,但是如果把前面的 - 换成别的,那么怎么向ttyUSB3里面写命令呢?
谢谢大佬了!
你把字母的l和数字的1看错了。crnl是指Carriage Return New Line,也就是回车符+换行符,和上面的CRLF是同一个东西。
大佬,不好意思。我太笨了,还需要您指点一下。
我就是想向一个类似于C函数一样。在我的程序中调用一下,然后就可以得到ICCID的值,字符串处理都好说,但是不知道编程与TTYUSB3交互。
我试了一下popen()发现不怎么好使,要是用socat的话,他是交互型的。open()我看文档说要么写,要么读。没法边向里面写,又边从里面读数据
然后我用了 cat /dev/ttyUSB3 & echo -e 'AT+QCCID\r\n' >/dev/ttyUSB3 这个方法在命令行中也能返回出ICCID,我就用POPEN(R)的模式,也不知道是我代码有问题,还是方法不行。最后结果就是执行之后单独出一行,C代码也不会自行结束,就在那里挂着。要我自己CTRL+C他才会退出,可能是我代码有问题吧。后来我看网上对于TTYUSB的读写,都还是要设计什么波特率,什么的挺复杂的也没怎么仔细看。语言组织的有点问题,我太菜了,说也说不清楚,就是想问一下大佬我的思路有没有问题,还有就是提点建议。谢谢了 :Adore :Adore
头像
astolia
论坛版主
帖子: 4178
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 697 次

Re: 关于ubuntu上读取sim卡iccid的问题

#23

帖子 astolia » 2019-12-07 10:58

你为什么要用popen?你知道popen是干什么的吗?
如果要用linux系统编程方法,open、write、read这三个最基本的IO函数就足够完成读写任务了
如果要用C标准库函数,和上面对应的fopen,fputc/fprintf/fputs,fgetc/fgets这些标准库函数也可以搞定读写

如果你shell下面没设置波特率就能成功读写,说明默认波特率就可行,不需要额外设置
dicce
帖子: 15
注册时间: 2019-11-09 23:00
系统: win10
送出感谢: 1 次
接收感谢: 0

Re: 关于ubuntu上读取sim卡iccid的问题

#24

帖子 dicce » 2019-12-08 21:06

astolia 写了:
2019-12-07 10:58
你为什么要用popen?你知道popen是干什么的吗?
如果要用linux系统编程方法,open、write、read这三个最基本的IO函数就足够完成读写任务了
如果要用C标准库函数,和上面对应的fopen,fputc/fprintf/fputs,fgetc/fgets这些标准库函数也可以搞定读写

如果你shell下面没设置波特率就能成功读写,说明默认波特率就可行,不需要额外设置
有同学跟我说用popen,我就查了一下,百度上说是搞一个子进程 调用shell命令,我就用了一下。
好的,大佬我知道了。对于ttyUSB3是不是就是跟一般的文件读写没有什么差别啊。我明天去试一下。
回复

回到 “初学者园地 - Ubuntu 19.10 (Eoan Ermine)”