一、短信AT命令
1、AT+CPMS
作用:设置短信存储位置
AT+CPMS=?
+CPMS: ("ME","MT","SM","SR"),("ME","MT","SM","SR"),("ME","MT","SM","SR")
+CPMS: (list of supported <mem1>s),(list of supported<mem2>s),(list of supported<mem3>s)
参数说明:
“SM”(U)SIM信息存储
“ME”移动设备信息存储
“MT”与“ME”存储相同
"SR"在EC20 AT手册也没找到相应说明,暂时置之不理。
mem1:要从该内存存储中读取和删除的消息
mem2:消息将被写入并发送到该内存存储
mem3:接收到的消息将被放置在这个内存存储中(前提没有使用AT+CNMI进行设置)
AT+CPMS="SM","SM","SM"设置短信存储在sim卡中。
2、AT+CNMI
作用:SMS事件报告配置
AT+CNMI=?
+CNMI: (0-2),(0-3),(0,2),(0-2),(0,1)
OK
详细说明,参考:https://blog.csdn.net/chenwr2018/article/details/88313436
3、AT+CMGF
作用:设置短信格式
AT+CMGF=?
+CMGF: (0,1)
OK
参数说明:
0为PDU模式
1为Text模式
注意:在CDMA网络下,只支持Test模式。
4、AT+CMGS
作用:发送短信
(1)先设置Test模式
AT+CMGF=1
不然会出现
AT+CMGS="139000000"
+CMS ERROR: 304
(2)设置终端字符集
AT+CSCS="GSM"
OK
(3)输入号码短信内容
AT+CMGS="13900000000"
> 666
>
+CMGS: 46
OK
AT+CMGS="13900000000"
回车后出现>
输入完内容回车,接着ctrl + z发送。
5、AT+CMGR
作用:读取短信
AT+CMGR=< index >
参数index 手册翻译内容如下:
关联内存支持的位置号范围内的整数类型值。(后面一大连串的参数说明搞得头晕晕的,感觉暂时也不用关注那么细。)
AT+CMGR=0表示接收到的第一条短信,AT+CMGR=1表示接受到的第二条短信,以此类推。
Test模式
“REC UNREAD” Received unread messages 收到未读消息
“REC READ” Received read messages 收到已读信息
“STO UNSENT” Stored unsent messages 存储未发送的消息
“STO SENT” Stored sent messages 存储已发送的消息
“ALL” All messages
PDU模式
0 Received unread messages
1 Received read messages
2 Stored unsent messages
3 Stored sent messages
4 All messages
AT+CMGF=1
OK
AT+CMGR=2
+CMGR: "REC UNREAD","139000000000",,"19/03/07,19:29:33+32",161,36,0,0,"+8613010383500",145,4
2333
OK
6、AT+CMGL
作用:罗列出所有短信
参数:查询对应状态的所有短信
AT+CMGL=?
+CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")
OK
AT+CMGL="ALL"
+CMGL: 0,"REC READ","13900000000",,"19/03/07,19:22:15+32",161,2
66
+CMGL: 1,"REC READ","13900000000",,"19/03/07,19:24:38+32",161,3
999
+CMGL: 2,"REC READ","13900000000",,"19/03/07,19:29:33+32",161,4
2333
+CMGL: 3,"REC READ","13900000000",,"19/03/07,19:41:36+32",161,10
chenwr2018
OK
罗列出所有短信内容。
7、AT+CMGD
作用:删除短信
AT+CMGD=?
+CMGD: (0,1,2,3),(0-4)
+CMGD: (list of supported <index>s),(list of supported <delflag>s)
参数:
index指的就是短信索引号,从0开始,3表示第四条短信。
delflag
0 删除索引号指定的短信
1 删除所有从存储器读取的短信
2 删除所有从存储器读取的短信,并发送手机短信
3 删除所有从存储中读取的短信,以及所有发送和未发送的手机短信
4 删除存储器中所有短信
AT+CMGD=1 //删除索引为1的短信
OK
AT+CMGD=1,4 //删除所有短信
OK
8、AT+CSCA
作用:查询短信中心号码。
AT+CSCA?
+CSCA: "+8613010300000",145
OK
二、离线短信问题分析
1、短信作用
(1)短信主要作用用来参数设置与控制设备。
特殊使用场景,发送复位短信。设备每次开机会去读取短信内容。因此必须保证已读的短信删除,否则设备会不断复位。
(2)由于SIM卡只有1万到10万次的读写次数和40-50短消息的存储空间。使用寿命与空间的问题,导致前期设置接收到短信不存储直接通知TE(Terminal Equipment 终端设备)。
问题:
离线发送控制短信,设备重新上电后无法正常接收,应用层没法读取到离线短信的控制命令。
疑问:
离线短信的具体原理是否事先存放在基站中,等手机终端广播告知基站已经驻网然后下发到手机终端上?
如果是这样那么整个短信收发流程跟正常设备在线是一致的?那为何接收不到呢?
2、简单短信原理阐述
(1)手机收发短信流程
源手机-》基站-》短信中心-》基站-》目的手机
(2)基站
基站会不断广播信息 方便手机搜寻到基站
不同基站的广播频率不一致
GSM系统 扫描整个频段,信号最强为合适基站【类比收音机收听广播的原理】
CDMA系统 基站固定使用频率。【控制载频 调谐】
(3)基站如何找到手机
基站不断广播,手机连上时当前基站会发送个位置区。当手机发现自己当前位置区发生变化,会发送自己当前位置,无线网络会记录在数据库里(位置寄存器)
手机周期性告诉无线网络自己当前的位置。
(4)流程说明
- 源手机发送短信,其实是发送到基站。手机与基站有个专门的通道,控制通道为SMS短信提供通路。
- 每个手机都有个SMSC(短信业务中心),当其他人给自己手机发送SMS短信时,其实是发送给短信业务中心。这种机制应该类似早期的传呼机原理。
- 该条短信将以控制通道上小型数据包的形式先通过SMSC(短信业务中心),然后通过基站将短信发送到手机。同理,当自己发送短信时,手机将通过控制通道将短信发送到基站,再由基站传送到SMSC,最后从这个位置到达接收目标。
3、目前的做法
为了保证离线短信能够被应用层正常获取。
- 不管什么状态下发送的短信,都先保存到sim卡中。
- 设备初始化之后,等执行程序读取该短信之后再把sim卡的内容删除。
主要的问题依然在sim卡读写寿命问题,不过还好短信控制命令使用频率不是很高!
参考资料:移远EC20 AT指令手册、《大话无线数据通信》
网友评论