When one host and one device,the through can be 16KBps。But,when one host and two device ,the Max throughput is only 6KBps。Can you tell me Why ?????And Can you tell me the Max throughput you test??
When one host and one device,the through can be 16KBps。But,when one host and two device ,the Max throughput is only 6KBps。Can you tell me Why ?????And Can you tell me the Max throughput you test??
Hi Davy,
Tests from our developers showed the max throughput (with only one device) can get up to 213kbps. We need to see your timeslot and channel configuration to find why you only get 128kbps.
When you have 2 devices, there are chances that the 2 devices transmit at the same timeslot and interfere. You may want to define different channels for each of them, so they won't collide.
I don't understand why you use timeslot period on the host = 2 * timeslot on the device. It should be the opposite. The time between 2 packet on the device should be double the number on the host so that we can skip those channels that we don't configure.
Here is the code I used in my test, it work pretty well: On the host:
static uint8_t channel_table[6]={4, 25, 42, 63, 77,33};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_HOST);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,6);
GAZELLE_ERROR_CODE_CHECK(result_value);
On device one:
static uint8_t channel_table[5]={4,42, 77};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_DEVICE);
GAZELLE_ERROR_CODE_CHECK(result_value);
// Attempt sending every packet up to MAX_TX_ATTEMPTS times.
result_value = nrf_gzll_set_max_tx_attempts(MAX_TX_ATTEMPTS);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_timeslots_per_channel(4);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,3);
GAZELLE_ERROR_CODE_CHECK(result_value);
On device two:
static uint8_t channel_table[5]={25,63, 33};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_DEVICE);
GAZELLE_ERROR_CODE_CHECK(result_value);
// Attempt sending every packet up to MAX_TX_ATTEMPTS times.
result_value = nrf_gzll_set_max_tx_attempts(MAX_TX_ATTEMPTS);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_timeslots_per_channel(4);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,3);
GAZELLE_ERROR_CODE_CHECK(result_value);
Make sure if you use timeslot period = 600 you need to use 2Mbps.
I don't understand why you use timeslot period on the host = 2 * timeslot on the device. It should be the opposite. The time between 2 packet on the device should be double the number on the host so that we can skip those channels that we don't configure.
Here is the code I used in my test, it work pretty well: On the host:
static uint8_t channel_table[6]={4, 25, 42, 63, 77,33};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_HOST);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,6);
GAZELLE_ERROR_CODE_CHECK(result_value);
On device one:
static uint8_t channel_table[5]={4,42, 77};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_DEVICE);
GAZELLE_ERROR_CODE_CHECK(result_value);
// Attempt sending every packet up to MAX_TX_ATTEMPTS times.
result_value = nrf_gzll_set_max_tx_attempts(MAX_TX_ATTEMPTS);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_timeslots_per_channel(4);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,3);
GAZELLE_ERROR_CODE_CHECK(result_value);
On device two:
static uint8_t channel_table[5]={25,63, 33};
// Initialize Gazell.
bool result_value = nrf_gzll_init(NRF_GZLL_MODE_DEVICE);
GAZELLE_ERROR_CODE_CHECK(result_value);
// Attempt sending every packet up to MAX_TX_ATTEMPTS times.
result_value = nrf_gzll_set_max_tx_attempts(MAX_TX_ATTEMPTS);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_timeslots_per_channel(4);
GAZELLE_ERROR_CODE_CHECK(result_value);
result_value = nrf_gzll_set_channel_table(channel_table,3);
GAZELLE_ERROR_CODE_CHECK(result_value);
Make sure if you use timeslot period = 600 you need to use 2Mbps.