September 20, 2019, 04:37:24 pm

News:

Have you visited the Allwinner Chipset wiki? - http://linux-sunxi.org/


nRF24L01

Started by bearpaw, April 24, 2014, 04:39:55 pm

Previous topic - Next topic

pistoletov

не зависит конечно. посмотрите ветку по spi там как-раз в третьем посте о внесении изменений в структуру в заголовках.  и еще при компиляции исходников смотртие что бы заголовки для А10 были sun4i с этим у меня тоже были ошибки

strange_v

June 12, 2015, 06:08:11 pm #61 Last Edit: June 13, 2015, 01:01:28 am by strange_v
Пытаюсь подключить nRF24L01 к Cubietruck.
ОС: Debian Wheezy (http://www.igorpecovnik.com/2013/12/24/cubietruck-debian-wheezy-sd-card-image/)
Ядро собрано с поддержкой SPI.

script.fex:
[spi2_para]
spi_used = 1
spi_cs_bitmap = 1
spi_cs0 = port:PC19<3><default><default><default>
spi_sclk = port:PC20<3><default><default><default>
spi_mosi = port:PC21<3><default><default><default>
spi_miso = port:PC22<3><default><default><default>

[spi_devices]
spi_dev_num = 1

[spi_board0]
modalias = "spidev"
max_speed_hz = 8000000
bus_num = 2
chip_select = 0
mode = 0
full_duplex = 1
manual_cs = 0

Усройство /dev/spidev2.0 присутствует.

В файле /usr/include/linux/spi/spidev.h нету "__u16           interbyte_usecs", добавил.

./spidev_test:
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

0E 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00

с замкнутыми miso mosi
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D


При запуске  spidev_test -l или другого теста :
can't set spi mode: Invalid argument
Aborted

Подскажите куда копaть?

UnКаЙF

June 13, 2015, 04:38:00 am #62 Last Edit: June 13, 2015, 04:52:00 am by UnКаЙF
Драйвер SPI на А20 не понимает режим -l. Это для A10.
А вот это вот немного напрягает:
Quotespi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

0E 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00
00 00

strange_v

UnКаЙF, 0E появляется только если подключен девайс.

Ок, с spidev_test -l понятно, но arduino_rcv, pingtest, scanner показывать одну и туже ошибку:
can't send spi message: Invalid argument
Aborted

Может я что-то упускаю?

strange_v

Пересобрал драйвера после правки spidev.h и тесты частично заработали (нет ошибки can't send spi message).

Вот что выводит pingtest:
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0x0e0e0e0e0e 0x0e0e0e0e0e
RX_ADDR_P2-5     = 0x0e 0x0e 0x0e 0x0e
TX_ADDR          = 0x0e0e0e0e0e
RX_PW_P0-6       = 0x0e 0x0e 0x0e 0x0e 0x0e 0x0e
EN_AA            = 0x0e
EN_RXADDR        = 0x0e
RF_CH            = 0x0e
RF_SETUP         = 0x0e
CONFIG           = 0x0e
DYNPD/FEATURE    = 0x0e 0x0e
Data Rate        = 2MBPS
Model            = nRF24L01
CRC Length       = 16 bits
PA Power         = PA_HIGH
Now sending length 4...Failed, response timed out.
Now sending length 6...Failed, response timed out.
Now sending length 8...Failed, response timed out.
Now sending length 10...Failed, response timed out.
Now sending length 12...Failed, response timed out.
Now sending length 14...Failed, response timed out.


Так же пробовал arduino_rcv (параллельно залив в arduino правильную прошивку) - нет ответа.
Если выдернуть nRF24L01, pingtest:
Now sending length 8...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 10...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 12...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 14...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 16...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 18...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒


Сами nRF24L01 100% рабочие, проверил на двух arduino.

UnКаЙF

June 15, 2015, 02:14:06 am #65 Last Edit: June 15, 2015, 02:18:13 am by UnКаЙF
Что-то с CE и CSN ?
Где брали исходники библиотеки ? Я, честно говоря, за выложенными  bearpaw  исходниками не слежу давно. Но, я надеюсь, заголовки вы брали sun7i ?

strange_v

UnКаЙF, кажется я уже все библиотеки с треда перепробовал. Заголовки sun7i, да.
Ок, взял либу с поста http://www.cubieforums.com/index.php/topic,2426.msg16442.html#msg16442
почистил остатки прошлых установок, скомпилил, установил.
Поправил script.bin (может здесь что-то не так?)

[spi2_para]
spi_used = 1
spi_cs_bitmap = 1
spi_cs0 = port:PC19<3><default><default><default>
spi_sclk = port:PC20<3><default><default><default>
spi_mosi = port:PC21<3><default><default><default>
spi_miso = port:PC22<3><default><default><default>

... ... ...
[gpio_para]
gpio_used = 1
gpio_num = 8
gpio_pin_1 = port:PH20<1><default><default><1>
gpio_pin_2 = port:PH10<0><default><default><0>
gpio_pin_3 = port:PB18<1><default><default><1>
gpio_pin_4 = port:PB19<1><default><default><1>
gpio_pin_5 = port:PG2<0><default><default><default>
gpio_pin_6 = port:PG4<1><default><default><1>
gpio_pin_68 = port:PH18<0><default><default><0>
gpio_pin_69 = port:PH24<0><default><default><0>


Перезагрузил, модуль подключен на CN9:
GND - 1 (GND)
VCC - 2 (VCC-3V)
CE - 25 (PB19)
CSN - 23 (PB18)
SCK - 7 (PC20)
MOSI - 6 (PC21)
MISO - 8 (PC22)
IRQ - none

В тестах RF24 radio(SUNXI_GPB(19), "/dev/spidev2.0");
Проверка (принимает мосор):
./pingtest
STATUS           = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1     = 0xffffffffff 0xffffffffff
RX_ADDR_P2-5     = 0xff 0xff 0xff 0xff
TX_ADDR          = 0xffffffffff
RX_PW_P0-6       = 0xff 0xff 0xff 0xff 0xff 0xff
EN_AA            = 0xff
EN_RXADDR        = 0xff
RF_CH            = 0xff
RF_SETUP         = 0xff
CONFIG           = 0xff
DYNPD/FEATURE    = 0xff 0xff
Data Rate        = 1MBPS
Model            = nRF24L01
CRC Length       = 16 bits
PA Power         = PA_HIGH
Now sending length 4...Got response size=0 value=
Now sending length 6...Got response size=0 value=
Now sending length 8...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 10...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 12...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 14...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 16...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 18...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Now sending length 20...Got response size=255 value=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒


QuoteCE подтяните к GND, а CSN к +3.3V через резисторы 10-47к. Пин для СSN используйте не тот, который аппаратно использует SPI-контроллер. Также, проверьте используя тестер и sys/class/gpio интерфейс работают ли выбранные вами пины на выход, т.е. 0,1 и померить.

Никакого эффекта.

Нужно ли инициализировать пины? in/out? (for A in 1 2 3 4 5 6; do echo "$A" > /sys/class/gpio/unexport ; done)
Если инициализировать на out и передавать 0/1 - пин работает правильно (измерял тестером)

UnКаЙF

June 15, 2015, 04:59:54 pm #67 Last Edit: June 15, 2015, 05:27:17 pm by UnКаЙF
Ну, во первых, разъем не CN9, а CN8. Может описка ?
Раз уж вы взяли библиотеку из моего поста, то она требует аппаратного CSN - вывод 5 CN8, а у вас он на 23 (PB18).
Совсем по-правильному будет:
spi_cs0 = port:PC19<3><default><default><1>
spi_sclk = port:PC20<3><default><default><0>
spi_mosi = port:PC21<3><default><default><0>
spi_miso = port:PC22<3><1><default><default>

В секции gpio_para пин который на CE идёт вписывать необязательно. Ядро ложит на инициализацию пинов пользовательской секции до момента экспорта.  Так что от включения питания до момента экспорта пин болтается в Hi-Z. Именно поэтому советую резистор. А вот библиотека использует прямой доступ к регистрам GPIO - ей экспорт и  script.bin не нужен.
И ещё - gpio_pin_n : номера n должны подряд идти, без разрывов, а у вас 6 потом 68. Это так, к делу не относится.

strange_v

UnКаЙF, спасибо, действительно опечатка, CN8.
Переключил CSN пин на 5 CN8, подправил script.bin и теперь pingtext: Failed, response timed out.

Завтра еще раз проверю модули на arduino, может спалил нечаянно.

UnКаЙF

В верхней части пингтеста что в регистрах ?

strange_v

Quote./pingtest
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 0xff 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.
Now sending length 6...Failed, response timed out.
Now sending length 8...Failed, response timed out.
Now sending length 10...Failed, response timed out.
Now sending length 12...Failed, response timed out.

UnКаЙF

С обменом по SPI всё ОК. Смотрите совпадение частот, битрейта, настройку адресов приёмников/передатчиков на модулях.

pistoletov

Рекомендую еще конденсатор на ножки питания повесить.  Я вешал электролит на 47 кажись. Когда баловался с парой ардуинок модули магически "ожили".

strange_v

UnКаЙF, большое спасибо! Заработало.
Утилизирует одно ядро процессора, иногда губит данные, но работает.

UnКаЙF

QuoteУтилизирует одно ядро процессора

В смысле ? Жрёт что-ли ?
Quoteиногда губит данные

Попробуйте снизить скорость SPI. В файле RF24.cpp :
void RF24::begin(void)
{
  spi = new SPI(_spidev, 12000000, 8);

12000000 - это 12 мегагерц. Пробуйте меньшие значения. Мне помогало 8.
А если серьёзно, то софт общающийся по радиоканалу всегда должен предусматривать возможность искажения/потери и приёма не своих данных.  :) Несмотря на аппаратное CRC радиомодуля, он иногда принимает пакеты "из шума" гетеродина.