at指令读信息的一个问题

google_lover 2012-03-21 05:48:41
1.如果我用我的手机给tc35i模块上的sim卡发一个信息,信息内容是"你好"
然后我去读取:
当tc35i为pdu模式时,使用AT+CMGL=0读取到的信息内容是(指令AT+CMGL=0是读取未读的信息)
+CMGL: 10,0,,24
0891683108200105F0040D91688102715810F2000821301271410223044F60597D
其中最后的8个字母4F60597D是"你好"的unicode

当tc35i为text模式时,使用AT+CMGL=0读取到的信息内容是
ERROR

2.如果我用我的手机给tc35i模块上的sim卡发一个信息,信息内容是"hi"
当tc35i为pdu模式时,使用AT+CMGL=0读取到的信息内容是
+CMGL: 11,0,,22
0891683108200105F0040D91688102715810F200002130127102512302E834
其中最后的4个字母E834对应hi------------问题1,E834是hi的什么编码?

当tc35i为text模式时,使用AT+CMGL=0读取到的信息内容是
ERROR------------问题2,为什么tc35i为text模式时,使用AT+CMGL=0总是返回ERROR,是tc35i不支持在text模式下的AT+CMGL=0指令吗?我从手册上了解到的AT+CMGL在如下情况下返回ERROR: If error is related to ME functionality:+CMS ERROR: <err>

3.根据1得知,"你好"的信息编号为10,所以我直接用AT+CMGR=10去读取这条信息
当tc35i为pdu模式时返回
+CMGR: 1,,24
0891683108200105F0040D91688102715810F2000821301271410223044F60597D

当tc35i为pdu模式时返回
+CMGR: "REC READ","+8618201785012",,"12/03/21,17:14:20+32"
4F60597D

------------两个指令都可以读取到4F60597D

4.根据2得知,"hi"的信息编号为11,所以我直接用AT+CMGR=11去读取这条信息
当tc35i为pdu模式时返回
+CMGR: 1,,22
0891683108200105F0040D91688102715810F200002130127102512302E834

当tc35i为text模式时返回
+CMGR: "REC READ","+8618201785012",,"12/03/21,17:20:15+32"
hi
------------使用AT+CMGR=11指令在text模式下可以顺利读到hi字母, 在pdu模式下仍然返回E834,和1一样。

麻烦大家帮忙一下啊。
...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
google_lover 2012-03-22
  • 打赏
  • 举报
回复
http://read.pudn.com/downloads13/sourcecode/comm/54361/VC%E5%86%99%E7%9A%84%E7%9F%AD%E4%BF%A1%E6%94%B6%E5%8F%91%E7%A8%8B%E5%BA%8F%EF%BC%88%E5%8C%85%E6%8B%ACPDU%E7%BC%96%E8%A7%A3%E7%A0%81%EF%BC%89/Sms.cpp__.htm
google_lover 2012-03-22
  • 打赏
  • 举报
回复
谢谢楼上的回答!
问题1中那些编码是真编码!是7位编码。
所以统一使用pdu格式来接收消息即可。
0891683108200105F0040D91688102715810F200 08 21301271410223044F60597D
在接收到的pdu消息串中有一个表示编码方案的域,如上
08代笔发送方使用unicode的编码(2字节)。
00带便7位编码,只用来发送字母和数字等。
0891683108200105F0040D91688102715810F2000821301271410223044F60597D
hanqingwu 2012-03-22
  • 打赏
  • 举报
回复
如果你想用PDU模式,就设置AT+CMGF=0.
如果你想用Text模式,就设置AT+CMGF=1.
你用哪种模式,你自己是已知的吧。
一般都是用pdu模式比较好处理。
google_lover 2012-03-21
  • 打赏
  • 举报
回复
问题统一为:

如果都在text模式下接收信息,发AT+CMGL="REC UNREAD",返回未读信息.其中收到的pdu信息是unicode编码,收到的text信息直接就是ascii字符.但存在的问题就是2楼所述的怎么区分对方发的是"你好" 还是"4F60597D",

如果都在在pdu模式下接收信息,发AT+CMGL=0,返回未读信息.其中收到的pdu信息是unicode编码,收到的text信息编码如问题1.那么问题1中那些编码是真编码还是乱码呢?

help me!
google_lover 2012-03-21
  • 打赏
  • 举报
回复
帖子在
http://topic.csdn.net/t/20040918/16/3386467.html

总结了一下,
在pdu模式下,发AT+CMGL="REC UNREAD",返回ERROR
在text模式下,发AT+CMGL=0,返回ERROR

在pdu模式下,发AT+CMGL=0,返回未读信息.其中收到的pdu信息正确,收到的text信息编码如问题1.
在text模式下,发AT+CMGL="REC UNREAD",返回未读信息。其中收到的pdu信息正确,收到的text信息正确。
(这里的 收到的pdu信息 是指发送方使用pdu模式发的信息...)

这样的话,岂不是需要先将tc35i先设置成text模式,然后发指令AT+CMGL="REC UNREAD".虽然可以读取出来,但是我怎么判断是text信息还是pdu信息呢?
比如手机上发"你好"和"4F60597D",tc35i在text模式下收到的都是4F60597D。怎么区分呢?
google_lover 2012-03-21
  • 打赏
  • 举报
回复
刚刚看到一个帖子
对于问题2,在text模式下使用
AT+CMGL="REC UNREAD"
去读取未读信息。

3,849

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