Direct Test Mode

本文介绍了蓝牙直接测试模式(DTM)的基本概念,包括其目的、设置步骤、支持的PHY类型等。并阐述了如何通过DTM应用程序进行射频功能测试,如传输功率、接收器灵敏度等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 Direct Test Mode

直接测试模式。

DTM应用程序启用蓝牙规范5.0 vol 6, part F 中描述的DTM测试功能。

DTM的目的是在物理层上测试射频的运行情况,例如:

  • Transmission power and receiver sensitivity(传输功率和接收器灵敏度)
  • Frequency offset and drift(频率偏移和漂移)
  • Modulation characteristics(调制特性)
  • Packet error rate(误码率)
  • Intermodulation performance(互调性能)

二 Setp

设置。

测试程序在文档“蓝牙低功耗RF PHY测试规范”中定义,文档编号RF-PHY.TS / 5.0.0。一致性测试是通过专用测试设备(例如Anritsu MT8852或类似产品)以nRF5和DTM应用作为被测设备(DUT)进行的。

nRF5 DTM应用程序包括两个部分:

  • DTM-直接测试模式库,用于管理nRF射频,并控制标准DTM程序。 该库的源代码可以在以下文件夹中找到:\components\ble\ble_dtm。
  • 提供外部接口的应用程序。您可以在以下文件夹中找到示例的源代码和项目文件:\examples\dtm\direct_test_mode

DTM应用程序包含用于2线UART接口的驱动程序,可将BLE DTM规范指定的两个八位字节的命令和事件映射到DTM-直接测试模式库。

在这里插入图片描述

该实现是独立的,不需要BLE协议栈即可运行。MPU以标准方式初始化(文件arm_startup_nrf52.s和system_nrf52.c)。DTM库函数dtm_init配置所有中断,计时器和射频。

main.c可以用其他接口实现方式代替,例如HCI接口,USB或Upper Tester所需的其他接口。

Lower Tester 的接口使用nRF5的天线连接器。虽然原则上可以使用天线,但一致性测试应涵盖读取DUT所传送的传输功率。因此,DUT和Lower Tester之间的同轴电缆连接用于所有一致性测试。

三 BLE DTM module interface

BLE DTM模块接口。

DTM -直接测试模式功能dtm_cmd实现了BLE标准定义的四个命令:

  • TEST SETUP (called RESET in Bluetooth 4.0)
  • RECEIVER_TEST
  • TRANSMITTER_TEST
  • TEST_END

在dtm_cmd接口中,每个参数(cmd,freq,length,payload)都是字长。请注意,当前支持的参数值仅限于为BLE定义的参数值。(HCI允许与BR / EDR一起使用的更大值范围)

使用dtm_event_get函数轮询以下DTM事件:

  • PACKET_REPORTING_EVENT
  • TEST_STATUS_EVENT [SUCCESS|FAIL]

在这里插入图片描述

四 Supported PHYs

支持的PHY

DTM应用程序支持DTM中指定的所有四个PHY,但并非所有设备都支持所有PHY。

在这里插入图片描述

五 Vendor Specific packet payload

供应商特定的数据包有效负载。

BLE 2线UART DTM接口标准为供应商特定的数据包有效负载保留数据包类型(有效负载参数)二进制值’11’。DTM到串行适配层将其映射到dtm_cmd接口中的值0xFFF…FFF。此映射的原理是允许以后扩展到HCI接口和DTM PDU布局中指定的4位数据包类型字段。

