реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SX127x LoRa
R_vlad
сообщение Dec 30 2014, 13:51
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 30-12-14
Пользователь №: 84 373



Странно ведет себя в режиме LoRa при приеме трансивер SX1278. Примерно каждые 100 мс происходит прерывание как будто принят сигнал, хотя я ничего не передаю. В результате чтения буфера, показывает что принято кол-во байт указанное в параметре RegPayloadLength (адрес 0x22). Читаешь принятые данные, там "каша". Пытаюсь передать свой сигнал (16 байт), передача идет (частотомер показывает наличие ожидаемой несущей). Приема ожидаемых данных нет. Что неправильно делаю? Аппаратный подсчет CRC отключен.

Данные загруженные в трансивер
; 0 1 2 3 4 5 6 7 8 9 A B С D E F
.byte 0x00,0x88,0x00,0x00,0x00,0x00,F_U, F_H ,F_L, 0xFF,0x0c,0x2b,0x23,0x00,0x80,0x00 ; 0x0u
.byte 0x00,0xbf,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x90,0x01 ; 0x1u
.byte 0x00,0x20,16 ,22 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 0x2u
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 0x3u
.byte 0x00,0x00,0x00 ; 0x4u (40-42)

Сообщение отредактировал R_vlad - Dec 30 2014, 13:54
Go to the top of the page
 
+Quote Post
R_vlad
сообщение Jan 13 2015, 06:52
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 30-12-14
Пользователь №: 84 373



Что-то совсем запутался с этой Лорой. Хотя вроде не 1-й трансивер осваиваю. Может кто подскажет логику работы прерываний. В регистре RegIrqFlagsMask включаются прерывания которые необходимо отслеживать, установкой соотв. флагов =1? В регистре RegIrqFlags проверяем наличие разрешенных событий?

Пытаюсь ловить флаг RxDone. Наблюдаю следующую картину, если RegIrqFlagsMask =0 (все флаги сброшены), то происходит прерывание RxDone с минимальным ожидаемым периодом приема сообщений (как будто в эфире присутствует какой то полезный сигнал - невероятное событие).

Если установить в RegIrqFlagsMask флаг RxDoneMask=1, то прерывание RxDone не производится, даже если передаю сообщение со 2-й платы. Сообщение, вернее "несущая", в эфире есть, контролирую по частотомеру.

При этом наблюдаю в регистре RegModemStat флаг "RX on-going" =1. Но вообще этот флаг всегда почему то =1. Может быть он инверсный? Помогите понять что не так.

Сообщение отредактировал R_vlad - Jan 13 2015, 06:57
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Jan 13 2015, 08:00
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата(R_vlad @ Jan 13 2015, 09:52) *
Что-то совсем запутался с этой Лорой. Хотя вроде не 1-й трансивер осваиваю. Может кто подскажет логику работы прерываний. В регистре RegIrqFlagsMask включаются прерывания которые необходимо отслеживать, установкой соотв. флагов =1? В регистре RegIrqFlags проверяем наличие разрешенных событий?

"1" в маске маскирует запрос на соответствующее прерывание. В регистрах описывающих поведение DIO, необходимо выбрать источник ожидаемого прерывания.
Цитата(R_vlad @ Jan 13 2015, 09:52) *
Пытаюсь ловить флаг RxDone. Наблюдаю следующую картину, если RegIrqFlagsMask =0 (все флаги сброшены), то происходит прерывание RxDone с минимальным ожидаемым периодом приема сообщений (как будто в эфире присутствует какой то полезный сигнал - невероятное событие).

RXDone появляется по завершению приема пакета. Для удобства, можно читать регистр RegIrqFlags, где по битам PayloadCrcError и ValidHeader можно судить о качестве приема пакета.
Следует обратить внимание на бит RxTimeout, сообщающий о ошибке ожидания приема всего пакета, всех его полей. После взведения этого флага, приемник уходит в режим STBY. Потому необходимо постоянно контролировать
состояние регистра RegOpMode. У меня отдельный процесс периодично, раз в 50..100мс "пулит" этот регистр и толкает модем в режим приема.
Цитата(R_vlad @ Jan 13 2015, 09:52) *
Если установить в RegIrqFlagsMask флаг RxDoneMask=1, то прерывание RxDone не производится, даже если передаю сообщение со 2-й платы. Сообщение, вернее "несущая", в эфире есть, контролирую по частотомеру.

Естественно, прерывание замаскировано.
Цитата(R_vlad @ Jan 13 2015, 09:52) *
При этом наблюдаю в регистре RegModemStat флаг "RX on-going" =1. Но вообще этот флаг всегда почему то =1. Может быть он инверсный? Помогите понять что не так.

Надо очень внимательно разобраться с загружаемой конфигурацией. Там много тонкостей. А так, модем в режиме LoRa, великолепно работает santa2.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 13 2015, 10:07
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Здесь не смотрели ?
https://github.com/Lora-net/LoRaMac-node
Go to the top of the page
 
+Quote Post
R_vlad
сообщение Jan 13 2015, 11:14
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 30-12-14
Пользователь №: 84 373



C прерываниями разобрался спасибо за ответ. Пробую запустить прием в непрерывном режиме RXCONT с отключенным Header (ImplicitHeaderModeOn =1) и с отключенной CRC. Трансивер в STDBY не переходит, все время находится в режиме RXCONT (как и написано в пдф для RXCONT). При чтении буфера вижу что принято столько байт сколько указано в PayloadLength (принимает кашу, следующие байты в буфере не изменяются).

