这一节继续继承之前帧过滤部分,首先补充一下关于帧过滤部分,如果将目标地址设置为0xFFFF,则同一个网络(物理频道与PANID 都相同),所有节点都应该收到这条信息,这个信息为广播信息,0xFFFF为广播地址。

广播信息在测距定位中很有用,标签广播一个消息,所有周围的基站收到广播信息回复即可,标签不同和各个基站单聊了。

补充完上面的知识,接着说自动应答,自动应答的作用是收到信息后,通过帧过滤后,如果本条信息是发给我的,我就会自动回复一条应答,这个回复行为是硬件实现的,这个应答时间非常快,在有应答的网络通信中,利用应答可以保证数据正确传输。当然,我的目标是用来测距的,利用帧过滤和自动应答可以实现非常快的测距,虽然还没有具体概念,后面慢慢实现。

先上一段关于自动应答的说明,直接上英文,没空翻译了

• Frame filtering must be enabled and the received data or MAC command frame must be correctly 
addressed and pass through the receive frame filtering, (see section 5.2 - Frame filteringfor
details of frame filtering configuration).
• The ACK request bit in the frame control field of the received frame must be set.
• Auto-acknowledgement must be enabled by the AUTOACK configuration in Register file: 0x04
– System Configuration.

 大概意思 1 必须使能帧过滤 2 收到的信息必须有应答请求 3系统必须使能自动应答

在上一例中已经实现了帧过滤,只需要在发送端增加“应答请求”,在接收端使能“自动应答“

发送端主要代码修改

  msg_f.frameCtrl[] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/|0x20/* ACK request*/;

接收端使能自动应答

  dwt_enableautoack();

其中参数为turnaround 时间,接收到信息多久发出自动应答,这个很重要,以后会用。关于这个函数,我略做修改。

void dwt_enableautoack(uint8 responseDelayTime)
{
uint8 temp = ;
temp |= (uint8)(SYS_CTRL_TXSTRT | SYS_CTRL_TRXOFF) ;
dwt_writetodevice(SYS_CTRL_ID,,,&temp) ;
// Set auto ACK reply delay
dwt_write16bitoffsetreg(ACK_RESP_T_ID, 0x2, (responseDelayTime << ) ) ; //in symbols
// Enable auto ACK
dw1000local.sysCFGreg |= SYS_CFG_AUTOACK;
dwt_write32bitreg(SYS_CFG_ID,dw1000local.sysCFGreg) ;
}

增加了对SYS_CTRL_TXSTRT和SYS_CTRL_TRXOFF写操作,因为在DM1000 手册上有如下描述

The most efficient way to ensure the SFD sequence is correctly initialised is to simultaneously initiate and
abort a transmission thereby forcing the SFD initialisation. This can be done by writing to the the system
control register Register file: 0x0D – System Control Register with both the transmission startbit TXSTRT and
the transceiver off bit TRXOFF set at the same time

 大概意思是初始化SFD,可以通过写SYS_CTRL_TXSTRT和SYS_CTRL_TRXOFF 非常有效快速的完成。

上面就是修改的主要代码了。 关于自动应答实验的方法。

1 TX端发送信息,在RX端看是否有ATT标识,并且是否有TXFRS,ATT标识表明收到一条有应答请求的消息,而TXFRS表明接收端已经发送了一条应答。

2 在TX端增加接收代码,打印自动应答消息

打印结果如图,每次回打印5个字节,下面是多次打印

DM1000手册描述,自动应答为5个字节,与收到的信息一致。

下面是IEEE 关于MAC应答帧的描述,两张图自己看,确实符合规范!

还有一点,MAC 应答帧,帧过滤不了,直接送到上层!

最后,老规矩,源码放到bphero.com.cn 论坛了,有需要学习的可以下载

DWM1000 自动应答代码实现与实例的更多相关文章

  1. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  2. mybatis 自动生成代码(mybatis generator)

    pom.xml 文件配置 引入 mybatis generator <properties> <mysql.connector.version>5.1.44</mysql ...

  3. nRF24L01+启用自动应答ACK及自动重发的实战分享

    ACK模式(自动应答)功能的官方说明 当用W_TX_PAYLOAD命令对发送端TX FIFO写数据时,将数据打包后,数据包中包控制字段NO_ACK 标志位复位.接收端接收到一帧有效数据后, 产生RX_ ...

  4. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  5. java如何在eclipse编译时自动生成代码

    用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...

  6. Eclipse保存文件时自动格式化代码

    实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...

  7. MyBatis自动生成代码示例

    在项目中使用到mybatis时,都会选择自动生成实体类,Mapper,SqlMap这三个东东. 手头上在用的又不方便,找了下网上,其实有很多文章,但有些引用外部文件时不成功,也不方便,所以重新整理了下 ...

  8. C# 自动运行代码 (创建windows 服务的形式 )

    本文转载自:http://blog.csdn.net/csethcrm/article/details/17917721 1.      新建项目 1.1 右键解决方案 – 添加 – 新建项目 1.2 ...

  9. 使用MyBatis Generator自动创建代码

    SSM框架--使用MyBatis Generator自动创建代码 1. 目录说明 使用自动生成有很多方式,可以在eclipse中安装插件,但是以下将要介绍的这种方式我认为很轻松,最简单,不需要装插件, ...

随机推荐

  1. MATLAB cftool工具数据拟合结果好坏判断

    SSE和RMSE比较小 拟合度R接近于1较好 * 统计参数模型的拟合优度 1.误差平方和(SSE) 2. R-Square(复相关系数或复测定系数) 3. Adjusted R-Square(调整自由 ...

  2. 浅入深出Vue系列

    浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...

  3. 机器学习用Pandas实现数据库的读取

    #读取数据库数据#import pandas as pd  导入模块#import pymysql  导入数据库模块#con = pymysql.connect(host='localhost',po ...

  4. Windows如何上传代码到Github

    1.首先得安装git客户端 进入官网:https://git-scm.com/ ,点击右侧下载windows版本的软件包,然后双击安装就可以了. 安装完成之后,在开始菜单可以看到,此时,在想上传的文件 ...

  5. springboot启动的时候排除加载某些bean

    由于公司把redis相关的配置类,工具类放在了一个类似common的工程里,这样以后肯定不可避免的出现某些项目可能并不需要使用redis,但是还是依赖common里的别的一些类库 所以排除spring ...

  6. 最新传智播客web前端开发39期视频教程【完整版】

    本套视频为传智2018web前端开发全套视频教程基础班+就业班,视频+源码+案例笔记,全套高清不加密~2018最新传智播客视频! 本教程是实战派课程!为传智最新web前端39期,挑战全网最全视频,没有 ...

  7. Mac环境下Scrapy的安装

    直接命令安装: $ easy_install scrapy 从 GitHub 安装: $ git clonehttps://github.com/scrapy/scrapy.git $ cd scra ...

  8. linux查找删除某天前的文件(转载)

    语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带 ...

  9. Mac 装Sequel pro 连接 Mysql 8.0 失败、登录不了、loading问题

    最近都没更新博客,零零散散的笔记也都没整理,so 觉得还是不放上来了. 高兴的是入手了期待好久的水果机,开始了各种捣鼓,好想大撸一下代码啊.... 回到正轨,刚装了mysql8.0, 想装下mysql ...

  10. git branch 分支

    几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副 ...