Author Topic: nRF24L01  (Read 31477 times)

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
nRF24L01
« on: April 24, 2014, 04:39:55 pm »
Всем салют!
Решил вот открыть тему для всех желающих поработать с трансивером nRF24L01(+) на наших cubieboard1/2/3.

Имеется рабочая, портированная под cubiebord'ы библиотека RF24 в git'e: https://github.com/bearpawmaxim/librf24-sunxi

Библиотека "мультиплатформенна", т.е. может работать как на sun4i (a10), так и на sun7i (a20).

Для сборки библиотеки для a10 пишем
Code: [Select]
make librf24-sun4i, для a20, соответственно
Code: [Select]
make librf24-sun7i
Далее, либо устанавливаем либу коммандой
Code: [Select]
sudo make install, либо идем в папку и запускаем комманду make для сборки тестов.
« Last Edit: May 16, 2014, 01:30:26 pm by bearpaw »

Offline Раджа

  • Sr. Member
  • ****
  • Posts: 438
  • Karma: +6/-2
  • Разбираюсь в чем попало
    • View Profile
Re: nRF24L01
« Reply #1 on: April 25, 2014, 12:46:38 am »
А вот эти все параметры в хидер типа config.h нельзя перенести?
Заткнись и смотри аниме!

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #2 on: April 25, 2014, 12:51:50 am »
А вот эти все параметры в хидер типа config.h нельзя перенести?

Какие все параметры?  :)

Offline Раджа

  • Sr. Member
  • ****
  • Posts: 438
  • Karma: +6/-2
  • Разбираюсь в чем попало
    • View Profile
Re: nRF24L01
« Reply #3 on: April 25, 2014, 03:27:58 am »
Quote
, где SUNXI_GPB(16) - задание пина CE,
        SUNXI_GPB(17) - задание пина CSN
        "/dev/spidev2.0" - задание spi-девайса, доступного в папке /dev

Вот это вот всё.
Заткнись и смотри аниме!

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #4 on: April 25, 2014, 03:38:37 am »
Quote
, где SUNXI_GPB(16) - задание пина CE,
        SUNXI_GPB(17) - задание пина CSN
        "/dev/spidev2.0" - задание spi-девайса, доступного в папке /dev

Вот это вот всё.

ИМХО, ради трёх параметров городить отдельный хидер нецелесообразно

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: nRF24L01
« Reply #5 on: May 07, 2014, 02:03:43 pm »
To Mochalov_da:
Поправьте у себя в библиотеке файл spi.cpp:
вместо
Code: [Select]
this->mode = 0;добавить
Code: [Select]
this->mode = 0 | SPI_LOOP;Пробуйте..
ИМХО: решать проблему кардинально - дофига в ядре править.
(Внимание ! Только при использовании spi-sunxi.c драйвера. Не spi-sun7i.c !)
« Last Edit: May 07, 2014, 02:46:56 pm by UnКаЙF »

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #6 on: May 07, 2014, 02:25:01 pm »
To Mochalov_da:
Поправьте у себя в библиотеке файл spi.cpp:
вместо
Code: [Select]
this->mode = 0;добавить
Code: [Select]
this->mode = 0 | SPI_LOOP;Пробуйте..
ИМХО: решать проблему кардинально - дофига в ядре править.

Нет уж, при выставлении свойства SPI_LOOP матерится про invalid argument.
А так то трансивер уже работает.

Сейчас думаю относительно протокола общения со слейв-девайсами - несколькими датчиками температуры/давления/влажности.

Отправлено с моего GT-I9100 через Tapatalk


Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: nRF24L01
« Reply #7 on: May 07, 2014, 02:40:28 pm »
Да. В spi-sun7i.c этот бит запрещен, а в spi-sunxi.c - нет. Думал, может, можно вставить волшебный #ifdef в библиотеку, для определения текущей модели SoC, но так просто оно не далось. Нужно делать вызов в runtime для определения версии драйвера, - короче усложнять.

