[发送AT指令配置a7670C模块上网]
创始人
2024-01-29 07:17:05

发送AT指令配置a7670C模块上网

  • 内核配置
  • 调试验证
  • 应用的编写
  • AT的指令的使用

内核配置

概要:基于rv1126平台调试SIMCOM 7670C 4G模块。
1,内核配置及内核代码修改
1.1按照芯片data sheet修改kernel代码,添加PID和VID。
此处根据不同的芯片按照其datasheet进行修改。
在这里插入图片描述
1.2 内核配置修改
1.2.1 打开USB gadget的RNDIS功能
在这里插入图片描述
1.2.2使能 USB 串口 GSM、CDMA 驱动
在这里插入图片描述
1.2.3,使能USB network,配置rndis host
在这里插入图片描述

调试验证

2.1 如果内核配置和代码修改正确,设备启动后,ifconfig -a可以看到usb0节点
在这里插入图片描述
2.2 用AT指令测试4G模块与主控是否通讯正常
发送如下指令,如果看到回复OK,就证明4G模块与主控通讯正常。
至此驱动层应该算调试OK了。
cat /dev/ttyUSB2 &
echo -e “at\r\n”>/dev/ttyUSB2
在这里插入图片描述

应用的编写

fd_Card1 = open("/dev/ttyUSB1", O_RDWR);//打开4G USB串口节点
iot_tty_set_speed(st_tty.fd_net, 115200);			//串口配置,关回显
iot_tty_set_Parity(st_tty.fd_net, 8, 'N', 1);
//AT指令发送的函数
iot_tty_send(&st_tty, "AT+CSQ\r\n", &errcode, buf);
int iot_tty_send(tty_dev_t *tty, char *cmd, int *errcode, char *result)
{char buf[MAX_AT_SIZE];fd_set	rdfds;struct timeval tv;int count = 0;		//记录超时次数,多次无法获取结果直接退出了,避免发生阻塞int i;int ret;int error_cnt = 0;BOOL bRecv = FALSE;		//是否已经接收过数据char *ptr = NULL;char cmd_tmp[64] = {0};		//去掉AT和? \r\n 只保留参数*errcode = 0;	if((ptr=strstr(cmd, "\r")) != NULL){memcpy(cmd_tmp, cmd, ptr - cmd);		//去掉 \r}if((ptr=strstr(cmd_tmp, "?")) != NULL){*ptr = '\0';}if((ptr=strstr(cmd_tmp, "AT")) != NULL)		//去掉AT{sprintf(cmd_tmp, "%s",ptr + 2);}printf("send_at_cmd %s\n", cmd);pthread_mutex_lock(&tty->mutex);if(tty->fd_net > 0){BOOL result_flag = FALSE;		//用来判断是否获取到了所需要的命令count = 0;memset(buf, 0, sizeof(buf));ret = write(tty->fd_net, cmd, strlen(cmd));if(ret==-1)printf("[lxr_test_send_at_cmd_fail][func=%s][LINE=%d]\n",__func__,__LINE__);while((strstr(buf, "OK") == NULL && strstr(buf, "ERROR") == NULL) || (!result_flag))	//当返回结果存在ok/error,并且获取到对应命令的结果的时候才退出{memset(buf, 0, sizeof(buf));FD_ZERO(&rdfds);FD_SET(tty->fd_net, &rdfds);tv.tv_sec = 20;tv.tv_usec = 0;//printf("[lxr_test_message][func=%s][LINE=%d]\n",__func__,__LINE__);ret = select(tty->fd_net + 1, &rdfds, NULL, NULL, &tv);//printf("[lxr_test_message][func=%s][LINE=%d]\n",__func__,__LINE__);if(ret == 0){mlog_write("4G module command executes timeout:%s",cmd_tmp);printf("select %d, bRecv:%d, count:%d\n", ret, bRecv, count);if(bRecv || (count >= 5))		//(已经接收过数据了,后续仍然有超时) 或者 (超时次数过多),则认为此次命令无ok或者error返回,当出错处理{*errcode = -1;break;;}else{write(tty->fd_net, cmd, strlen(cmd));}count ++;continue;}else if(ret < 0){printf("select %d\n", ret);pthread_mutex_unlock(&tty->mutex);return DEV_TTY_SEND_ERR;}ret = read(tty->fd_net, buf, 128);if(ret == 0){error_cnt++;if(error_cnt > 3)		//可能是wifi模块被硬件复位了,这里只重新打开USB节点{	//这里只重新打开节点printf("AT read failed error_cnt:%d\n", error_cnt);pthread_mutex_unlock(&tty->mutex);return DEV_TTY_SEND_ERR;}}else{error_cnt = 0;}bRecv = TRUE;printf("line:%d AT ret = %d buf:%s,\n",__LINE__, ret, buf);			//这里如果一定数量出错时,重新打开USB试试。ptr=strstr(buf, cmd_tmp);if(ptr != NULL){result_flag = TRUE;if(result){memcpy(result, ptr, strlen(ptr));}}if((ret == 1 && strcmp(buf, "\n") == 0) || (strstr(buf, "ZLTENOCELL") != NULL)|| (strstr(buf, "CREG") != NULL)|| (strstr(buf, "CGREG") != NULL)|| (strstr(buf, "CEREG") != NULL))		//换行和特定信号过滤continue;}if(strstr(buf, "ERROR") != NULL){ret = sscanf(buf, "%*[^0-9]%d", errcode);if(!*errcode)*errcode = -1;//	printf("串口返回错误:%s!", buf);//mlog_write("Abnormal operation of 4G module:%s:%d",cmd_tmp, errcode);printf("AT failed :%d--%s\n", *errcode,buf);}}else{printf("ERROR ERROR ERROR !!! ====== tty->fd_net error\n");pthread_mutex_unlock(&tty->mutex);return -1;}pthread_mutex_unlock(&tty->mutex);return 0;
}

AT的指令的使用

send_at_cmd AT+CEREG?line:113 AT ret = 31 buf:AT+CEREG? //获取服务状态
+CEREG: 0,1OK
,
srv_status[1]
svr_mode->srv_status = Normal Servicesend_at_cmd AT+CPIN? //卡是否正常line:113 AT ret = 31 buf:AT+CPIN?
+CPIN: READYOK
,
svr_mode->bSim = 1
send_at_cmd AT+CPSI? //判断网络模式line:113 AT ret = 99 buf:AT+CPSI?
+CPSI: LTE,Online,460-00,0x2799,225199169,124,EUTRAN-BAND34,36275,3,0,16,31,31,3OK
,
svr_mode->mode = 4G
send_at_cmd AT+CICCID//获取CCID号line:113 AT ret = 48 buf:AT+CICCID 
+ICCID: 89860040192032676363OK
,
iccid_tmp:89860040192032676363 len=20
//下面是获取信号强度的AT指令
send_at_cmd AT+CSQline:113 AT ret = 28 buf:AT+CSQ
+CSQ: 16,99OK
,
rssi:-101dBm, act:99
====>>>stat:Normal Service

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...