51uwb.cn

 找回密码
 立即注册
查看: 27788|回复: 67
打印 上一主题 下一主题

DWM1000 帧过滤功能实现

[复制链接]

73

主题

249

帖子

6793

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6793
跳转到指定楼层
楼主
发表于 2019-3-9 21:14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
帧过滤功能可以在同一个环境内组建多个网络而不干扰(非频段不同),可以通过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端均不能收到数据,说明帧过滤功能正常。



main_rx.c

19.99 KB, 阅读权限: 10, 下载次数: 22

售价: 5 金钱  [记录]

main_tx.c

24.46 KB, 阅读权限: 10, 下载次数: 23

售价: 5 金钱  [记录]

回复

使用道具 举报

1

主题

6

帖子

5

积分

新手上路

Rank: 1

积分
5
沙发
发表于 2019-7-16 09:13:37 | 只看该作者
非常有用的东西,不知道怎么才能下载
回复

使用道具 举报

73

主题

249

帖子

6793

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6793
板凳
 楼主| 发表于 2019-7-16 09:27:08 | 只看该作者
lu_jf97 发表于 2019-7-16 09:13
非常有用的东西,不知道怎么才能下载

积极发言
共享资料
赚金钱
回复

使用道具 举报

1

主题

6

帖子

5

积分

新手上路

Rank: 1

积分
5
地板
发表于 2019-7-16 10:11:42 | 只看该作者
金币够了,我换个浏览器试一试
回复

使用道具 举报

1

主题

6

帖子

5

积分

新手上路

Rank: 1

积分
5
5#
发表于 2019-7-16 10:13:23 | 只看该作者
用IE就可以了,谢谢,哈哈
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
6#
发表于 2019-11-12 11:21:01 | 只看该作者
感谢楼主分享!
回复

使用道具 举报

3

主题

9

帖子

21

积分

新手上路

Rank: 1

积分
21
7#
发表于 2019-11-15 18:16:57 | 只看该作者
ACK Pending是不是要支持帧过滤?
回复

使用道具 举报

0

主题

3

帖子

3

积分

新手上路

Rank: 1

积分
3
8#
发表于 2019-12-25 16:33:52 | 只看该作者
下载学习下
回复

使用道具 举报

0

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
9#
发表于 2020-4-21 20:03:22 | 只看该作者
谢谢分享!来学习下
回复

使用道具 举报

1

主题

11

帖子

30

积分

新手上路

Rank: 1

积分
30
10#
发表于 2020-4-23 09:47:12 | 只看该作者
感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-4-25 16:28 , Processed in 0.024546 second(s), 6 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表