原创 无论发送方是采用定长还是变长分组方式都能接收的代码(未完成)

2008-4-17 22:18 3021 8 11 分类: MCU/ 嵌入式

目标:


无论发送方是采用定长还是变长分组方式,分组格式如何,是否有CRC等,接收节点都能够正确接收。


当然,还有不少前提条件:
* 频率一致;
* 数据速率一致;
* 前导码及帧分隔标志一致;



该程序可以用来测试CC2510的行为。


比如:发送节点发送固定长度(比如100字节)的分组,第1个字节的内容为30。而接收节点设置为变长接收,则是否接收节点的上层应用仅能收到30字节的数据?


因此,用作sniffer的话,接收节点是否应该使用固定长度(最大长度)的接收方式,而且禁止CRC检验。这样才可以同时接收有CRC校验和没有CRC校验、变长和固定长度的数据分组。


主要代码:
  //直接轮询接收,不使用中断
  while (1) {


    //reset pointer
    length =0;


    RFIF &= ~IRQ_DONE;


    //enter receive mode
    SRX();


    while (!(RFIF & IRQ_DONE)) {
      //check whether receive finished
      if (RFTXRXIF) { //a byte received
        pBuffer[length] = RFD;
        length ++;


        RFTXRXIF = 0;
      }
    }
    //RX DONE
    if (length >0) {
      modUartSendPkt(0, length, pBuffer);
      P1_0 = !P1_0; //toggle led
    }
    SIDLE();


  }



运行结果:
PC收到的数据,分组内容的长度不是16,而是255:


0D 0A FF 0D 02 01 00 79 31 32 33 34 35 36 37 38 39 7F 0A 36 DF EC CF D7 FE BF EB DD FF E7 F7 DF FF F8 9A CF 7F FC B1 77 7B ED F3 4E AF FF ED 5F FE DF EC 64 1B 9F DF B9 B9 CC 1F F4 F6 FB C0 CB FE DB DF 7E FF FB 1F FE 3E DE 44 5F F1 B8 AF 36 A5 0A FE 9F F4 DD CF 8F 7F BF F7 B1 41 DF E3 EE F0 B0 AA DC 77 2F FD FE 9F F2 0D C8 4E CD 86 7E 23 6E B3 67 FD 51 CF 52 E2 FC 6B CF CA 5C 6D 0A D7 E7 F2 6F E6 9E B9 74 FF 7D 5C FC 3E F0 BC 7C 76 9B C4 D9 45 7F 9F EB 2B 49 96 FB F3 7A EF F9 77 DB D5 F1 01 9A 79 FE BD F7 51 BE F2 FB 1F 6F BB B4 67 F7 39 F7 AB BA B9 E6 FF CE 53 61 0E BE F4 DB BA C5 6E 7F 8E 17 FE 7B 53 F7 9E BF E2 73 2F FF BC 33 FE 32 2C FE BE F9 09 8B C7 36 BB 6F DD BE 98 1B 2F FB ED AB F3 CC 8E 9D 7F 57 EB F7 6C BF 63 B9 E7 EE 92 BD E3 BC B8 4C 36 99 8C ED 6C 19


 

文章评论3条评论)

登录后参与讨论

用户138786 2008-4-19 00:35

使用carrier sense标志(PKTSTATUS.CS)来判断分组的结束,有一定可行性。 所谓一定,是测试时发现分组的末尾多收到1到2个字节,一定会多收到。但至少比之前的非收足PKTLEN个字节要好。 主要代码为: while (1) { //reset pointer length =0; //enter receive mode SRX(); //wait for SFD while (!SFD); //receive bytes while (1) { //check whether receive finished if (!CS) { //carrier sense break; } // if (RFTXRXIF) { //a byte received pBuffer[length] = RFD; length ++; RFTXRXIF = 0; // } } SIDLE(); //RX DONE if (length >0) { modUartSendPkt(0, length, pBuffer); P1_0 = !P1_0; //toggle led } } //RF寄存器的初始化 void initRf(){ halRfConfig(frequency); //在halRfConfig()中对各RF寄存器作了设置。 // MCSM1 = 0x2F; //keep in RX mode //设置固定长度方式,长度为最大值 //disable data whitening //disable crc check PKTCTRL0=0x00; PKTLEN=0xFF; //maximum //disable interrupts INT_GLOBAL_ENABLE(INT_OFF); }

zigbee_904218839 2008-4-18 00:37

关注!

用户138786 2008-4-17 22:21

改用CCA判断作为接收的结束,结果仍然一样。 修改MCSM1的值,原来是0x2F。改为0x0F试试。 结果一直没有收到数据。程序停在if (RFTXRXIF) {语句上。IRQ_CCA标志一直为0。PKTSTATUS一直是0xB0。 改为0x1F试试。 也不行。 设置MCSM2,将bit4设为1。 结果也是什么都收不到。
相关推荐阅读
用户138786 2015-03-16 18:38
WIFI模块(HED10W07SN)应用设计入门
WIFI模块(HED10W07SN)应用设计入门 以下系列帖子记录我学习WIFI模块(HED10W07SN)的过程和心得,以及为学生设计的入门指引。 ...
用户138786 2015-03-16 18:37
HED10W07SN串口应用设计
串口通信应用设计 HED10W07SN模块有两个串口。厂家提供的参考实现中,串口0用于管理:AT指令、EM_WIFI程序下载、Boot Loader程序下载(...
用户138786 2015-03-16 16:42
HED10W07SN基本I/O设计
基本I/O设计 芯片中没有与其它外设功能复用的GPIO引脚只有3个:GPIO11、GPIO12、GPIO13。 底层提供...
用户138786 2015-03-16 16:40
WIFI模块HED10W07SN开发环境
开发环境 选择联盛德微电子的HED10W07SN模块入手进行学习是带点偶然的。 拿WIFI模块和CC2530结合做网关是很早就想做的事,但WIFI模...
用户138786 2014-11-27 19:29
无线单片机入门导学(基于CC2530)
无线单片机(WSN/Zigbee)应用设计入门导学(基于CC2530) 我们学习无线单片机编程/应用设计是为了什么呢? 1、设计有用的应用...
用户138786 2014-11-27 19:24
web方式远程控制
web方式远程控制应用设计 这一类应用的特点是客户端通过浏览器(http协议)方式对无线单片机进行远程控制及数据采集。 ...
我要评论
3
8
关闭 站长推荐上一条 /2 下一条