По протоколам для nrf24 - интересно, - есть ли что-то общепринятое для организации сети ?
Каждый раз своё городить неохота.
« Last Edit: May 07, 2014, 02:43:59 pm by UnКаЙF »

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #8 on: May 07, 2014, 03:02:36 pm »
Да. В spi-sun7i.c этот бит запрещен, а в spi-sunxi.c - нет. Думал, может, можно вставить волшебный #ifdef в библиотеку, для определения текущей модели SoC, но так просто оно не далось. Нужно делать вызов в runtime для определения версии драйвера, - короче усложнять.

По протоколам для nrf24 - интересно, - есть ли что-то общепринятое для организации сети ?
Каждый раз своё городить неохота.

Я думаю, что определение железа в build time реализовать можно и нужно. Обязательно этим займусь.

По протоколам. Пока удалось нарыть некую RF24Network, которая, в свою очередь, использует RF24.
https://github.com/maniacbug/RF24Network

Отправлено с моего GT-I9100 через Tapatalk


Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: nRF24L01
« Reply #9 on: May 09, 2014, 03:19:18 pm »
Так. Запустил тест с библиотекой:
Code: [Select]
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xf0f0f0f0e1 0xf0f0f0f0d2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xf0f0f0f0e1
RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x27
CONFIG = 0x0f
DYNPD/FEATURE = 0x3f 0x04
Data Rate = 250KBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_HIGH
Now sending length 4...Failed, response timed out.
Пока подключил только один модуль. Буду думать как запустить тесты в 2 разных потоках с доступом к двум модулям по одному SPI.  ;D

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #10 on: May 09, 2014, 03:45:58 pm »
Так. Запустил тест с библиотекой:
Code: [Select]
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xf0f0f0f0e1 0xf0f0f0f0d2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xf0f0f0f0e1
RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x27
CONFIG = 0x0f
DYNPD/FEATURE = 0x3f 0x04
Data Rate = 250KBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_HIGH
Now sending length 4...Failed, response timed out.
Пока подключил только один модуль. Буду думать как запустить тесты в 2 разных потоках с доступом к двум модулям по одному SPI.  ;D


Возьмите новую версию библиотеки. Немного причесал код (на сколько хватило времени)

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: nRF24L01
« Reply #11 on: May 09, 2014, 03:56:32 pm »
Спасибо.  :)
По первым очучениям - тест слишком жрет процессор. Слишком частый  поллинг.

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #12 on: May 09, 2014, 04:15:50 pm »
Спасибо.  :)
По первым очучениям - тест слишком жрет процессор. Слишком частый  поллинг.

Да ну, "слишком" такой тест от двуядерного cpu особо много не отожрет... :)
А по хорошему, надо настраивать пин irq модуля и юзать его.

Кстати, не пробовал ли кто использовать eint-capable пины A20? Интересует, появляется-ли файл eint в sysfs?

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: nRF24L01
« Reply #13 on: May 09, 2014, 11:38:10 pm »
Судя по тому что читал, толку от юзерспейсных прерываний немного. Асинхронно обработчик не может быть вызван, т.е. прога всё равно не узнает о прерывании. пока не получит свой квант времени. Уж лучше поллить, но с умом. Всё имхо.

Offline bearpaw

  • Jr. Member
  • **
  • Posts: 72
  • Karma: +7/-0
    • View Profile
Re: nRF24L01
« Reply #14 on: May 10, 2014, 03:11:14 pm »
Судя по тому что читал, толку от юзерспейсных прерываний немного. Асинхронно обработчик не может быть вызван, т.е. прога всё равно не узнает о прерывании. пока не получит свой квант времени. Уж лучше поллить, но с умом. Всё имхо.

А что значит "поллить, но с умом" ? :)
Избранная мною обертка над RF24 (RF24Network) просит вызывать ф-цию приема/передачи раз в секунду. Так что, ИМХО, такая ситуация с прерыванием мне не критична.