记录使用4G模块SIM7600CE的一些问题
本来是想在这里记录开发工作中遇到的问题,有时候太忙就忘记这回事了。
之前使用SIMCOM的GSM模块现在通信显得有点吃力,毕竟很多地方2G通信不是很顺畅,速率也跟不上。最近在使用SIMCOM的4G模块,更能满足现在数据通信的要求,毕竟现在5G都宣传挺久了。
底层大部分还是沿用之前的,有做一些改动。
SIM7600CE支持LTE-TDD/LTE-FDD/HSPA+/TD-SCDMA/EVDO和GSM/GPRS/EDGE等频段, 支持LTE CAT4(下行速度为150Mbps),有LCC封装和PCIE封装,两者引脚有些差异,这次使用的PCIE封装有些引脚没有引出来。具体差异可参考官方手册。
没有用于指示模块上电状态的STATUS引脚,直接由硬件控制模块上电和掉电并程序记录上电状态。上电初始化过程注释掉之前的检测模块上电状态的部分。
void SIMCOM_SetPWRKEY(uint8_t Level)
{ if(Level) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11,GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11,GPIO_PIN_RESET);
} //PWR
if(pHandle->pIWDG_Feed!=NULL) pHandle->pIWDG_Feed(); //喂狗// if(pHandle->pGetSTATUS_Pin()==SIMCOM_L_LEVEL) //模块没有上电
// {
// pHandle->s_isInitStatus = FALSE; //模块没有初始化
// SIMCOM_USER_debug("[SIMCOM]:模块没有上电!\r\n");
// if(SIMCOM_HardwarePowerUP(pHandle, TRUE) == TRUE) //上电
// {
// pHandle->pSetPWRKEY_Pin(SIMCOM_H_LEVEL);
// pHandle->pDelayMS(500);
// SIMCOM_USER_debug("[SIMCOM]:开机!\r\n");if(SIMCOM_TestAT(pHandle, 50) != TRUE) //发送AT测试命令{if(pModeInof!=NULL) *pModeInof = "模块未知";SIMCOM_USER_debug("[SIMCOM]:通信错误,串口错误!\r\n");}
// }
// else
// {
// if(pModeInof!=NULL) *pModeInof = "模块未知";
// SIMCOM_USER_debug("[SIMCOM]:开机失败!\r\n");
// Error = SIMCOM_POWER_UP_ERROR; //开机失败
// }// }
SIM7600CE和GSM模块有部分AT指令不通用,需要注意。比如获取模块相关信息的内容需要做修改。
/*************************************************************************************************************************
* 函数 : uint8_t SIMCOM_GetModuleInfo(SIMCOM_HANDLE *pHandle, SIMCOM_INFO *pInfo)
* 功能 : 获取模块的相关信息
* 参数 : pHandle:句柄;pInfo:信息结构体指针
* 返回 : 0:失败;1:成功
* 依赖 : 底层
* 作者 :
* 时间 : 2014-07-29
* 最后修改时间 : 2014-10-08
* 说明 : SIMCOM_INFO_SIZE:限制最大长度SIMCOM_VER_SIZE:软件版本长度限制2014-10-08:在个别模块上面遇到发送AT+GMI后返回了AT+GMI,导致获取失败,如果发现返回了AT+则重新获取,可以避免此问题2016-12-07:修改获取模块型号指令为AT+CGMM,用于兼容SIM7600
*************************************************************************************************************************/
uint8_t SIMCOM_GetModuleInfo(SIMCOM_HANDLE *pHandle, SIMCOM_INFO *pInfo)
{uint32_t i,cnt;uint8_t retry = SIMCOM_DEFAULT_RETRY; //重试次数char *p;uint8_t *pData;//清空缓冲区pInfo->Manu[0] = 0;pInfo->Model[0] = 0;pInfo->Ver[0] = 0;pInfo->IMEI[0] = 0;retry = SIMCOM_DEFAULT_RETRY; //重试次数//获取型号do{SIMCOM_SendAT(pHandle, "AT+CGMM"); pHandle->pClearRxData(); //清除接收计数器if(AT_RETURN_OK == SIMCOM_GetATResp(pHandle, &pData, &cnt, "OK", 10, 200)) //等待响应,超时200MS{for(i = 0;i < (SIMCOM_INFO_SIZE-1);i ++){if((pData[2+i] == '\r') || (pData[2+i] == '\n') || (pData[2+i] == '\0')) break;pInfo->Model[i] = pData[2+i];}pInfo->Model[i] = 0;break;}SIMCOM_Ready(pHandle); //等待就绪pHandle->pDelayMS(1000); //失败延时1秒后重试retry --;}while(retry);if(retry == 0) return 0;retry = SIMCOM_DEFAULT_RETRY; //重试次数//获取软件版本do{SIMCOM_SendAT(pHandle, "AT+GMR");pHandle->pClearRxData(); //清除接收计数器 if(AT_RETURN_OK == SIMCOM_GetATResp(pHandle, &pData, &cnt, "OK", 10, 200)) //等待响应,超时200MS{p = strstr((char *)pData, "+GMR: ");if(p != NULL) {p+= strlen("+GMR: "); //SIM7600前面会有 +GMR: ,跳过即可for(i = 0;i < (SIMCOM_VER_SIZE-1);i ++){if((p[i] == '\r') || (p[i] == '\n') || (p[i] == '\0')) break;pInfo->Ver[i] = p[i];}pInfo->Ver[i] = 0;}else {for(i = 0;i < (SIMCOM_VER_SIZE-1);i ++){if((pData[2+i] == '\r') || (pData[2+i] == '\n') || (pData[2+i] == '\0')) break;pInfo->Ver[i] = pData[2+i];}pInfo->Ver[i] = 0;}break;}SIMCOM_Ready(pHandle); //等待就绪pHandle->pDelayMS(1000); //失败延时1秒后重试retry --;}while(retry);if(retry == 0) return 0;retry = SIMCOM_DEFAULT_RETRY; //重试次数//获取序列号do{SIMCOM_SendAT(pHandle, "AT+GSN"); pHandle->pClearRxData(); //清除接收计数器if(AT_RETURN_OK == SIMCOM_GetATResp(pHandle, &pData, &cnt, "OK", 10, 200)) //等待响应,超时200MS{for(i = 0;i < (SIMCOM_INFO_SIZE-1);i ++){if((pData[2+i] == '\r') || (pData[2+i] == '\n') || (pData[2+i] == '\0')) break;pInfo->IMEI[i] = pData[2+i];}pInfo->IMEI[i] = 0;break;}SIMCOM_Ready(pHandle); //等待就绪pHandle->pDelayMS(1000); //失败延时1秒后重试retry --;}while(retry);return 1;
}
初始化和网络注册成功之后与远端服务器进行TCP连接,SIM7600CE同样支持透传模式,在模块初始化中开启透传模式
retry = SIMCOM_DEFAULT_RETRY; //重试次数do{if( SIMCOM_SetParametersReturnbool(pHandle, "AT+CIPMODE=1", SIMCOM_DEFAULT_RETRY, 2000, "开启透传模式失败!\r\n")){break;}retry --;}while(retry);
之后再进行TCP服务器的连接,连接过程使用的AT指令
AT+CGDCONT=1 设置CMNET
AT+NETOPEN 建立无线链路
AT+CIPOPEN 建立TCP连接
/*************************************************************************************************************************
* 函数 : uint8_t SIMCOM_Establish_Socket(SIMCOM_HANDLE *pHandle)
* 功能 : 连接TCP服务器函数
* 参数 :
* 返回 : 连接建立状态
* 依赖 : 无
* 作者 :
* 时间 : 2018-12-23
* 最后修改时间 : 2018-12-23
* 说明 :
*************************************************************************************************************************/
int RSSI_sim=0;
tcp_udp_dev TcpUdpDev;
uint8_t SIMCOM_Establish_Socket(SIMCOM_HANDLE *pHandle)
{uint8_t retry;char Server[100];
//配置服务器IP地址 格式: "AT+CIPOPEN=0,\"TCP\",\"47.106.137.199\",20000"sprintf(Server,"AT+CIPOPEN=0,\"TCP\",\"%d.%d.%d.%d\",%d",TcpUdpDev.remoteip[0],TcpUdpDev.remoteip[1],TcpUdpDev.remoteip[2],TcpUdpDev.remoteip[3],TcpUdpDev.remoteport);printf("%s",Server);
// const char *Server = "AT+CIPOPEN=0,\"TCP\",\"47.92.243.219\",12351"; //IP登录服务器retry = SIMCOM_DEFAULT_RETRY;while(retry){if(SIM800_GetGPRSAdhereStatus(pHandle)!=1) {}else break;pHandle->pDelayMS(1000); //延时1秒retry --; }if(retry==0){printf("\r\nGPRS附着失败\r\n");return 0; }RSSI_sim = SIMCOM_GetSignal(pHandle); //获取信号强度pHandle->Singal = (uint8_t)RSSI_sim;#if SIMCOM_USER_DBUGprintf("信号强度 <%02d>!\r\n" ,RSSI_sim);#endifif(SIMCOM_SetParametersReturnbool(pHandle, "AT+CGDCONT=1,\"IP\",\"CMNET\"", 1, 510, "\r\n设置为CMNET失败\r\n") == 0)return 0;if(SIMCOM_SetParametersReturnbool(pHandle, "AT+NETOPEN", 1, 510, "\r\n 建立无线链路失败\r\n") == 0);
// LED2_OFF();
// SIMCOM_SetParametersReturnbool(pHandle, "AT+CIFSR", 0, 510, "\r\n");
// SIMCOM_SetParametersReturnbool(&g_SIMCOM_Handle,"AT+CIPCLOSE=0", 0, 510, "\r\n删除TCP连接失败\r\n");if(SIMCOM_SetConnectReturnbool(pHandle,(char*)Server, 1, 510, "\r\n建立TCP连接失败\r\n") == 0)return 0;
// LED2_ON();return 1;
}
连接过程中遇到一个问题:
如果远端服务器主动断开TCP连接,模块删除连接后再次建立连接不成功,显示连接已经存在,重启系统后能正常建立连接
/*************************************************************************************************************************
* 函数 : uint8_t SIMCOM_Delete_Socket(SIMCOM_HANDLE *pHandle)
* 功能 : 连接UDP服务器函数
* 参数 :
* 返回 : 删除连接
* 依赖 : 无
* 作者 :
* 时间 : 2018-12-23
* 最后修改时间 : 2018-12-23
* 说明 :
*************************************************************************************************************************/
uint8_t SIMCOM_Delete_Socket(SIMCOM_HANDLE *pHandle)
{char Server[50];uint8_t retry;sprintf(Server,"AT+CIPCLOSE=0");
// TcpUdpDev.socketid++;
// if(TcpUdpDev.socketid>9)TcpUdpDev.socketid=0;if(SIMCOM_SetParametersRetbool(pHandle, "+++", 3, 4000,"OK","关闭透传模式失败!\r\n") == 0);if(SIMCOM_SetParametersReturnbool(pHandle,(char*)Server, 1, 510, "\r\n删除TCP连接失败\r\n")== 0);if(SIMCOM_SetParametersReturnbool(pHandle, "AT+NETCLOSE", 1, 510, "\r\n 删除无线链路失败\r\n") == 0);
// LED2_ON();return 1;
}
记录使用4G模块SIM7600CE的一些问题相关推荐
- 4g模块注册上网 移远_Openwrt支持移远4G模块过程记录
参考了不少教程,也做了不少尝试,最后记录下整个过程以便自己和坛友们参考 我所用的4G模块是Quectel EC20 R2.0,对于这个型号以下的操作前半部分修改USB Serial驱动应该是不需要的, ...
- sim7600ce 拨号上网测试_树莓派系列教程:通过SIM7600 4G模块NDIS拨号
1.说明 本章将介绍Raspberry Pi如何采用SIM7600 4G模块进行无线上网,并描述其相关细节,本文先讲解NDIS拨号. 2.采用4G模块的上网方式有哪些? Raspberry Pi通过S ...
- 4G模块使用记录移远EC20、BC20
目录 0. 概述 硬件连接 -- UART 休眠管脚的使用 硬件连接 -- USB USB线序定义 驱动安装 抓取模组log 模组型号和SIM卡 模组区别 本地卡和漫游卡 SIM卡和APN 1. EC ...
- NXP(imx8qxp)上android11的EG25-G(4G)模块调试记录
文章目录 一.前期准备 二.底层配置 三.添加厂商提供的ril.so库 四.添加对应的配置 五.对应的报错解决 5.1 状态栏里面没有对应的 Mobile data SIM图标 5.2重复打印启动ri ...
- [调试记录]3288 7.1平台上移植美格 SLM790 4G模块
[调试记录]3288 7.1平台上移植美格 SLM790 4G模块 一 驱动配置 1.1 PPP 配置 需要配置 Android 内核来支持 PPP 功能,按照以下步骤来配置 PPP 选项 Devic ...
- ubuntu加载4G模块驱动的调试过程记录
一个工业平板电脑,原本安装的是win7系统,希望改用ubuntu系统.其他的驱动都好说,关键是有个4G模块,平板电脑厂家使用的是一个小品牌的,ubuntu内部没有集成驱动,需要自己编译驱动.这个对li ...
- PC通过4G模块上网实现流程记录
项目中4G模块开发工作记录: 模块组成: 4G模组硬件结构:ATMET A5(ARM-V7) + SIM7600CE_CU模组 4G模组软件结构:Linux kernel==5.4.53 + LE11 ...
- 4G模块使用pppd拨号调试记录
4G模块使用pppd拨号调试记录 1.配置linux内核 2.交叉编译移植ppp拨号程序 3.编写pppd配置脚本 1.配置linux内核 执行make menuconfig 使能USB GSM配置 ...
- [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录
原址 Platform: RK3399 OS: Android 6.0 Kernel: 4.4 Version: v2017.04 4G Module: EC20-CE 一基本概念 USB 部 ...
最新文章
- java数据类型转化_JAVA基本数据类型及其转换
- 如何选择高性价比的控件产品
- 在滴滴和头条干了 2 年后端开发,太真实…
- antd tree搜索并定位_自动驾驶定位思考
- 公司上网速度极慢(断网)解决思路_网络TS
- 斯坦福大学CS229数学基础(线性代数、概率论)中文翻译版.pdf
- 突发热点事件下微博高可用注册中心vintage的设计\u0026实践
- adurnio 单片机_单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码,proteus仿真文件...
- highstack的一个bug
- Linux网络和进程管理
- poj 3714 Raid
- 深职院c语言考试试卷,深职院第1章C语言基础与入门教学.ppt
- 考勤打卡记录数据库表结构_考勤系统数据表结构
- js 闭包传参_javascript深入理解js闭包
- python列表查找元素用什么运算符_【Python】第012课,定义和使用列表,列表的运算符,列表元素的遍历i,列表的方法,元素位置和次数,元素排序和反转。...
- Linux程序动态库的加载
- 模型实践 | 高精地图构建模型HDMapNet助力更精准的自动驾驶
- FaceShifter:新的人脸交换模型
- IMDB的数据库结构
- R语言完成1:N倾向性评分匹配PSM
热门文章
- js基础试题及答案(一)
- 外贸老鸟帮新人点评、修改的5个开发信案例
- 【漫画+图解】面试官让我用 2GB 内存给 20亿个整数(需要8GB内存)排序,我该咋整??
- F和弦(大横按)的训练方法
- 一些看完让你受益匪浅的英语学习文章和常识(推荐看一下)
- 部落冲突,欢迎回归玩家,23级大师联赛部落欢迎你长住
- 计算机打字总是会返回到桌面,电脑打字的时候经常回到桌面是什么原因?
- 小升初随感--年年小升初,一段辛酸史
- 男朋友该对女生说的23句话(转)
- 英文版-主我高举你的名-Lord I lift Your name on high-纯蓝歌词字幕