Доброго времени суток!
Помогите разобраться. Несколько дней пытаюсь оживить NRF24LE1. Прошивку делаю сам с помощью вашего SDK. Схема такая: NRF24LE1 выступает в качестве передатчика. В качестве приемника: RaspberryPi + NRF24L01.
Проблема в том, что передатчик зависает на передаче если включено автоквитирование setAutoAck(true) пакетов. То есть, при старте NRF24LE1 с тем кодом, который показан ниже - моргает светодиодом 4 раза, и замолкает.
Как только ставлю setAutoAck(false) - основной цикл работает нормально, светодиод моргает постоянно.
Исходный код передатчика (NRF24LE1):
#define LED GPIO_PIN_ID_P0_0 // пин, к которому подключен светодиод.
#include "libs.h"
#include "nRFLE.c"
unsigned char tx_msg[32];
unsigned char rx_msg[32];
void led_500ms_signal( unsigned int cnt )
{
int i;
for (i=0; i<cnt; i++) {
gpio_pin_val_set(LED);
delay_ms(500);
gpio_pin_val_clear(LED);
delay_ms(500);
}
}
void rf_init()
{
radiobegin();
openAllPipe();
setChannel(1);
setDataRate(2); // 1 - 250кб , 2 - 1 мб , 3 -2 мб.
setAutoAck(true);
//setAutoAck(false);
setCRCLength(2); // 0 - crc off ,1 - 8bit ,2 - 16bit
setPALevel(3) ; // мощность 0..3
}
//====================main========================
void main()
{
int state=0;
unsigned int count=0; //counter for loop
uint8_t st=0,countpause=0,rewers=0; // for key
unsigned long statesend=0,radiosend=0;
// мигаем портом P0_0
gpio_pin_configure(GPIO_PIN_ID_P0_0, // укажем необходимые параметры
GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT |
GPIO_PIN_CONFIG_OPTION_OUTPUT_VAL_CLEAR |
GPIO_PIN_CONFIG_OPTION_PIN_MODE_OUTPUT_BUFFER_NORMAL_DRIVE_STRENGTH);
// Тестовое мигание при запуске -->
#if 1
led_500ms_signal(3);
#endif
//<-- Тестовое мигание при запуске
//инициализация радио-канала
rf_init();
rf_power_up(1);
//main program loop
while(1)
{
led_500ms_signal(1);
rf_set_as_tx();
rf_write_tx_payload((const uint8_t*)&tx_msg, 32, true); //transmit received char over RF
//wait until the packet has been sent or the maximum number of retries has been reached
while(!(rf_irq_pin_active() && rf_irq_tx_ds_active()));
rf_irq_clear_all(); //clear all interrupts in the 24L01
rf_set_as_rx(true); //change the device to an RX to get the character back from the other 24L01
// argument (should be loop maximum - 1) to lengthen or shorten this time frame
rf_read_rx_payload((const uint8_t*)&rx_msg, 32);
rf_irq_clear_all(); //clear interrupts again
}
}
На приемной стороне (RPi) принимаемые пакеты пока тоже не удалось прочитать, но используя пример scanner из библиотеки /RF24 (
tmrh20.github.io/RF24/RPi.html) - несущая на первой посылке детектируется.
Основной вопрос - почему NRF24LE1 замирает если включено квитирование? Пробовал устанавливать разное количество попыток передать пакет и таймауты между попытками - не помогает.
Извините, что сообщение в тему. Более подходящей темы не нашел.