Но проблема в том, что принимает мусор. Как будто преамбулу постоянно определяет. Я ничего не передаю. Вообще чип показался достаточно простым. Такое ощущение что ераты не хватает (но это наверное не так).

Буду пробовать в RXSINGLE с Header.
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Jan 13 2015, 13:55
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата(R_vlad @ Jan 13 2015, 14:14) *
C прерываниями разобрался спасибо за ответ. Пробую запустить прием в непрерывном режиме RXCONT с отключенным Header (ImplicitHeaderModeOn =1) и с отключенной CRC. Трансивер в STDBY не переходит, все время находится в режиме RXCONT (как и написано в пдф для RXCONT). При чтении буфера вижу что принято столько байт сколько указано в PayloadLength (принимает кашу, следующие байты в буфере не изменяются).

Но проблема в том, что принимает мусор. Как будто преамбулу постоянно определяет. Я ничего не передаю. Вообще чип показался достаточно простым. Такое ощущение что ераты не хватает (но это наверное не так).

Буду пробовать в RXSINGLE с Header.


Да, не сказал, что работаю с RXSINGLE! laughing.gif
Go to the top of the page
 
+Quote Post
R_vlad
сообщение Jan 16 2015, 13:34
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 30-12-14
Пользователь №: 84 373



Дмитрий, а не могли бы вы показать что грузите в рабочие регистры при приеме. И так вроде бы все ясно, но все же сравнить хочется. Есть подозрение что проблема с моим железом.

Сообщение отредактировал R_vlad - Jan 16 2015, 13:35
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Jan 16 2015, 20:06
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата(R_vlad @ Jan 16 2015, 15:34) *
Дмитрий, а не могли бы вы показать что грузите в рабочие регистры при приеме. И так вроде бы все ясно, но все же сравнить хочется. Есть подозрение что проблема с моим железом.

CODE
;**************************
; ***** CONFIG LoRa *****
;**************************
.db RegOpMode ,RFLR_OPMODE_LONGRANGEMODE_ON | RFLR_OPMODE_ACCESSSHAREDREG_DISABLE | RFLR_OPMODE_FREQMODE_ACCESS_HF | RFLR_OPMODE_SLEEP
.db RegFrfMSB ,0xd9 ;
.db RegFrfMID ,0x3c ;
.db RegFrfLSB ,0xc8 ; Fstep=Fosc/2^19=61.03515625 Hz, Frf=Fstep*Frf(23:0) -> Frf(23:0)=Frf/Fstep 868949700/61.0351562=14236872(0xD93CC8)

.db RegPAConfig ,RFLR_PACONFIG_PASELECT_RFO | 0x7f;RFLR_PACONFIG_PASELECT_RFO | 0x7f

.db RegPARamp ,RFLR_PARAMP_3400_US
.db RegOCP ,RFLR_OCP_OFF | RFLR_OCP_TRIM_240_MA
.db RegLNA ,RFLR_LNA_GAIN_G1 | RFLR_LNA_BOOST_LF_DEFAULT | RFLR_LNA_BOOST_HF_OFF
.db RegFIFOAddrPtr ,0x00 ; SPI interface address pointer in FIFO data buffer.
.db RegFifoTXBaseAddr ,0x80 ; write base address in FIFO data buffer for TX modulator
.db RegFifoRXBaseAddr ,0x00 ; read base address in FIFO data buffer for RX demodulator
.db RegFifoRXCurrentAddr ,0x00 ; Start address (in data buffer) of last packet received
.db RegIrqFlagsMask ,0x00 ;
.db RegIrqFlags ,0x00 ;

.db RegModemConfig1 ,RFLR_MODEMCONFIG1_BW_10_41_KHZ | RFLR_MODEMCONFIG1_CODINGRATE_4_5 | RFLR_MODEMCONFIG1_IMPLICITHEADER_ON
.db RegModemConfig2 ,RFLR_MODEMCONFIG2_SF_7 | RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_OFF | RFLR_MODEMCONFIG2_RXPAYLOADCRC_OFF;ON ;| 0x03
.db RegSymbTimeoutLsb ,0x90 ; TimeOut = SymbTimeout * Ts
.db RegPreambleMsbLora ,0x00 ; Preamble length MSB
.db RegPreambleLsbLora ,0x08 ; Preamble Length LSB
; *** в "явном" режиме устанавливать длинну поля данных для передатчика ***
.db RegPayloadLengthLora ,0x08 ; Payload length in bytes.
.db RegMaxPayloadLength ,0xff ; Maximum payload length
.db RegHopPeriod ,0x00 ; Symbol periods between frequency hops.
.db RegFifoRxByteAddr ,0x00 ; Current value of RX databuffer pointer (address of last byte written by Lora receiver)
.db RegModemConfig3 ,RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_OFF | RFLR_MODEMCONFIG3_AGCAUTO_OFF
;
.db RegDioMapping1 ,RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_00
.db RegDioMapping2 ,RFLR_DIOMAPPING2_DIO4_00 | RFLR_DIOMAPPING2_DIO5_00 | RFLR_DIOMAPPING2_MAP_PREAMBLEDETECT
.db REG_LR_TCXO ,RFLR_TCXO_TCXOINPUT_ON

.db REG_LR_PADAC ,RFLR_PADAC_20DBM_OFF
.db REG_LR_PLL ,RF_PLL_BANDWIDTH_150
;
.db RegAgcRef ,0x1c ; xx/011001,
.db RegAgcThresh1 ,0x0e ; -
.db RegAgcThresh2 ,0x5b ; -
.db RegAgcThresh3 ,0xcc ; -

.db 0xff ,0xff ; eoc


Описывать нет необходимости, все и так ясно rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016