U8300W模块内置协议栈的开发笔记

本文主要记录如何通过UART接口发送AT指令进行GPRS网络连接。

前言

U8300W是LTE制式的4G网络模块,支持移动和联通4G网络。 类似的模块的还有U8300C、U7500、C5300。 U8300C是支持电信4G的全网通模块。 U7500是只支持联通3G模块。 C5300是只支持电信3G模块。

这几个模块的开发方式是一样的,支持的AT命令也都差不多。

硬件

硬件上使用一路UART接口与模块通信,UART接口默认使用115200波特率。 模块上电就会启动,可以通过拉低RESET管脚对模块进行复位操作。

软件

AT命令的格式: 发送方是以AT开头0x0D结尾的字符串,格式比较统一。 模块响应是以0x0D,0x0A结尾,但开头字符是没有统一的格式,有的指令响应是以+开头,有的又没有。

AT指令软件初始化流程仅供参考:

第1步:等待模块就绪 由于模块上电就会启动,但启动时模块的UART接口会打印模块的启动日志,大约持续30秒。 所以主机最好延时30秒再循环发送AT,等待模块响应OK,表示模块通信就绪了。 如果发送了多次都没有响应,则可以给模块来一个复位信号。 再重复上面的操作。

第2步:基本参数设置 2.1 发送ATE0,关闭指令回显。 如果不关闭回显,主机发什么,模块就会原样回复,适合于在终端软件里人工发送命令,可以看到输入指令。 但是我们做产品是用程序去发指令,指令回显不利于写代码解析响应数据,所以关掉为好。 2.2 发送AT+CREG=0,取消注册状态主动上报 注册状态通过AT+CREG?查询就行了,可以不用主动上报。 2.3 发送AT+CMEE=2,设置错误反馈方式 设置为0所有的错误都会返回ERROR. 设置为2某些指令错误会返回+CME ERROR:给出详细的错误信息 2.4 发送AT+MODODR=2,设置模块搜网模式 U8300可以通过这个指令设置锁定4G或2G网络。

第3步:模块识别 主机发送AT+GMM,可以得到模块型号。 但是这条指令的响应内容就是模块型号字符串,没有固定的头和尾,解析比较困难, 如果发这条指令之后,模块突然主动上报一些其它内容,不要把干扰数据当成模块型号了! 发送ATI也可以得到模块型号,还可以获取模块固件版本号信息。

第4步:检测SIM卡 主机发送AT+CPIN?,可以得到SIM卡状态。 这条指令很好解析,响应是格式是+CPIN: 检测到接收的内容是+CPIN开头,就可以确定这是指令应答,而不是模块主动上报的干扰数据。 当为READY时表示SIM卡也就绪了,可以进行下一步操作了。 当为其它状态时,看手册吧,反正是不正常的状态。 发送AT+CIMI可以得到IMSI信息,从号码的前5位可以判断这张卡是哪家运营商, 比如46000是中国移动,46001是中国联通。

第5步:等待注册网络 主机发送AT+CREG? 模块响应+CREG:, 当stat的值为1或者5时,表示注册成功。 可以发送AT+COPS?查询当前注册的是哪家运营商 可以发送AT+CSQ查询信号强度1-31,31表示信号最强

第6步:激活GPRS数据连接 主机发送AT+MIPPROFILE=1,,,设置APN接入点。 模块响应:OK 主机发送AT+MIPCALL=1激活GPRS数据连接。 模块响应:+MIPCALL: 模块响应:OK

第7步:数据连接相关的参数设置 发送AT+MIPHEX=1,设置数据格式 内嵌TCP/IP协议栈发送数据时采用16进制字符串的格式,而不使用原始二进制数据。

至此模块的网络初始化完成了。 可以进行网络通信了。

第8步:连接远程服务器 发送AT+MIPOPEN=,0,,,0 是通道号码,模块支持1-4通道,可以理解为socket句柄。 可以是域名也可以是IP地址。 是服务器端口。 模块响应:+MIPOPEN:, 模块响应:OK 响应的是连接状态,1表示连接成功,0表示连接失败。

第9步:发送数据 发送AT+MIPSEND=, 是通道号码 是数据内容,用双引号包含的HEX编码。 发完这条命令是把数据放到模块缓冲区,缓冲区最大1372字节。 还要再发送:AT+MIPPUSH=才会把数据发送到远程服务器。 模块响应:OK

第10步:接收数据 当模块收到远程服务器发送的数据时会主动上报。 +MIPRTCP:,,<\r\n> 是通道号码 是数据长度 是接收数据以HEX编码

第11步:关闭连接 如果是服务器发起的关闭连接,模块会主动上报: +MIPSTATUS: TCP  DISCONNECT 如果是模块发起关闭连接,要向模块发送:AT+MIPCLOSE= 模块响应:+MIPCLOSE:,0,0,0 模块响应:OK