In traditional approach to ESB communication we have many PTX device and one PRX device:
In my application, situation is inverted: I have only one PTX device and many PRX devices:
Each PRX device have implemented Bluetooth and timeslot ESB.
Each PTX device has implemented only ESB protocol, and only transmit data – so the communication is only in one direction. So I did it, and it works very well, but i don't thing is the best way to do it.
PTX device sends payload with no ack:
payload->noack = 1;
And later, send packed on 5 different channels: 4, 25, 42, 63 and 77 channel. For increase the probability of a chance of reaching the frame data to the PRX device I send each frame:
for ( i = 0 ; i < 10 ; i++ )
{
sendEsbDataOnChannelNr1();
wait();
sendEsbDataOnChannelNr2();
wait();
sendEsbDataOnChannelNr3();
wait();
sendEsbDataOnChannelNr4();
wait();
sendEsbDataOnChannelNr5();
wait();
}
In the each PRX device I jumping through RX channel in interval 10ms:
nrf_esb_stop_rx();
nrf_esb_set_rf_channel( frequencyHopingTable[ channelIndex ] );
nrf_esb_start_rx();
channelIndex++;
if ( channelIndex > 4 ) channelIndex = 0;
So my question is:
-
How to choose the best channel for frequency hopping?
-
How to maximize probability to recive frame by PRX device? We have a few variable:
- a total number of frequency hopping channel
- number of burst transfer. Less is better - more energy efficiency. (one burst = transfer data ion each frequency hopping channel )
- time and algorithm between how to jump between RX channel in PRX device? Random? What time between hop?
Mayby there are some books or article about this problems?