Перейти к содержанию

Странность в работе модуля nRF24L01


Рекомендуемые сообщения

Всем привет

Столкнулся со странным поведением модуля: когда посылаю ему байт, он генерирует прерывание на линии IRQ, в регистре STATUS (0x07) выставляет байт RX_DR (байт принят), но при этом все три байта RX_P_NO == 1 (ничего не принято), очередь FIFO пуста (при попытке считать модуль посылает в SPI 0x00), в регистре FIFO_STATUS (0x17) байт RX_EMPTY выставлен в единичку. То есть прерывание срабатывает, а самого байта как будто и не было. Никто с таким не сталкивался?

В настройках отправка без подтверждения и без CRC

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Сам разобрался. Оказалось, мало просто включить приёмник и разрешить приём на нужных каналах, необходимо ещё в регистрах 0x11-0x16 задать длину принимаемого пакета для, соответственно, каналов 0-5. Если в регистре записан 0, то приёмник работать будет, будет генерировать прерывание IRQ по приёму, но сами данные принимать не будет. Если что - вот непричёсанная инициализация:


void Init_nRF24L01(void)
{
  Write_nRF24L01_register(0x11, 1);               // data length
  Write_nRF24L01_register(0x01, 0x00);            // CRC disable
  Write_nRF24L01_register(0x02, 0x07);            // All RX channels
  Write_nRF24L01_register(0x04, 0x00);            // Auto retry disable
  Write_nRF24L01_register(0x05, 0x02);            // Radio channel
  Write_nRF24L01_register(0x06, 0x08);            // Speed, power
  Write_nRF24L01_register(0x11, 0x01);            // Channel 0 data length
  Write_nRF24L01_register(0x12, 0x01);            // Channel 1 data length
  Write_nRF24L01_register(0x13, 0x01);            // Channel 2 data length
  Write_nRF24L01_register(0x14, 0x01);            // Channel 3 data length
  Write_nRF24L01_register(0x15, 0x01);            // Channel 4 data length
  Write_nRF24L01_register(0x16, 0x01);            // Channel 5 data length
  Write_nRF24L01_register(0x1D, 0x01);            // Nack enable
  Write_nRF24L01_5b_register(0x0A, master_addr);  // Channel 0 addr
  Write_nRF24L01_5b_register(0x0B, slave_addr);   // Channel 1 addr
  Write_nRF24L01_5b_register(0x10, master_addr);  // Remote addr
  Write_nRF24L01_register(0x00, 0b00000010);      // config. Power up, mode: transmitter
  Delay_ms(2);
  Write_nRF24L01_register(0x00, 0b00000011);      // config. Power up, mode: receiver
  CE_ON();
  Delay_ms(4);
}

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...