Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SX127x LoRa
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
R_vlad
Странно ведет себя в режиме 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
Что-то совсем запутался с этой Лорой. Хотя вроде не 1-й трансивер осваиваю. Может кто подскажет логику работы прерываний. В регистре RegIrqFlagsMask включаются прерывания которые необходимо отслеживать, установкой соотв. флагов =1? В регистре RegIrqFlags проверяем наличие разрешенных событий?

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

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

При этом наблюдаю в регистре RegModemStat флаг "RX on-going" =1. Но вообще этот флаг всегда почему то =1. Может быть он инверсный? Помогите понять что не так.
Дмитрий Ветра
Цитата(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
x893
Здесь не смотрели ?
https://github.com/Lora-net/LoRaMac-node
R_vlad
C прерываниями разобрался спасибо за ответ. Пробую запустить прием в непрерывном режиме RXCONT с отключенным Header (ImplicitHeaderModeOn =1) и с отключенной CRC. Трансивер в STDBY не переходит, все время находится в режиме RXCONT (как и написано в пдф для RXCONT). При чтении буфера вижу что принято столько байт сколько указано в PayloadLength (принимает кашу, следующие байты в буфере не изменяются).

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

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

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

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


Да, не сказал, что работаю с RXSINGLE! laughing.gif
R_vlad
Дмитрий, а не могли бы вы показать что грузите в рабочие регистры при приеме. И так вроде бы все ясно, но все же сравнить хочется. Есть подозрение что проблема с моим железом.
Дмитрий Ветра
Цитата(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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.