This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

case about dtm and RF Channel

Hi,

IC nRF52833

sdk:nRF5_SDK_17.1.0

1. Does BLE have the concept of signaling test mode and non-signaling test mode?

2. Is DTM in signaling mode or non-signaling mode?

3. How do I enter the signaling test mode?

4. How to enter non-signaling test mode in BLE?

5.How to configure the RF frequency range in the program:

In Japan, for example:

In Spain, for example:

In France, for example:

6.Can you turn off part of the RF frequency range, because some part of the frequency range interference is too large

Parents
  • Hello,

    I assume what you are interested in here is performing radio tests for instance to test radio performance and/or at a test house to measure output power and spurious emissions. In that case I suggest to use the radio test example project:

    https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.1.0/nrf_radio_test_example.html

    In the above radio test example you control the nRF52833 through a UART interface to set it up to different test modes. It is also possible to make fixed test firmware without UART interface as for instance shown here:

    /**
     * Copyright (c) 2014-2020 - 2021, Nordic Semiconductor ASA
     *
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without modification,
     * are permitted provided that the following conditions are met:
     *
     * 1. Redistributions of source code must retain the above copyright notice, this
     *    list of conditions and the following disclaimer.
     *
     * 2. Redistributions in binary form, except as embedded into a Nordic
     *    Semiconductor ASA integrated circuit in a product or a software update for
     *    such product, must reproduce the above copyright notice, this list of
     *    conditions and the following disclaimer in the documentation and/or other
     *    materials provided with the distribution.
     *
     * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
     *    contributors may be used to endorse or promote products derived from this
     *    software without specific prior written permission.
     *
     * 4. This software, with or without modification, must only be used with a
     *    Nordic Semiconductor ASA integrated circuit.
     *
     * 5. Any software provided in binary form under this license must not be reverse
     *    engineered, decompiled, modified and/or disassembled.
     *
     * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
     * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     */
    /** @file
     *
     * @defgroup nrf_radio_test_example_main main.c
     * @{
     * @ingroup nrf_radio_test_example
     * @brief Radio Test Example application main file.
     *
     * This file contains the source code for a sample application that uses the NRF_RADIO and is controlled through the serial port.
     *
     */
    
    
    #include <stdint.h>
    #include <stdbool.h>
    #include <stdio.h>
    #include "bsp.h"
    #include "nrf.h"
    #include "radio_cmd.h"
    #include "app_uart.h"
    #include "app_error.h"
    #include "nordic_common.h"
    #include "nrf_drv_clock.h"
    #include "nrf_cli.h"
    #include "nrf_cli_uart.h"
    #include "radio_test.h"
    
    #include "nrf_log.h"
    #include "nrf_log_ctrl.h"
    #include "nrf_log_default_backends.h"
    #if defined(NRF21540_DRIVER_ENABLE) && (NRF21540_DRIVER_ENABLE == 1)
    #include "nrf21540.h"
    #endif
    
    NRF_CLI_UART_DEF(m_cli_uart_transport, 0, 64, 16);
    NRF_CLI_DEF(m_cli_uart,
                "uart_cli:~$ ",
                &m_cli_uart_transport.transport,
                '\r',
                CLI_EXAMPLE_LOG_QUEUE_SIZE);
    
    
    /**@brief Function for starting a command line interface that works on the UART transport layer.
     */
    static void cli_start(void)
    {
        ret_code_t ret;
    
        ret = nrf_cli_start(&m_cli_uart);
        APP_ERROR_CHECK(ret);
    }
    
    
    /**@brief Function for configuring UART for CLI.
     */
    static void cli_init(void)
    {
        ret_code_t ret;
    
        nrf_drv_uart_config_t uart_config = NRF_DRV_UART_DEFAULT_CONFIG;
    
        uart_config.pseltxd = TX_PIN_NUMBER;
        uart_config.pselrxd = RX_PIN_NUMBER;
        uart_config.hwfc    = NRF_UART_HWFC_DISABLED;
        ret                 = nrf_cli_init(&m_cli_uart, &uart_config, true, true, NRF_LOG_SEVERITY_INFO);
        APP_ERROR_CHECK(ret);
    }
    
    
    /**@brief Function for initializing logging.
     */
    static void log_init(void)
    {
        ret_code_t err_code = NRF_LOG_INIT(app_timer_cnt_get);
    
        APP_ERROR_CHECK(err_code);
    }
    
    
    /** @brief Function for configuring all peripherals used in this example.
     */
    static void clock_init(void)
    {
        // Start 64 MHz crystal oscillator.
        NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
        NRF_CLOCK->TASKS_HFCLKSTART    = 1;
    
        // Wait for the external oscillator to start up.
        while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
        {
            // Do nothing.
        }
    }
    
    
    /**@brief Radio parameter configuration.
     */
    typedef struct radio_param_config {
        transmit_pattern_t tx_pattern; /**< Radio transmission pattern. */
        nrf_radio_mode_t mode;         /**< Radio mode. Data rate and modulation. */
        nrf_radio_txpower_t txpower;   /**< Radio output power. */
        uint8_t channel_start;         /**< Radio start channel (frequency). */
        uint8_t channel_end;           /**< Radio end channel (frequency). */ // DONT' USE
        uint32_t delay_ms;             /**< Delay time in milliseconds. */ // DONT' USE
        uint32_t duty_cycle;           /**< Duty cycle. */ // DONT' USE
    } radio_param_config_t;
    
    
    static radio_test_config_t  m_test_config;      /**< Radio test configuration. */
    static bool                 m_test_in_progress; /**< If true, RX sweep, TX sweep or duty cycle test is performed. */
    static radio_param_config_t m_config =
    {
        .tx_pattern = TRANSMIT_PATTERN_RANDOM,
        .mode = NRF_RADIO_MODE_BLE_1MBIT,
        .txpower = NRF_RADIO_TXPOWER_0DBM,
        .channel_start = 20,
        .channel_end = 80, // Not in use
        .delay_ms = 10,
        .duty_cycle = 50,
    };
    
    static void tx_modulated_carrier_end(void)
    {
    }
    
    /** @brief Function for the main application entry.
     */
    int main(void)
    {
        uint32_t err_code;
    
        log_init();
    
        err_code = nrf_drv_clock_init();
        APP_ERROR_CHECK(err_code);
        nrf_drv_clock_lfclk_request(NULL);
    
        err_code = app_timer_init();
        APP_ERROR_CHECK(err_code);
    
        clock_init();
        
        radio_test_init(&m_test_config);
    
        memset(&m_test_config, 0, sizeof(m_test_config));
        m_test_config.type                        = MODULATED_TX; // You can use either: UNMODULATED_TX, MODULATED_TX, RX
        m_test_config.mode                        = m_config.mode;
        m_test_config.params.modulated_tx.txpower = m_config.txpower;
        m_test_config.params.modulated_tx.channel = m_config.channel_start; // The channel used during test
        m_test_config.params.modulated_tx.pattern = m_config.tx_pattern;
        m_test_config.params.modulated_tx.packets_num = 0; // 0 = Never stop
        m_test_config.params.modulated_tx.cb = tx_modulated_carrier_end;
    
        radio_test_start(&m_test_config);
    
        while (true)
        {
          __WFE();
        }
    }
    
    
    /** @} */
    

    Since you are using the nRF52833 you should open the \examples\peripheral\radio_test\pca10100\blank project. 

    There is also a DTM example project in the nRF5 SDK, however DTM will only run commands specified by BT Sig (described in BluetoothRegistered Core Specification: Version 5.2, Vol. 6, Part F.), for instance to measure electrical parameters are according the BT spec, however DTM commands are typically not used by a test house to test radio regulations.

    Best regards,
    Kenneth

  • Hi Kenneth,

    1. I know of two current test examples.

    2. Can you give an answer to 5.6

    Thank you for all your assistance.
    Kind regards,
    Peter.Min

  • I assume the actual frequencies you want to test depend on your product, e.g. for a Bluetooth low energy product they typically test lowest, middle, and highest used frequency used by Bluetooth low enery, this is channel 2 (=2.402GHz), 40, and 80.

    Best regards.
    Kenneth

  • Hi Kenneth,

    I have understood the relevant issues

    Signaling and nonsignaling differ in whether an instruction constitutes a loop

    Thank you for all your assistance.
    Kind regards,
    Peter.Min

Reply Children
No Data
Related