51uwb.cn

标题: DWM1000 帧过滤功能实现 [打印本页]

作者: tuzhuke    时间: 2019-3-9 21:14
标题: DWM1000 帧过滤功能实现
帧过滤功能可以在同一个环境内组建多个网络而不干扰(非频段不同),可以通过PANID(网络ID)区分不同网络,不同网络中的模块无法直接通信, 再之,利用短地址,网络中可以同时有多个模块发送信息,而接收端会根据信息短地址不同而自动过滤。

1 发送端部分,组建发送结构体,按照MAC 数据结构组织。
  1. srd_msg_dsss msg_f ; // ranging message frame with 16-bit addresses
  2.     int psduLength = 0;
  3.     //set frame type (0-2), SEC (3), Pending (4), ACK (5), PanIDcomp(6)
  4.     msg_f.frameCtrl[0] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/;
  5.     //source/dest addressing modes and frame version
  6.         //msg_f.frameCtrl[0] = 0x41;
  7.     msg_f.frameCtrl[1] = 0x8 /*dest extended address (16bits)*/ | 0x80 /*src extended address (16bits)*/;
  8.     msg_f.panID[0] = 0xF0;
  9.     msg_f.panID[1] = 0xF0;

  10.     msg_f.seqNum = 0;
  11.     msg_f.messageData[POLL_RNUM] = 3; //copy new range number
  12.     msg_f.messageData[FCODE] = RTLS_DEMO_MSG_ANCH_POLL; //message function code (specifies if message is a poll, response or other...)
  13.     psduLength = (TAG_POLL_MSG_LEN + FRAME_CRTL_AND_ADDRESS_S + FRAME_CRC);
  14.     msg_f.seqNum = 0; //copy sequence number and then increment
  15.     msg_f.sourceAddr[0] = 0x02; //copy the address
  16.     msg_f.sourceAddr[1] =0x02; //copy the address
  17.     msg_f.destAddr[0] = 0x01;  //set the destination address
  18.     msg_f.destAddr[1] = 0x01;  //set the destination address
复制代码


其中数据结构 srd_msg_dsss 部分摘录自官方源码。模块所在PANID = 0xF0F0, TX 本身短地址0x0202,RX本身短地址0x0101。-->接收端需要配置同样的PANID以及RX本身地址
启动发送代码
  1. dwt_writetxdata(psduLength, (uint8 *)&msg_f, 0) ; // write the frame data
  2.    dwt_writetxfctrl(psduLength, 0);
  3.    /* Start transmission. */
  4.    dwt_starttx(DWT_START_TX_IMMEDIATE);
复制代码
2 RX 使能帧过滤功能以及配置PANID 和 短地址
  1. dwt_enableframefilter(DWT_FF_DATA_EN | DWT_FF_ACK_EN);
  2.    dwt_setpanid(0xF0F0);
  3.    dwt_setaddress16(0x0101);
复制代码
接收并打印信息
  1. if (status_reg & SYS_STATUS_RXFCG)
  2. {
  3.             //printf("Step3!\r\n");
  4.             /* A frame has been received, copy it to our local buffer. */
  5.             frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;
  6.             if (frame_len <= FRAME_LEN_MAX)
  7.             {
  8.                 dwt_readrxdata(rx_buffer, frame_len, 0);
  9.                 USART_puts(rx_buffer,frame_len);
  10.                 //printf("Y!\r\n");
  11.             }
  12.             /* Clear good RX frame event in the DW1000 status register. */
  13.             dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);
  14.   }
复制代码
按照上述代码实现,RX端可以接收到TX发送的信息。
增加实验:不论单独修改TX/RX 任何一端的PANID 和 短地址,RX端均不能收到数据,说明帧过滤功能正常。




作者: lu_jf97    时间: 2019-7-16 09:13
非常有用的东西,不知道怎么才能下载
作者: tuzhuke    时间: 2019-7-16 09:27
lu_jf97 发表于 2019-7-16 09:13
非常有用的东西,不知道怎么才能下载

积极发言
共享资料
赚金钱
作者: lu_jf97    时间: 2019-7-16 10:11
金币够了,我换个浏览器试一试
作者: lu_jf97    时间: 2019-7-16 10:13
用IE就可以了,谢谢,哈哈
作者: Henry    时间: 2019-11-12 11:21
感谢楼主分享!
作者: zigbee_luo    时间: 2019-11-15 18:16
ACK Pending是不是要支持帧过滤?
作者: joinecy001    时间: 2019-12-25 16:33
下载学习下
作者: lwd04    时间: 2020-4-21 20:03
谢谢分享!来学习下
作者: wo4fisher    时间: 2020-4-23 09:47
感谢分享!
作者: huaohui    时间: 2020-4-26 10:50
感谢楼主分享!!!支持
作者: dw1000_2020    时间: 2020-5-6 18:06
好东西,下载学习了.
作者: dw1000_2020    时间: 2020-5-6 18:10
我再来说声感谢这个论坛.
作者: dw1000_2020    时间: 2020-5-7 09:19
代码有个注释错误:
  1. #define MAX_USER_PAYLOAD_STRING_SS     (STANDARD_FRAME_SIZE-FRAME_CRTL_AND_ADDRESS_S-TAG_FINAL_MSG_LEN-FRAME_CRC) //127 - 9 - 16 - 2 = 100
复制代码

我的理解应该是:  127 - 9 - 33 -2 = 83
作者: dw1000_2020    时间: 2020-5-14 16:56
测试发现PANID 没有用. 随便改PANID都可以接收到.
作者: 蓝点无限    时间: 2020-5-18 07:45
dw1000_2020 发表于 2020-5-14 16:56
测试发现PANID 没有用. 随便改PANID都可以接收到.

