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!\r\n");
            /* 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!\r\n");
            }
            /* 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 下载学习

原文地址:https://www.cnblogs.com/tuzhuke/p/10503052.html

时间: 2024-08-30 05:27:42

DWM1000 帧过滤代码实现的相关文章

DWM1000 Blink数据结构 -- 帧过滤第一节

数据结构分析主要学习DWM1000 帧过滤功能,希望在目前DS-TWR定位系统中增加中断和帧过滤功能,帧过滤功能可以有效减少系统中的各个模块同时收发数据时的干扰问题,从而极大的提供系统稳定性以及刷新频率.帧过滤以及中断是近期学习的重点,学习基于官方代码为准,部分摘录官方代码进行说明解释. 1 Blink 数据格式 1.1 Blink 数据结构格式定义 1.2 Blink数据结构代码定义 typedef struct { uint8 frameCtrl; // frame control byte

自己写的一个帧处理代码,请多多指教

这段时间在一个项目中负责程序与下位机USB设备的通讯.将接收到的USB数据做帧处理之后做成一个完整的帧送入队列中等待上层应用对帧数据进行解析. 相信很多人在做与下位机通讯的项目的时候,都会为帧处理烦恼.因为上位机在接收数据的时候,由于收到操作系统调度的影响,有时候收到的是半帧,有时候收到的是一帧半数据.如果不做帧处理的话,就会严重丢包. 在项目中我写了一个帧处理代码,经过测试验证很稳定.拿出来分享一下,也请大家多多指教. 我们项目中的协议是<<.................>>

PHP 文件系统管理函数与 preg_replace() 函数过滤代码

案例:在带行号的代码至文件 crop.js 中.用两种方法去掉代码前面的行号,带行号的代码片段: 1.$(function(){ 2. //初始化图片区域 3. var myimg = new Image(); 4. myimg.src = $("#mypic2").attr("src"); 5. //输出图片数据 6. $("#showSize").html(myimg.width + "×" + myimg.height)

C#敏感关键词过滤代码

System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length);             string filterText = "需要过滤的脏字 以|分开";//脏字 可根据自己的方式用分隔符                string[] filterData = filterText.Split('|');             foreach (var item in filterData)

JavaScript表单项数据过滤代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <script type="text/javascript"> window.onload = function(){ document.getElementById("admin").focus(); } function check_admin

php XSS安全过滤代码

function remove_xss($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed // this prevents some character re-spacing such as <java\0script> // note that you have to handle splits with \n, \r, and \t later since the

协同过滤代码--getRating.py文件

#coding=utf-8 from math import sqrt from loadMovieLens import loadMovieLensTrain from loadMovieLens import loadMovieLensTest ### 计算pearson相关度 def sim_pearson(prefer, person1, person2): sim = {} #查找双方都评价过的项 for item in prefer[person1]: if item in pref

协同过滤代码---loadMovieLens.py文件

#coding=utf-8 import sys import os ##================================== # 加载指定的训练集文件 # 参数fileName 代表某个训练集文件 ##================================== def loadMovieLensTrain(fileName='u1.base'): str1 = './movielens/' # 目录的相对地址 prefer = {} for line in open(

视频 -&gt; 帧 浅析

项目要求根据服务器返回的视频和秒数,生成该视频的预览图. 网上一搜关键词 “iOS 视频 帧” 结果都是:iOS如何获取视频的第一帧. 但是如果我不想要第一帧,要第s秒的第x帧怎么办? 先贴如何获取第一帧的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - (UIImage*) getVideoPreViewImage { AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoPath options:n