zoukankan      html  css  js  c++  java
  • DWM1000 帧过滤代码实现

    帧过滤功能可以在同一个环境内组建多个网络而不干扰(非频段不同),可以通过PANID(网络ID)区分不同网络,不同网络中的模块无法直接通信, 再之,利用短地址,网络中可以同时有多个模块发送信息,而接收端会根据信息短地址不同而自动过滤。

    1 发送端部分,组建发送结构体,按照MAC 数据结构组织。

        srd_msg_dsss msg_f ; // ranging message frame with 16-bit addresses
        int psduLength = 0;
        //set frame type (0-2), SEC (3), Pending (4), ACK (5), PanIDcomp(6)
        msg_f.frameCtrl[0] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/;
        //source/dest addressing modes and frame version
            //msg_f.frameCtrl[0] = 0x41;
        msg_f.frameCtrl[1] = 0x8 /*dest extended address (16bits)*/ | 0x80 /*src extended address (16bits)*/;
        msg_f.panID[0] = 0xF0;
        msg_f.panID[1] = 0xF0;
    
        msg_f.seqNum = 0;
        msg_f.messageData[POLL_RNUM] = 3; //copy new range number
        msg_f.messageData[FCODE] = RTLS_DEMO_MSG_ANCH_POLL; //message function code (specifies if message is a poll, response or other...)
        psduLength = (TAG_POLL_MSG_LEN + FRAME_CRTL_AND_ADDRESS_S + FRAME_CRC);
        msg_f.seqNum = 0; //copy sequence number and then increment
        msg_f.sourceAddr[0] = 0x02; //copy the address
        msg_f.sourceAddr[1] =0x02; //copy the address
        msg_f.destAddr[0] = 0x01;  //set the destination address
        msg_f.destAddr[1] = 0x01;  //set the destination address 

    其中数据结构 srd_msg_dsss 部分摘录自官方源码。模块所在PANID = 0xF0F0, TX 本身短地址0x0202,RX本身短地址0x0101。-->接收端需要配置同样的PANID以及RX本身地址

    启动发送代码

       dwt_writetxdata(psduLength, (uint8 *)&msg_f, 0) ; // write the frame data
       dwt_writetxfctrl(psduLength, 0);
       /* Start transmission. */
       dwt_starttx(DWT_START_TX_IMMEDIATE);

    2 RX 使能帧过滤功能以及配置PANID 和 短地址

       dwt_enableframefilter(DWT_FF_DATA_EN | DWT_FF_ACK_EN); 
       dwt_setpanid(0xF0F0);
       dwt_setaddress16(0x0101);

    接收并打印信息

     if (status_reg & SYS_STATUS_RXFCG)
     {
                //printf("Step3!
    ");
                /* A frame has been received, copy it to our local buffer. */
                frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;
                if (frame_len <= FRAME_LEN_MAX)
                {
                    dwt_readrxdata(rx_buffer, frame_len, 0);
                    USART_puts(rx_buffer,frame_len);
                    //printf("Y!
    ");
                }
                /* Clear good RX frame event in the DW1000 status register. */
                dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);
      }

    按照上述代码实现,RX端可以接收到TX发送的信息。

    增加实验:不论单独修改TX/RX 任何一端的PANID 和 短地址,RX端均不能收到数据,说明帧过滤功能正常。

    上述只有部分代码实例,完整工程请到bphero.com.cn 下载学习

  • 相关阅读:
    INFORMATION_SCHEMA.INNODB_LOCKS
    INFORMATION_SCHEMA.INNODB_TRX 详解
    用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
    自助式BI对比评测:Tableau和FineBI
    4款最具影响力的自助式BI工具
    4款最具影响力的自助式BI工具
    用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
    用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
    zabbix 通过key 获取
    匿名hash
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/10503052.html
Copyright © 2011-2022 走看看