本来是想在这里记录开发工作中遇到的问题,有时候太忙就忘记这回事了。

之前使用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的一些问题相关推荐

  1. 4g模块注册上网 移远_Openwrt支持移远4G模块过程记录

    参考了不少教程,也做了不少尝试,最后记录下整个过程以便自己和坛友们参考 我所用的4G模块是Quectel EC20 R2.0,对于这个型号以下的操作前半部分修改USB Serial驱动应该是不需要的, ...

  2. sim7600ce 拨号上网测试_树莓派系列教程:通过SIM7600 4G模块NDIS拨号

    1.说明 本章将介绍Raspberry Pi如何采用SIM7600 4G模块进行无线上网,并描述其相关细节,本文先讲解NDIS拨号. 2.采用4G模块的上网方式有哪些? Raspberry Pi通过S ...

  3. 4G模块使用记录移远EC20、BC20

    目录 0. 概述 硬件连接 -- UART 休眠管脚的使用 硬件连接 -- USB USB线序定义 驱动安装 抓取模组log 模组型号和SIM卡 模组区别 本地卡和漫游卡 SIM卡和APN 1. EC ...

  4. NXP(imx8qxp)上android11的EG25-G(4G)模块调试记录

    文章目录 一.前期准备 二.底层配置 三.添加厂商提供的ril.so库 四.添加对应的配置 五.对应的报错解决 5.1 状态栏里面没有对应的 Mobile data SIM图标 5.2重复打印启动ri ...

  5. [调试记录]3288 7.1平台上移植美格 SLM790 4G模块

    [调试记录]3288 7.1平台上移植美格 SLM790 4G模块 一 驱动配置 1.1 PPP 配置 需要配置 Android 内核来支持 PPP 功能,按照以下步骤来配置 PPP 选项 Devic ...

  6. ubuntu加载4G模块驱动的调试过程记录

    一个工业平板电脑,原本安装的是win7系统,希望改用ubuntu系统.其他的驱动都好说,关键是有个4G模块,平板电脑厂家使用的是一个小品牌的,ubuntu内部没有集成驱动,需要自己编译驱动.这个对li ...

  7. PC通过4G模块上网实现流程记录

    项目中4G模块开发工作记录: 模块组成: 4G模组硬件结构:ATMET A5(ARM-V7) + SIM7600CE_CU模组 4G模组软件结构:Linux kernel==5.4.53 + LE11 ...

  8. 4G模块使用pppd拨号调试记录

    4G模块使用pppd拨号调试记录 1.配置linux内核 2.交叉编译移植ppp拨号程序 3.编写pppd配置脚本 1.配置linux内核 执行make menuconfig 使能USB GSM配置 ...

  9. [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录

    原址 Platform: RK3399  OS: Android 6.0  Kernel: 4.4  Version: v2017.04  4G Module: EC20-CE 一基本概念 USB 部 ...

最新文章

  1. java数据类型转化_JAVA基本数据类型及其转换
  2. 如何选择高性价比的控件产品
  3. 在滴滴和头条干了 2 年后端开发,太真实…
  4. antd tree搜索并定位_自动驾驶定位思考
  5. 公司上网速度极慢(断网)解决思路_网络TS
  6. 斯坦福大学CS229数学基础(线性代数、概率论)中文翻译版.pdf
  7. 突发热点事件下微博高可用注册中心vintage的设计\u0026实践
  8. adurnio 单片机_单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码,proteus仿真文件...
  9. highstack的一个bug
  10. Linux网络和进程管理
  11. poj 3714 Raid
  12. 深职院c语言考试试卷,深职院第1章C语言基础与入门教学.ppt
  13. 考勤打卡记录数据库表结构_考勤系统数据表结构
  14. js 闭包传参_javascript深入理解js闭包
  15. python列表查找元素用什么运算符_【Python】第012课,定义和使用列表,列表的运算符,列表元素的遍历i,列表的方法,元素位置和次数,元素排序和反转。...
  16. Linux程序动态库的加载
  17. 模型实践 | 高精地图构建模型HDMapNet助力更精准的自动驾驶
  18. FaceShifter:新的人脸交换模型
  19. IMDB的数据库结构
  20. R语言完成1:N倾向性评分匹配PSM

热门文章

  1. js基础试题及答案(一)
  2. 外贸老鸟帮新人点评、修改的5个开发信案例
  3. 【漫画+图解】面试官让我用 2GB 内存给 20亿个整数(需要8GB内存)排序,我该咋整??
  4. F和弦(大横按)的训练方法
  5. 一些看完让你受益匪浅的英语学习文章和常识(推荐看一下)
  6. 部落冲突,欢迎回归玩家,23级大师联赛部落欢迎你长住
  7. 计算机打字总是会返回到桌面,电脑打字的时候经常回到桌面是什么原因?
  8. 小升初随感--年年小升初,一段辛酸史
  9. 男朋友该对女生说的23句话(转)
  10. 英文版-主我高举你的名-Lord I lift Your name on high-纯蓝歌词字幕