[原创] 《GPSR+GPS开发板》之一透明传输

zhaojun_xf   2013-8-1 16:04 楼主
之前本人把自己DIY的《GPSR+GPS开发板》开发板Show出来,可程序一直没有完成。所以,代码至今没有开源。后面我们将逐步把相关内容贴上论坛,敬请关注。
我的博客

回复评论 (15)

在这个开发板上,我们设计了一个GSM模块和一个GPS模块。为了某些特殊的应用和硬件调试,我们首先在程序中实现透明传输。那么什么叫透明传输呢?

透明传输

透明传输
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。

发送方和接收方数据的长度和内容完全一致,相当于一条无形的传输线。

关于透明传输的问题

透明传输就是在传输过程中,对外界透明,就是说你看不见他是传送网络,不管传输的业务如何,我只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理。

透明传输是指数据直接通过系统中的互连功能模式而不进行RLP纠错,如果进行了RLP纠错即为非透明传输。
就是所谓的透明传输,不管传的是什么,所采用的设备只是起一个通道作用,把要传输的内容完好的传到对方!
透传的设备是个黑箱子,进来是什么出去也是什么。

透明传输不用关心下层协议的传输,比如你要寄信,只需要写地址交给邮局就行了,然后对方就能收到你的信,但是中途经过多少车站,火车,邮递员,你根本不知道,所以对于你来说邮递的过程是透明的。

与面向连接和电话系统的工作模式相似,其特点是:

1、面向连接的数据传输过程必须经过建立连接、连接维护和释放连接的3个过程;
2、数据传输过程中,各分组不需要携带目的地址。

面向连接数据传输的收发数据顺序不变,因此传输的可靠性好,但协议复杂,通信效率不高。
说明:RLP(Radio Link Protocol): 无线连接协议,是一种严格的纠错方式。当数据在接收端被 “查出”有错后,接收端可要求电话重新进行数据传输,如有必要,反复进行,直至接收数据完全正确为止
我的博客
点赞  2013-8-1 16:07
在我们这里,采用的透明传输,后面均简称透传

1.png



      GSM和GPS模块分别于MCU的串口相连,为了方便解码GPS和GSM测试,我们通过程序把GSM或GPS直接与PC相连,这样我们就可以通过PC机直接控制GSM或GPS了。在这种情况下MCU不对双方数据进行任何处理。直接把他们需要的数据直接丢出去,起到完全透明的传输模式。

     不过需要注意的是GSM采用的波特率是115200,而GPS采用的波特率是9600,在切换时一定要注意对MCU与PC之间的串口进行波特率设置。
我的博客
点赞  2013-8-1 16:27
要实现透传,必须通过外部条件改变状态,常见的方法有:1按键输入,2串口命令改变。我们这里就以串口命令为例:
  1. /****************************************************************************************************
  2. * FunctionName   : AppTransJudge()                                                           
  3. * Description    : 透传判断(透传命令: TW_CLS, TW_GSM, TW_GPS)
  4. * EntryParameter : pWrkMod - 工作模式(0-正常,1-GSM透传,2-GPS透传)
  5. * ReturnValue    : None
  6. ****************************************************************************************************/
  7. void AppTransJudge(u8 dat, APP_WRK_MOD *pWrkMod)
  8. {
  9.     static u8 len = 0;
  10.     static u8 tmpBuf[2] = {0};

  11.     switch (len)    // 透传判断
  12.     {
  13.         case 0: if (dat == 'T') len = 1; break;
  14.         case 1: if (dat == 'W') len = 2; break;
  15.         case 2: if (dat == '_') len = 3; break;
  16.         case 3: if ((dat == 'G') || (dat == 'C')) {tmpBuf[0] = dat; len = 4; break;}
  17.         case 4: if ((dat == 'S') || (dat == 'P') || (dat == 'L')) {tmpBuf[1] = dat; len = 5; break;}
  18.         case 5:
  19.          {
  20.              len = 0;
  21.              switch (dat)
  22.              {
  23.                     case 'S':
  24.                      {
  25.                             if ((tmpBuf[0] == 'C') && (tmpBuf[1] == 'L'))
  26.                             {
  27.                                    *pWrkMod = APP_WRK_CLS;
  28.                                     AppSendStr("TWC_OK bps: 115200\r\n"); // TWC
  29.                                     UARTBaudSet(UART0, 115200);
  30.                              }
  31.                              else
  32.                              {
  33.                                    if ((tmpBuf[0] == 'G') && (tmpBuf[1] == 'P'))
  34.                                   {
  35.                                          *pWrkMod = APP_WRK_GPS;
  36.                                          AppSendStr("GPS_OK bps: 9600\r\n");  // GPS
  37.                                          UARTBaudSet(UART0, 9600);
  38.                                    }
  39.                               }
  40.                               break;
  41.                         }

  42.                         case 'M':           // GSM
  43.                         {
  44.                                 *pWrkMod = APP_WRK_GSM;
  45.                                AppSendStr("GSM_OK bps: 115200\r\n");
  46.                                UARTBaudSet(UART0, 115200);
  47.                                break;
  48.                         }

  49.                         default : *pWrkMod = APP_WRK_CLS;
  50.                                       UARTBaudSet(UART0, 115200); break;
  51.                     }
  52.               }
  53.           break;
  54.         
  55.          default: break;
  56.     }
  57. }
