7239|10

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

我使用的是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 。这是怎么回事啊,请高手们给点指点,我不知咋办了?

最新回复

就是2440+ 串口驱动就可以了。  详情 回复 发表于 2010-1-12 23:22
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
友情帮顶下。
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼主测试 过发送短信 能成功吗? 另外打电话呢?
需要关注下 天线的性能?

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

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

一般链接UDP等需要比较长的延时。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
先贴一些程序,否则大家不好解答:
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  //这个我没用
   }       
}


代码 很清晰,大家帮忙分析一下
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 kyzf 的回复:
楼主测试 过发送短信 能成功吗? 另外打电话呢?
需要关注下 天线的性能?

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

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

一般链接UDP等需要比较长的延时。
我不知道为什么连接刚建立一会就会出现这种状况,什么连接超时了,这是协议内部的问题吗?可是大家都用这个协议,也没什么改动,为什么有的人就能上呢?GPRS模块为什么会出现很窄震荡?
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 1 楼 aaa_tnt 的回复:
友情帮顶下。
我曾经也回过你的帖子,就是散分一百分,屏终于调好了那个
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
有些模块,用的天线,不是很匹配,导致GPRS的信号不是很好;

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

所以楼主需要测试与验证下硬件的性能,
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 kyzf 的回复:
有些模块,用的天线,不是很匹配,导致GPRS的信号不是很好;

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

所以楼主需要测试与验证下硬件的性能,
我们硬件的性能非常的好,每次有问题时,怀疑硬件,到头来还是软件的问题,能打电话,信号强度也很好,我都测过了,你的头像很特别啊,我经常看到你
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
我上网上过,呵呵。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 gooogleman 的回复:
我上网上过,呵呵。
你用的什么ARM?能不能给说一下重点注意的地方?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
就是2440+ 串口驱动就可以了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表