1. WISMO218
WISMO281有两种方式可以进入休眠模式(sleepmode),通过AT+PSSLEEP命令来实现:
1.1 AT+PSSLEEP=0
发送AT+PSSLEEP?来获取当前休眠模式,获取回来的值为0,说明模块默认的休眠模式是0,
下面看PSSLEEP命令的介绍:
图1
图2
下面来看看此模式下模块的休眠与唤醒:
图3
可知在模式0下:
⑴休眠
是通过DTR信号和模块本身的firmware来控制模块进入休眠模式的,如果DTR引脚为低电平,则模块不会进入休眠模式(可是这好像和图2中的描述矛盾),如果DTR引脚为高电平,则模块会进入休眠模式
⑵唤醒
为了唤醒模块,只需要给DTR引脚一个从高电平到低电平的下降沿就可以唤醒模块了。
由此可见,如果我们要在需要的时候根据实际情况来控制模块的休眠与唤醒,就需要在硬件设计的时候引出对DTR引脚的控制。也就是说如果引出了对DTR引脚的控制,可以让模块处于0的模式下。
1.2 AT+PSSLEEP=1
图4
因为模块默认是模式0,需要发送AT+PSSLEEP=1来改为模式1,但是如果对模块重新上电后又回到模式0的状态,发送AT&F命令不能恢复为0。如果要让此设置在模块重启后有效,需要用AT&W+PSSLEEP=1来设置,这样,在重启之后就是模式1了,当然,如果要改为模式0,可发送AT&W+PSSLEEP=0命令
由图4可知,在PSSLEEP=1模式下:
⑴休眠
模块的休眠时由模块的fimware(也就是模块本身的软件)来控制的,WISMO模块在一定时间内(可是数据手册上并没有说明具体是多长时间,SIM900这部分标明是5s)没有活动(应该包括收发数据、on air及模块GPIO中断),模块就会自动进入休眠模块,而不依赖于DTR引脚的电平。
⑵唤醒
任何发送给模块的ASCII字符均可以唤醒模块,比如发送AT命令。
因为我们硬件上没有引出DTR引脚,如果要节省功耗,只能让模块工作在PSSLEEP=1模式下。
2. SIM900
SIM900也有两种睡眠模式,通过AT+CSCLK命令来设置,首先发送AT+CSCLK?返回+CSCLK:0,说明模块默认的是0,在这个工作模式模式下,就算通过控制DTR引脚和发送AT命令也不能让模块进入休眠模式,要让模块可以进入休眠模式,比如发送AT+CSCLK=1或AT+CSCLK=2。
2.1 Sleep Mode1(AT+CSCLK=1)
⑴休眠
图5
在CSCLK=1的模式下,由DTR引脚来控制模块进入和退出休眠模式,在满足下面的条件下
①on air
②GPIO的硬件中断
③串口有收发数据
只要有这三个条件中的其中一个,这时,如果控制DTR引脚为高电平,模块就会进入休眠模式,在此模式下,SIM900仍然能够从网络中接收寻呼(paging)和短信(SMS),但是此时串口是不可访问的,也就访问无效。
需要注意,SIM900模块出厂默认的CSCLK=0,此模式下模块不能进入休眠模式,所以如果要让模块能够进入休眠模式1,首先要发送AT+CSCLK=1给模块,然后在满足上面的条件下才会进入休眠模式1。
⑵唤醒
图6
在CSCLK=1的模式下,可以通过下面的办法来唤醒模块:
①拉低DTR引脚,在DTR引脚为拉低为低电平50ms后,串口就处于有效的状态,这时可以和模块进行有效交互了。
②从网络中收到语音或是数据呼叫。
③从网络中收到SMS短信
2.2 Sleep Mode2(AT+CSCLK=2)
⑴休眠
图7
在CSCLK=2的模式下,SIM900连续监控串口端的数据信号,在满足下面的条件之下:
①RXD信号脚超过5s没有收到数据。
②没有on air
③没有硬件中断,比如GPIO中断。
只要有这三个条件中的其中一个,这时,模块就会自动进入休眠模式2,在此模式下,SIM900仍然能够从网络中接收寻呼(paging)和短信(SMS),但是此时串口是不可访问的.
⑵唤醒
图8
在CSCLK=2的模式下,可以通过下面的办法来唤醒模块:
①通过串口发送数据给SIM900模块。
②从网络中收到语音或是数据呼叫。
③从网络中收到SMS短信
请注意,发送并用于唤醒模块的用户数据的第一个字节除了起到唤醒作用之外,将被模块忽略此字节数据对应的功能,一般情况下,在处于睡眠模式下,发送AT用于唤醒模块。
2.3 AT+CSCLK
AT+CSCLK=0时,关闭串口,电流为134到145mA
AT+CSCLK=1时,关闭串口,电流为135到146mA
AT+CSCLK=2是,关闭串口,电流为114到123Ma
可见在AT+CSCLK=2时,SIM900模块的功耗在这三种模式下最低。