I'm looking to maximize the throughput using Gazelle on the nRF51.
Assuming zero retransmissions, I believe the theoretical max should be (1/TimeslotPeriod)*PayloadSize which would be 35.5kBps (284kbps) for my current settings.
Setup:
- One nRF51 Dongle as Device
- One nRF51 Dongle as Host
- SDK 8.1
- Very Close Range (RSSI ~ -51dBm)
Radio Parameters:
- Data Rate = 1Mbps
- Timeslot period = 900uS
- Sync Lifetime = 40 timeslots
- Packet Size = 32 bytes
- Timeslots per Channel (see below)
- 15 channels randomly generated per FCC 15.427 requirements
- Ch Selection Policy = USE_CURRENT
Transmit Code:
while(nrf_gzll_ok_to_add_packet_to_tx_fifo(PipeNum) && buf->getCount() > 0){
TxCount = buf->getCount();
PayloadLen_Tx = ( TxCount > NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH )?NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH:TxCount;
buf->pop( NRF_TxBuf, PayloadLen_Tx); // Move the Tx bytes to byte array
result = nrf_gzll_add_packet_to_tx_fifo( this->PipeNum, NRF_TxBuf, PayloadLen_Tx);
if(result == false){
TxErrCnt++;
}
Tx_ErrCode = nrf_gzll_get_error_code();
nrf_gzll_reset_error_code();
}
Results:
My throughput seems to be dependent on number of timeslots per channel. Here are my results:
- 5 slots/ch -> 7.2 kBps (57.6 kbps)
- 4 slots/ch -> 9.0 kBps (72.0 kbps)
- 3 slots/ch -> 11.2 kBps (89.6 kbps) *bounces between 10.5 and 11.7 kBps
- 2 slots/ch -> 11.7 kBps (93.6 kbps) *Looses Sync periodically
- 1 slots/ch -> Not Stable
Is there anything I can do to improve throughput?
Thanks!