使用GPRS模块拨号上网的问题,我又给了100分!大侠们救救我吧

xiajunqing 2010-01-12 07:33:54
我使用的是GPRS模块是BENQ的M22A,ARM是lpc2136,呜呜呜,现在要使用不带TCP/IP协议的模块上网,那当然得自己搞协议了,现在遇到的问题是我拨了ATD*99#以后吧,给板子上电,然后板子开始进行一系列AT命令的初始化,然后就开始拨ATD*99#,三次握手都通过了,我还能看到primary DNS adress和sencondary DNS adress,反正到了这一步,就是GPRS模块已经得到IP地址了,是不是啊?就说明握手成功了,那继续往下看,从串口返回:udp_estalished.表明UDP连接已经建立了,我开始用串口调试工具发数据给服务器,每发一个:串口上就显示:receive some data from user :******
send it to the modem:*******,既然已经出现这个提示了,就更证明udp连接已经成功了,否则的话会显示:receive some data from user :******, NO UDP or TCP Conection exist!drop the data!
但是连接只能维持十秒钟左右,下面就断开了,串口提示工具提示:connect time expire() Link_Down(),ipcp_close();LPC_Down等等,下面就是开始重新拨号了,重新拨号首先又得进行三次握手,但是在握手的第一步就会收到modem的信息,connect time expire,然后下面又是重新拨号,就这么反复拨号,怎么都上不了了,modem返回的一直是connect time expire 。这是怎么回事啊,请高手们给点指点,我不知咋办了?
...全文
346 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gooogleman 2010-01-12
  • 打赏
  • 举报
回复
就是2440+ 串口驱动就可以了。
xiajunqing 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gooogleman 的回复:]
我上网上过,呵呵。
[/Quote]你用的什么ARM?能不能给说一下重点注意的地方?
gooogleman 2010-01-12
  • 打赏
  • 举报
回复
我上网上过,呵呵。
xiajunqing 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kyzf 的回复:]
有些模块,用的天线,不是很匹配,导致GPRS的信号不是很好;

此时可能发送短信 都不能成功,到打电话 和GPRS业务时,就更为不稳定了,

所以楼主需要测试与验证下硬件的性能,
[/Quote]我们硬件的性能非常的好,每次有问题时,怀疑硬件,到头来还是软件的问题,能打电话,信号强度也很好,我都测过了,你的头像很特别啊,我经常看到你
kyzf 2010-01-12
  • 打赏
  • 举报
回复
有些模块,用的天线,不是很匹配,导致GPRS的信号不是很好;

此时可能发送短信 都不能成功,到打电话 和GPRS业务时,就更为不稳定了,

所以楼主需要测试与验证下硬件的性能,
xiajunqing 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aaa_tnt 的回复:]
友情帮顶下。
[/Quote]我曾经也回过你的帖子,就是散分一百分,屏终于调好了那个
xiajunqing 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kyzf 的回复:]
楼主测试 过发送短信 能成功吗? 另外打电话呢?
需要关注下 天线的性能?

另外在“连接只能维持十秒钟左右,下面就断开了,串口提示工具提示:connect time expire() Link_Down(),ipcp_close();LPC_Down等等,”
这个过程中,测试下GPRS模块的供电情况(最好用示波器),看是否存在一个很窄震荡?

另外你的程序中怎么设置?什么情况才会connect time expire() Link_Down(),ipcp_close();LPC_Down? 建议楼主加长延时 测试下。

一般链接UDP等需要比较长的延时。
[/Quote]我不知道为什么连接刚建立一会就会出现这种状况,什么连接超时了,这是协议内部的问题吗?可是大家都用这个协议,也没什么改动,为什么有的人就能上呢?GPRS模块为什么会出现很窄震荡?
xiajunqing 2010-01-12
  • 打赏
  • 举报