供应商特定的负载(参数4)解释如下,如果参数1(命令)设置为发射机测试(二进制‘10’),参数4(负载)设置为供应商特定(二进制‘11’在2wire物理接口,所有位设置为1在dtmlib接口):

  • 如果参数3(长度)设置为0(符号CARRIER_TEST),则在参数2 (freq)所指示的信道上打开一个未调制载波。在发出TEST_END或RESET命令之前,它一直处于打开状态。
  • nRFgo studio使用参数3(长度)等于1(符号CARRIER_TEST_STUDIO)表示未调制载波在信道上打开。在发出TEST_END或RESET命令之前,它一直处于打开状态。
  • 如果参数3(长度)设置为2(符号SET_TX_POWER),则参数2(频率)将以dBm为单位设置发射功率。产品规格中指定了有效的TX功率,范围为-40至+4。 复位值为0 dBm。只有6个最低有效位将适合长度字段,因此DTM模块将计算两个最高有效位(这是可能的,因为所有有效TX功率的6个最低有效位都是唯一的)。仅当没有运行发射机测试或接收机测试时,才可以修改TX功率。
  • 如果参数3(长度)设置为3(符号SELECT_TIMER),则参数2(频率)选择DTM-直接测试模式库用于变送器测试时序的计时器。有效的计时器标识符为0、1和2。配置要使用的计时器可以将库集成到更大的测试环境中,在该环境中其他模块可能正在占用默认计时器(计时器0)。
  • 保留参数2(频率)和4(长度)的所有其他值。

六 The DTM to Serial adaptation layer

DTM到串行适配层。

main.c是UART接口的实现,如蓝牙规范 Vol 6, Part F, 3中所指定。GPIO引脚的默认选择是RX的引脚8和TX的引脚6。这些默认值在 examples \ bsp \ board.h中定义,可以通过编辑符号RX_PIN_NUMBER和TX_PIN_NUMBER的值进行更改。

七 Running DTM tests

运行DTM测试。

合格测试是使用经过认证的测试仪进行的。设置取决于实际的测试仪,并且必须在测试仪文档中找到有关测试操作的详细信息。应用笔记nAN34描述了使用DTM设置生产测试的两种选择:Anritsu MT8852B蓝牙测试仪,nRF8001开发套件或nRF51822开发套件以及一台计算机作为测试仪。

BLE DTM UART接口标准指定:

  • 8个数据位
  • 无校验
  • 1个停止位
  • 没有硬件流控
  • 从9600到1000000的波特率中选择一种,DUT必须支持其中一种(可以通过试验参数来运行其他比波特率。)

DTM UART驱动程序的默认比特率是19200 bps,大多数认证的测试仪都支持。

### Direct.h 头文件概述 `direct.h` 是 C 和 C++ 编程语言中的标准库头文件之一,主要用于提供对目录操作的支持功能[^1]。此头文件定义了一系列函数来处理当前工作目录以及执行其他与路径有关的操作。 ### 常见函数及其用途 #### 获取和设置当前工作目录 - `char *_getcwd(char *buf, int size)`:获取当前的工作目录并将其存储在一个指定大小的缓冲区中。 - `_chdir(const char *path)` :改变进程的当前工作目录到由 path 参数所指向的位置。 #### 创建新目录 - `int _mkdir(const char *dirname)` 或者在某些系统上可能是 `int mkdir(const char *pathname, mode_t mode)`:创建一个新的子目录;如果成功返回0,失败则返回-1。 这些函数允许程序动态地管理文件系统的结构,在跨平台开发时需要注意不同操作系统之间可能存在的差异性实现。 ```cpp #include <iostream> #include <direct.h> // For Windows systems // #include <unistd.h> // Uncomment this line for Unix-like systems instead of above one. using namespace std; int main() { const char* newDir = "./test_directory"; cout << "Creating directory: " << newDir << endl; if (_mkdir(newDir) == 0 || errno == EEXIST){ cout << "Directory created or already exists." << endl; // Change to the newly created/selected directory. if(_chdir(newDir) != 0){ cerr << "Failed changing into '" << newDir << "' : " << strerror(errno); }else{ char currentPath[_MAX_PATH]; if (!_getcwd(currentPath,sizeof(currentPath))){ perror ("_getcwd error"); } else{ printf ("Current working dir is %s\n",currentPath ); } } } else { cerr << "Error creating directory!" << endl; } return EXIT_SUCCESS; } ``` 该示例展示了如何使用 `direct.h` 中的功能来进行基本的目录管理和切换操作。请注意对于非Windows环境应当替换相应的POSIX兼容接口如 `<unistd.h>` 来代替 `direct.h`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值