Hello,
Our product (sports timing) will be used at the upcoming Olympics and our customer is being asked some questions about wireless specs. We use Bluetooth 5 (backward compatible to 4.0) to connect our peripherals devices to Apple iOS devices as centrals--all standard Bluetooth. We use only BLE_GAP_PHY_1MBPS, a connection interval of 120 ms.
In addition, we use the Timeslot API to synchronize clocks on multiple peripherals. We customized the Wireless timer synchronization among nRF5 devices guide provided on devzone. Here's our code to configure the radio for Timeslot usage:
static void update_radio_parameters(sync_pkt_t * p_pkt)
{
// TX power
NRF_RADIO->TXPOWER = RADIO_TXPOWER_TXPOWER_0dBm << RADIO_TXPOWER_TXPOWER_Pos;
// RF bitrate
NRF_RADIO->MODE = RADIO_MODE_MODE_Nrf_2Mbit << RADIO_MODE_MODE_Pos;
// Fast startup mode
NRF_RADIO->MODECNF0 = RADIO_MODECNF0_RU_Fast << RADIO_MODECNF0_RU_Pos;
// CRC configuration
NRF_RADIO->CRCCNF = RADIO_CRCCNF_LEN_Three << RADIO_CRCCNF_LEN_Pos;
NRF_RADIO->CRCINIT = 0xFFFFFFUL; // Initial value
NRF_RADIO->CRCPOLY = 0x11021UL; // CRC poly: x^16+x^12^x^5+1
// Packet format
NRF_RADIO->PCNF0 = (0 << RADIO_PCNF0_S0LEN_Pos) | (0 << RADIO_PCNF0_LFLEN_Pos) | (0 << RADIO_PCNF0_S1LEN_Pos);
NRF_RADIO->PCNF1 = (RADIO_PCNF1_WHITEEN_Disabled << RADIO_PCNF1_WHITEEN_Pos) |
(RADIO_PCNF1_ENDIAN_Big << RADIO_PCNF1_ENDIAN_Pos) |
(4 << RADIO_PCNF1_BALEN_Pos) |
(sizeof(sync_pkt_t) << RADIO_PCNF1_STATLEN_Pos) |
(sizeof(sync_pkt_t) << RADIO_PCNF1_MAXLEN_Pos);
NRF_RADIO->PACKETPTR = (uint32_t) p_pkt;
// Radio address config
NRF_RADIO->PREFIX0 = m_params.rf_addr[0];
NRF_RADIO->BASE0 = (m_params.rf_addr[1] << 24 | m_params.rf_addr[2] << 16 | m_serial_number_for_radio_address_hi_bits << 8 | m_serial_number_for_radio_address_lo_bits);
NRF_RADIO->TXADDRESS = 0;
NRF_RADIO->RXADDRESSES = (1 << 0);
NRF_RADIO->FREQUENCY = m_params.rf_chn;
NRF_RADIO->TXPOWER = RADIO_TXPOWER_TXPOWER_Pos4dBm << RADIO_TXPOWER_TXPOWER_Pos;
NRF_RADIO->EVENTS_END = 0;
NRF_RADIO->INTENCLR = 0xFFFFFFFF;
NRF_RADIO->INTENSET = RADIO_INTENSET_END_Msk | RADIO_INTENSET_ADDRESS_Msk;
NVIC_EnableIRQ(RADIO_IRQn);
}
sync_pkt_t is defined as:
typedef PACKED_STRUCT
{
uint32_t timer_val;
} sync_pkt_t;
m_params.rf_addr is defined as:
uint8_t rf_address[5] = { 0xDE, 0xAD, 0xBE, < a byte from 0-255 >, < a byte from 0-255 > };
Here are the questions we need to answer for the Olympic committee:
1. Tunable Frequency Range(MHz)
- From:
- To:
- Channel Spacing(Tuning Step):
2. Preferred Center Frequency(Tx)[MHz]
- Preferred Center Fre quency:
- Occupied Bandwidth for Each Device:
3. Preferred Center Frequency(Rx)[MHz]
- Preferred Center Frequency:
- Occupied Bandwidth for Each Device:
4. Modulation Mode:
5. Maximum Power(EIRP,dBm):
Thank you for any assistance.
Tim