panid目前要改两个地方
1 消息要发送到那个panid网络
  1. void BPhero_UWB_Message_Init(void)
  2. {
  3.     //set frame type (0-2), SEC (3), Pending (4), ACK (5), PanIDcomp(6)
  4.     msg_f_send.frameCtrl[0] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/|0x20/* ACK request*/;
  5.     //source/dest addressing modes and frame version
  6.     //msg_f.frameCtrl[0] = 0x41;
  7.     msg_f_send.frameCtrl[1] = 0x8 /*dest extended address (16bits)*/ | 0x80 /*src extended address (16bits)*/;
  8.     msg_f_send.panID[0] = 0xF0;
  9.     msg_f_send.panID[1] = 0xF0;
复制代码
2 自身接工作panid(接收那个panid网络信息)
  1. void BPhero_UWB_Init(void)//dwm1000 init related
  2. {
  3. ……
  4. dwt_setpanid(0xF0F0);
  5. }
复制代码
两个同时改,你再试试

后面代码会更新下,定义一个宏,两个地方引用这个宏,就不会出现问题了

作者: dw1000_2020    时间: 2020-5-18 08:44
感谢感谢,回头下课好好试试.
作者: 赵成喜    时间: 2020-5-21 13:51
将PANID F0F0改成其他的,就接收不到了,比如:发送F0F1,接收设置F0F1,就没办法接收,不知道什么原因,只有F0F0才能实现
作者: tata    时间: 2020-6-6 11:15
那标签广播时是不能使用帧过滤了吗?
作者: uwbbb    时间: 2020-6-28 11:45
感谢分享!
作者: uwb    时间: 2020-6-28 13:17
帧过滤功能可以在同一个环境内组建多个网络而不干扰(非频段不同),可以通过PANID(网络ID)区分不同网络,不同网络中的模块无法直接通信, 再之,利用短地址,网络中可以同时有多个模块发送信息,而接收端会根据信息短地址不同而自动过滤。


@tuzhuke,确定“可以在同一个环境内组建多个网络而不干扰(非频段不同)”?原则上处于同一工作频带的设备应该会有在物理信道上的干扰,帧过滤应该不能解决这个问题吧?

注:我没试过开启帧过滤功能,以上只是推测,如有人进行实验过,欢迎指正!
作者: cgc2003    时间: 2020-7-1 10:31
谢谢分享!!!!!!但是,太贵了,暂时下载不了
作者: wen130    时间: 2020-7-17 10:34
感谢楼主分享!
作者: gaozhenfu521    时间: 2020-7-17 11:59
你好,想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 11:59
你好,我想下载或购买带有srd_msg_dsss结构体的官方源码在哪里?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 12:00
你好,想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 12:01
感谢分享,以后会持续关注的
作者: gaozhenfu521    时间: 2020-7-17 12:01
感谢分享,以后会持续关注的
作者: gaozhenfu521    时间: 2020-7-17 12:16
钱不够下载不了,不知道有没有会员充值之类的
作者: gaozhenfu521    时间: 2020-7-17 12:17

你好,想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 12:18

你好,想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 12:18

这么好的东西想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: gaozhenfu521    时间: 2020-7-17 12:18

你好,想问一下带有srd_msg_dsss结构体的官方源码在哪里下载?十分感谢
作者: biujiujiu_    时间: 2020-8-4 14:39
设置了自动应答,接收端能发出去ack,但发送端收不到ack,请问有人知道怎么回事嘛?参考了大佬另一篇文 自动应答写的
作者: 15825754748    时间: 2020-8-10 13:49
感谢分享!
作者: biujiujiu_    时间: 2020-8-19 11:18
您好,发送方设置了dwt_setrxaftertxdelay();后 ,为什么还要再打开接收dwt_rxenable(0)?
前一个函数不是到设定时间后自动切换到接收状态嘛?
作者: wzkzzzz    时间: 2020-9-8 14:54
谢谢楼主,感谢分享,赚金币
作者: wzkzzzz    时间: 2020-9-8 14:55
感谢楼主分享,多谢多谢
作者: wzkzzzz    时间: 2020-9-8 14:56
感谢楼主分享,多多感谢
作者: 时见复检    时间: 2020-10-9 16:39
积极发言
作者: lshlin    时间: 2020-10-22 14:22
uwb 发表于 2020-6-28 13:17
@tuzhuke,确定“可以在同一个环境内组建多个网络而不干扰(非频段不同)”?原则上处于同一工作频带的设 ...

我也觉得,同频同时信号应该会干扰?不干扰谁能解释一下原理?
作者: xingenhui    时间: 2021-3-1 13:19
非常好  谢谢
作者: zzdywc    时间: 2021-3-20 18:43
原来是这样子的,学习了
作者: 13764295318    时间: 2021-6-7 15:59
礼貌回帖,赚金币
作者: 藏丶宝    时间: 2021-6-9 12:46
回帖赚金币,下载学习学习
作者: fwz    时间: 2021-6-21 11:12
lshlin 发表于 2020-10-22 14:22
我也觉得,同频同时信号应该会干扰?不干扰谁能解释一下原理?

你用示波器看一下接收器的变化就知道了
作者: fwz    时间: 2021-6-21 11:14
本帖最后由 fwz 于 2021-6-21 16:53 编辑

谢谢分享
作者: fwz    时间: 2021-6-21 14:55
本帖最后由 fwz 于 2021-6-21 16:52 编辑

wok,为什么frame type 选择信标模式就无法对应上了呐,接收器也置位了啊?除了数据模式外,其它模式好像都不能用
作者: 藏丶宝    时间: 2021-6-24 10:22
我将自己的工程里的数据帧修改了之后旧没办法测距了,请问时什么原因呢
作者: szmcumcu    时间: 2021-10-27 13:55
好家伙,2个主程序,金币用光了,谢谢楼主分享
作者: easi0n    时间: 2021-11-2 14:07
感谢楼主的分享
作者: 桂冠vivi    时间: 2021-11-25 17:33
这个很有用,特别是大规模组网时候
作者: 老北京鸡肉卷    时间: 2021-11-26 10:06
有用,学习一下
作者: yiyayiya    时间: 2021-12-7 16:47

感谢楼主分享!
作者: yangligei    时间: 2021-12-7 20:12
感谢分享,感谢
作者: yangligei    时间: 2021-12-7 20:13
感谢分享,感谢
作者: yjxwyyve    时间: 2021-12-10 13:31
十分感谢楼主的分享
作者: 咕哒子    时间: 2021-12-27 18:16
请问两个main_tx.c有区别吗

作者: 咕哒子    时间: 2021-12-27 18:29
刚接触dw1000的新人,感谢楼主分享,真的十分有用
作者: szmcumcu    时间: 2022-1-20 09:15
非常不错的资料,谢谢楼主分享,赞一个
作者: linyu0395    时间: 2022-3-14 11:06
内容 不错  就是价格贵了点
作者: linyu0395    时间: 2022-3-23 19:09
中断你还需要判断帧过滤异常  如果不同组号   会导致接收端异常的
作者: 暮雨    时间: 2022-4-8 21:52
感谢分享                     
作者: lyuanc    时间: 2022-4-14 00:47
谢谢,哈哈
作者: chenjinping    时间: 2022-7-3 21:19
下载了,学习学习,谢谢分享
作者: vipshenji    时间: 2022-8-12 10:27
感觉明白了些 谢谢大佬
作者: zgf009    时间: 2023-5-7 10:23
谢谢楼主的分享
作者: txj168    时间: 2024-1-18 06:49
学习学习。。。。。。




欢迎光临 51uwb.cn (http://51uwb.cn/) Powered by Discuz! X3.3