回复
先贴一些程序,否则大家不好解答:
int main(void)
{

u8_t buf[MAX_READ_LEN + 1];
int len,pd;
sys_err err;

int * fd = NULL;
int *linkstateCx = NULL;

/*
*init basic parametes of ourselves
*/
GPIOInit(); //GPIO口初始化
sys_timer_init(); //系统时钟初始化
local_sys_init(); //这里面有串口的初始化,定时器的初始化等
lwip_init(); //lwip协议的初始化

DEBUG_EVENT("main()\r\n"); //DEBUG_EVENT是一个向串口输出提示信息的函数

/*
*start config GPRS Modem, such as HUAWEI GTM900, MC35i,etc.
*/
err = active_Modem(); //激活GPRS模块

if(err NEQ SYS_ERR_OK)
{
DEBUG_EVENT("Modem open failed! we must shut down system!\r\n");
shut_system();
}
DEBUG_EVENT("Modem open successful!\r\n");
DEBUG_EVENT("System block 30 seconds!\r\n");//等待30秒,等待SIM卡找到网络

/*
*wait for GPRS Modem serching network,
* initinalize: such as SMS, Telephone Book etc.
*/
second_sleep(30);

err = init_Modem(); //写一些基本的AT命令
if(err NEQ SYS_ERR_OK)
{
DEBUG_EVENT("Modem basic AT Commands initialize failed! we must shut down system\r\n");
shut_system();
}
DEBUG_EVENT("Modem basic AT Commands initialize successful!\r\n");

/*
*start Dial GPRS Number, such as: *99***1#
*/
start_tcpip: //start_tcpip是一个标号
err = dial_GPRS(); //拨ATD*99***1#

if(err NEQ SYS_ERR_OK)
{
DEBUG_EVENT("Dial GPRS Failed,we must shut down system!\r\n");
shut_system();
}
DEBUG_EVENT("Dial GPRS successful, now we start PPP Config!\r\n");

/*
*start config PPP,and send LCP packet to GPRS Modem
*/
pd = pppOpen((void*)fd, &pppStateCallback, (void *)linkstateCx);/*send lcp req to peer*/

while(1)
{
/*
*check if one timer is overflow, if so, run it
*/
check_sys_timer();

/*
*check the receive buffer of Modem
*/
if(get_modem_datalen() > 0)//如果modem收到信息
{
DEBUG_EVENT(" Receive some data from Modem:\r\n");
len = get_modem_data(buf); //接收下来
pppInProc(pd, buf, len); //进行处理
}

/*
*check the receive buffer of User Equipment
*/
if(get_user_datalen() > 0) //如果用户向modem发信息
{
DEBUG_EVENT("Receive some data from User Eqipment!\r\n");

len = get_user_data(buf);//接收下来

if(get_Mytcpip_state() EQ UDP_ESTABLISHED)//判断存在的是哪种连接
{
if( udp_write(buf, len) NEQ ERR_OK)
{
DEBUG_ERR("Send some data to UDP Peer, but failed!\r\n");
//add you code here.
//store the data
}
}
else if(get_Mytcpip_state() EQ TCP_ESTABLISHED))//判断存在的是哪种连接

{
if( tcp_write(tcp_active_pcbs, (const void *)buf, len, 1) NEQ ERR_OK)
{
DEBUG_ERR("Send some data to TCP Peer, but failed!\r\n");
//add you code here.
//store the data
}
}
else
{
DEBUG_EVENT("No TCP or UDP Connect exist!drop the data\r\n");
}
}

/*
*check the state of ppp
*if the link is DEAD, I deal it very simple,
*do not release the source of PPP/TCP/IP/UDP etc.
*just call the function: lwip_init(). but it work.
*then goto the head of main func.
*The state of DCD should be checked here,but I will ignore it.
*/
if(ppp_dead(pd) EQ TRUE)//如果链路死去
{
lwip_init();
set_Mytcpip_state(PPP_DEAD);
goto start_tcpip; //回去重新拨号
}

/*
*check the state of my tcpip
*/
switch(get_Mytcpip_state())//检查目前的状态
{
case PPP_ESTABLISHED: //这个是刚握完手的状态
if(get_sys_err() < MAX_SYS_ERR_ALLOW)
{
tcpip_open(); //所以握完手之后要打开tcp_ip(这个函数里可以选 择是用udp还是tcp,我选的udp)
break;
}
else
set_Mytcpip_state(TCPIP_STATE_UNKNOWN);

case TCPIP_STATE_UNKNOWN:
shut_system();
break;

default:
break;
}

//hit the WATCH DOG //这个我没用
}
}


代码 很清晰,大家帮忙分析一下
kyzf 2010-01-12
  • 打赏
  • 举报
回复
楼主测试 过发送短信 能成功吗? 另外打电话呢?
需要关注下 天线的性能?

另外在“连接只能维持十秒钟左右,下面就断开了,串口提示工具提示:connect time expire() Link_Down(),ipcp_close();LPC_Down等等,”
这个过程中,测试下GPRS模块的供电情况(最好用示波器),看是否存在一个很窄震荡?

另外你的程序中怎么设置?什么情况才会connect time expire() Link_Down(),ipcp_close();LPC_Down? 建议楼主加长延时 测试下。

一般链接UDP等需要比较长的延时。
Ei 2010-01-12
  • 打赏
  • 举报
回复
友情帮顶下。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