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

SX127x LoRa

Странно ведет себя в режиме 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

Поделиться сообщением


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

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

"1" в маске маскирует запрос на соответствующее прерывание. В регистрах описывающих поведение DIO, необходимо выбрать источник ожидаемого прерывания.

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

RXDone появляется по завершению приема пакета. Для удобства, можно читать регистр RegIrqFlags, где по битам PayloadCrcError и ValidHeader можно судить о качестве приема пакета.

Следует обратить внимание на бит RxTimeout, сообщающий о ошибке ожидания приема всего пакета, всех его полей. После взведения этого флага, приемник уходит в режим STBY. Потому необходимо постоянно контролировать

состояние регистра RegOpMode. У меня отдельный процесс периодично, раз в 50..100мс "пулит" этот регистр и толкает модем в режим приема.

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

Естественно, прерывание замаскировано.

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

Надо очень внимательно разобраться с загружаемой конфигурацией. Там много тонкостей. А так, модем в режиме LoRa, великолепно работает :santa2:

 

Поделиться сообщением


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

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

 

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

 

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

Поделиться сообщением


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

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

 

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

 

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

 

Да, не сказал, что работаю с RXSINGLE! :laughing:

Поделиться сообщением


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

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

Изменено пользователем R_vlad

Поделиться сообщением


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

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

;**************************
; ***** 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:

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...