51uwb.cn
标题: DWM1000 帧过滤功能实现 [打印本页]
作者: tuzhuke 时间: 2019-3-9 21:14
标题: 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端均不能收到数据,说明帧过滤功能正常。
作者: lu_jf97 时间: 2019-7-16 09:13
非常有用的东西,不知道怎么才能下载
作者: tuzhuke 时间: 2019-7-16 09:27
积极发言
共享资料
赚金钱
作者: 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
代码有个注释错误:
- #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
panid目前要改两个地方
1 消息要发送到那个panid网络
- void BPhero_UWB_Message_Init(void)
- {
- //set frame type (0-2), SEC (3), Pending (4), ACK (5), PanIDcomp(6)
- msg_f_send.frameCtrl[0] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/|0x20/* ACK request*/;
- //source/dest addressing modes and frame version
- //msg_f.frameCtrl[0] = 0x41;
- msg_f_send.frameCtrl[1] = 0x8 /*dest extended address (16bits)*/ | 0x80 /*src extended address (16bits)*/;
- msg_f_send.panID[0] = 0xF0;
- msg_f_send.panID[1] = 0xF0;
复制代码 2 自身接工作panid(接收那个panid网络信息)- void BPhero_UWB_Init(void)//dwm1000 init related
- {
- ……
- dwt_setpanid(0xF0F0);
- }
复制代码 两个同时改,你再试试
后面代码会更新下,定义一个宏,两个地方引用这个宏,就不会出现问题了
作者: 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
我也觉得,同频同时信号应该会干扰?不干扰谁能解释一下原理?
作者: 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
你用示波器看一下接收器的变化就知道了
作者: 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 |