发送命令TW_GSM转换为GSM透传模式,TW_GPS转换为GPS透传模式,发送TW_CLS切换回通信模式。

[ 本帖最后由 zhaojun_xf 于 2013-8-2 06:42 编辑 ]
我的博客
点赞  2013-8-1 16:28
主串口的波特率默认是115200,在此速率下输入TW_GSM,传送模式转换为GSM模块透传。切换后,之间可以通过串口发送AT指令了。

1.png



发送TW_GSM后,串口会返回GSM_OK bps: 115200
之后通过串口就可以之间控制GSM模块了,需要注意的是AT指令都必须带回车换行,所以,需要勾选发送新行,在发送命令的同时,发送回车换行。

[ 本帖最后由 zhaojun_xf 于 2013-8-1 20:25 编辑 ]
我的博客
点赞  2013-8-1 16:29
如果要透传GPS,需要在波特率115200后,发送TW_GPS。设备受到命令后会返回GPS_OK bps:9600。在此状态下,需要把串口软件的波特率更改为9600,才能给接收到正确的数据。

2.png
我的博客
点赞  2013-8-1 20:29
在GSM模块透传模式下,我们可以用专业的软件来测试GSM模块的所有功能,如:

1.png



       用这个软件可以测试GSM模块基本上所以功能,不过这个软件是为华为模块写的,联网指令有点不同,所以,不能用了联网。但是可以通过这个软件直接发AT指令联网。如果有条件的网友,也可以自己编写个PC软件来控制GSM模块。了解了这个控制过程,在使用MCU控制GSM模块就简单了。

       同样,在GPS透传模式下,我们可以使用GPS模块测试软件进行测试,如:

2.png


[ 本帖最后由 zhaojun_xf 于 2013-8-2 06:34 编辑 ]
我的博客
点赞  2013-8-1 20:36
期待下文
点赞  2013-8-1 22:33
可以看出,在透传模式下,完全可以让这款开发板独立成为GSM开发板和GPS开发板。可以作为测试各种GSM和GPS是方法,这就是透传模式的好处。可能在很多地方我们都会使用的透传模式,你不妨想一想,在什么地方你可以使用透传呢?
我的博客
点赞  2013-8-2 06:38
谢谢楼主,专程过来学习透传
点赞  2013-8-2 10:26

回复 10楼error_echo 的帖子

谢谢支持啊。。。。。
我的博客
点赞  2013-8-2 10:44

回复 4楼zhaojun_xf 的帖子

这程序看不懂啊.dat指向一个u8,那是怎么位移的?
        case 0: if (dat == 'T') len = 1; break;
        case 1: if (dat == 'W') len = 2; break;
        case 2: if (dat == '_') len = 3; break;
这里面为什么不同case下dat会不同?自动把串口缓冲区里面index为len的u8装入dat了?是怎么做到的?
点赞  2013-8-4 20:51

回复 12楼astwyg 的帖子

这个函数在串口中断中调用即口。。。。
我的博客
点赞  2013-8-5 06:17
新手,过来看看
点赞  2013-8-9 15:09
支持,可惜没后文。。。
点赞  2017-8-8 14:36
是的,可惜没有讲全啊,,,,,,
点赞  2021-5-4 22:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复