R_vlad 0 30 декабря, 2014 Опубликовано 30 декабря, 2014 (изменено) · Жалоба Странно ведет себя в режиме 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) Изменено 30 декабря, 2014 пользователем R_vlad Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R_vlad 0 13 января, 2015 Опубликовано 13 января, 2015 (изменено) · Жалоба Что-то совсем запутался с этой Лорой. Хотя вроде не 1-й трансивер осваиваю. Может кто подскажет логику работы прерываний. В регистре RegIrqFlagsMask включаются прерывания которые необходимо отслеживать, установкой соотв. флагов =1? В регистре RegIrqFlags проверяем наличие разрешенных событий? Пытаюсь ловить флаг RxDone. Наблюдаю следующую картину, если RegIrqFlagsMask =0 (все флаги сброшены), то происходит прерывание RxDone с минимальным ожидаемым периодом приема сообщений (как будто в эфире присутствует какой то полезный сигнал - невероятное событие). Если установить в RegIrqFlagsMask флаг RxDoneMask=1, то прерывание RxDone не производится, даже если передаю сообщение со 2-й платы. Сообщение, вернее "несущая", в эфире есть, контролирую по частотомеру. При этом наблюдаю в регистре RegModemStat флаг "RX on-going" =1. Но вообще этот флаг всегда почему то =1. Может быть он инверсный? Помогите понять что не так. Изменено 13 января, 2015 пользователем R_vlad Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TORNIS 0 13 января, 2015 Опубликовано 13 января, 2015 · Жалоба Что-то совсем запутался с этой Лорой. Хотя вроде не 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 13 января, 2015 Опубликовано 13 января, 2015 · Жалоба Здесь не смотрели ? https://github.com/Lora-net/LoRaMac-node Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R_vlad 0 13 января, 2015 Опубликовано 13 января, 2015 · Жалоба C прерываниями разобрался спасибо за ответ. Пробую запустить прием в непрерывном режиме RXCONT с отключенным Header (ImplicitHeaderModeOn =1) и с отключенной CRC. Трансивер в STDBY не переходит, все время находится в режиме RXCONT (как и написано в пдф для RXCONT). При чтении буфера вижу что принято столько байт сколько указано в PayloadLength (принимает кашу, следующие байты в буфере не изменяются). Но проблема в том, что принимает мусор. Как будто преамбулу постоянно определяет. Я ничего не передаю. Вообще чип показался достаточно простым. Такое ощущение что ераты не хватает (но это наверное не так). Буду пробовать в RXSINGLE с Header. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TORNIS 0 13 января, 2015 Опубликовано 13 января, 2015 · Жалоба C прерываниями разобрался спасибо за ответ. Пробую запустить прием в непрерывном режиме RXCONT с отключенным Header (ImplicitHeaderModeOn =1) и с отключенной CRC. Трансивер в STDBY не переходит, все время находится в режиме RXCONT (как и написано в пдф для RXCONT). При чтении буфера вижу что принято столько байт сколько указано в PayloadLength (принимает кашу, следующие байты в буфере не изменяются). Но проблема в том, что принимает мусор. Как будто преамбулу постоянно определяет. Я ничего не передаю. Вообще чип показался достаточно простым. Такое ощущение что ераты не хватает (но это наверное не так). Буду пробовать в RXSINGLE с Header. Да, не сказал, что работаю с RXSINGLE! :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R_vlad 0 16 января, 2015 Опубликовано 16 января, 2015 (изменено) · Жалоба Дмитрий, а не могли бы вы показать что грузите в рабочие регистры при приеме. И так вроде бы все ясно, но все же сравнить хочется. Есть подозрение что проблема с моим железом. Изменено 16 января, 2015 пользователем R_vlad Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TORNIS 0 16 января, 2015 Опубликовано 16 января, 2015 · Жалоба Дмитрий, а не могли бы вы показать что грузите в рабочие регистры при приеме. И так вроде бы все ясно, но все же сравнить хочется. Есть подозрение что проблема с моим железом. ;************************** ; ***** 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться