Nol.A SDK Library
24.11.0
For IoT System Software Development
|
저전력 multi-band LoRaTM 및 FSK 무선 통신을 지원하는 Semtech의 SX1301 radio concentrator 을 지원합니다. More...
#include <SX1301Chip.hpp>
Public Types | |
enum | Radio_t { RADIO_TYPE_NONE = 0 , RADIO_TYPE_SX1255 = 1 , RADIO_TYPE_SX1257 = 2 } |
enum | { NUM_RF_CHAIN = 2 , NUM_IF_CHAIN = 10 , NUM_TX_GAIN = 16 , IF_INDEX_LORA_STANDALONE = 8 , IF_INDEX_FSK_STANDALONE = 9 } |
enum | { BW_UNDEFINED = 0 , BW_500kHz = 1 , BW_250kHz = 2 , BW_125kHz = 3 , BW_62_5kHz = 4 , BW_31_2kHz = 5 , BW_15_6kHz = 6 , BW_7_8kHz = 7 } |
enum | { DR_UNDEFINED = 0 , DR_LORA_SF7 = (1 << 1) , DR_LORA_SF8 = (1 << 2) , DR_LORA_SF9 = (1 << 3) , DR_LORA_SF10 = (1 << 4) , DR_LORA_SF11 = (1 << 5) , DR_LORA_SF12 = (1 << 6) , DR_LORA_MULTI = 0x7E , DR_FSK_MIN = 500 , DR_FSK_MAX = 250000 } |
enum | { ERROR_IF_FREQ_TOO_HIGH = -100 , ERROR_IF_FREQ_TOO_LOW = -101 , ERROR_IF_BANDWIDTH_NOT_SUPPORTED = -102 , ERROR_IF_DATARATE_NOT_SUPPORTED = -103 } |
enum | { ERROR_TX_GAIN_DIG = -100 , ERROR_TX_GAIN_DAC = -101 , ERROR_TX_GAIN_MIX = -102 , ERROR_TX_GAIN_PA = -103 } |
enum | { MCU_AGC_FW_BYTE = 8192 , MCU_ARB_FW_BYTE = 8192 } |
Public Member Functions | |
SX1301Chip (SPI &s, int8_t pinCsn, int8_t pinReset, uint8_t clockSource) | |
error_t | setSyncword (uint8_t value) |
Syncword를 설정합니다. More... | |
error_t | setDataRate (Radio::LoRaSF_t sf) |
기본으로 사용할 LoRa spreading factor (SF)를 설정합니다. More... | |
error_t | setCodingRate (Radio::LoRaCR_t cr) |
기본으로 사용할 LoRa coding rate (CR)를 설정합니다. More... | |
error_t | setBandwidth (Radio::LoRaBW_t bw) |
기본으로 사용할 LoRa bandwidth (BW)를 설정합니다. More... | |
error_t | configureRf (uint8_t index, bool enable, bool txEnable, uint32_t freqHz, float rssiOffset=-166.0, Radio_t type=RADIO_TYPE_SX1257, uint32_t txNotchFreqHz=0) |
RF interface를 설정합니다. More... | |
error_t | configureRxIf (uint8_t index, uint8_t rfChainIndex, bool enable, int32_t rFreqHz, uint8_t bandwidth=BW_UNDEFINED, uint32_t datarate=DR_UNDEFINED, uint8_t fskSyncwordSize=3, uint64_t fskSyncword=0xC194C1) |
Rx interface를 설정합니다. More... | |
uint32_t | getChannel (uint8_t index) |
Rx interface 별 설정된 주파수를 가져옵니다. More... | |
error_t | configureTxGain (uint8_t index, uint8_t digGain, uint8_t paGain, uint8_t dacGain, uint8_t mixGain, int8_t dBm) |
Tx Gain look up table을 설정합니다. More... | |
error_t | begin () |
SX1301 의 동작을 시작합니다. | |
void | end () |
SX1301 의 동작을 종료합니다. | |
error_t | readFrame (RadioPacket *pkt) |
수신 버퍼에서 프레임을 읽습니다. More... | |
bool | bufferIsEmpty () |
void | flushBuffer () |
void | sleep () |
void | wakeup () |
error_t | transmit (RadioPacket *pkt) |
error_t | transmit (RadioPacket *frame, uint64_t txTimestamp) |
bool | cca () override |
채널이 혼잡한지 아닌지 검사합니다. More... | |
void | setTxPower (int8_t dBm) |
송신 출력을 설정합니다. More... | |
int8_t | getTxPower () |
현재 설정된 송신 출력을 반환합니다. More... | |
void | setChannel (uint32_t channel) |
채널을 설정합니다. | |
uint32_t | getChannel () |
현재 설정된 채널을 반환합니다. | |
Public Member Functions inherited from PacketRadioChip | |
void | setCcaThreshold (int16_t dBthreshold) |
virtual int64_t | getDeviceTimestamp () |
장치 내부의 timestamp 값을 읽습니다. More... | |
Static Public Attributes | |
static const uint8_t | firmwareAgc [MCU_AGC_FW_BYTE] |
static const uint8_t | firmwareArb [MCU_ARB_FW_BYTE] |
static const uint8_t | firmwareCal [MCU_AGC_FW_BYTE] |
Protected Attributes | |
SPI * | spi |
int8_t | pinCsn |
int8_t | pinReset |
int8_t | regpage |
RadioPacket * | txFrameToSend |
RadioPacket * | txFrameSent |
uint8_t | lastRxData [255+16] |
uint8_t | lastRxDataLen |
struct { | |
bool enabled:1 | |
bool txEnabled:1 | |
uint32_t freqHz | |
float rssiOffset | |
uint32_t txNotchFreqHz | |
Radio_t type | |
} | rfChain [NUM_RF_CHAIN] |
struct { | |
bool enabled | |
uint8_t rfChain | |
int32_t rFreqHz | |
union { | |
struct { | |
uint8_t sfMask | |
} loraMulti | |
struct { | |
uint8_t bw | |
uint8_t sf | |
bool rxPpmOffset | |
} loraStandalone | |
struct { | |
uint8_t bw | |
uint32_t dr | |
uint8_t syncwordSize | |
uint64_t syncword | |
} fskStandalone | |
} conf | |
} | ifChain [NUM_IF_CHAIN] |
int8_t | calOffsetAI [8] |
int8_t | calOffsetAQ [8] |
int8_t | calOffsetBI [8] |
int8_t | calOffsetBQ [8] |
Additional Inherited Members | |
Public Attributes inherited from PacketRadioChip | |
void(* | onRxStarted )(void *, GPIOInterruptInfo_t *) |
수신이 시작될 때 호출될 콜백함수 포인터 More... | |
void * | ctxOnRxStarted |
onRxStarted 가 호출될 때 함께 전달될 context | |
void(* | onRxDone )(void *, GPIOInterruptInfo_t *) |
수신이 완료될 때 호출될 콜백함수 포인터 More... | |
void * | ctxOnRxDone |
onRxDone 이 호출될 때 함께 전달될 context | |
void(* | onTxDone )(void *, bool, GPIOInterruptInfo_t *) |
transmit() 후, 송신이 완료될 때 호출될 콜백함수 포인터 More... | |
void * | ctxOnTxDone |
onTxDone 이 호출될 때 함께 전달될 context | |
void(* | onChannelBusy )(void *, GPIOInterruptInfo_t *) |
cca() 시 채널이 혼잡할 때 호출될 콜백함수 포인터 More... | |
void * | ctxOnChannelBusy |
onChannelBusy 가 호출될 때 함께 전달될 context | |
int16_t | dBccaThreshold = -65 |
cca() 시 채널이 혼잡하다고 판단하기 위한 에너지 레벨을 설정합니다. (단위: dB, 기본값: -65) | |
저전력 multi-band LoRaTM 및 FSK 무선 통신을 지원하는 Semtech의 SX1301 radio concentrator 을 지원합니다.
SX1301에서는 8개의 multi datarate LoRaTM interface, 1개의 LoRaTM standalone interface, 그리고 1개의 FSK standalone interface 를 지원합니다. 이를 설정하기 위해서는 SX1301Chip::configureRf(), 및 SX1301Chip::configureRxIf() 를 사용합니다.
위 예제는 SX1301에 SX1257 2개가 연결된 하드웨어 구성에서 사용할 수 있으며, 다음과 같이 수신 설정이 됩니다.
Interface # | Interface Type | Listening frequency | Rx bandwidth |
---|---|---|---|
0 | Multi datarate LoRaTM interface | 921.9 MHz | 125 kHz |
1 | Multi datarate LoRaTM interface | 922.1 MHz | 125 kHz |
2 | Multi datarate LoRaTM interface | 922.3 MHz | 125 kHz |
3 | Multi datarate LoRaTM interface | 922.5 MHz | 125 kHz |
4 | Multi datarate LoRaTM interface | 922.7 MHz | 125 kHz |
5 | Multi datarate LoRaTM interface | 922.9 MHz | 125 kHz |
6 | Multi datarate LoRaTM interface | 923.1 MHz | 125 kHz |
7 | Multi datarate LoRaTM interface | 923.3 MHz | 125 kHz |
8 | LoRaTM standalone interface | 923.3 MHz | 250 kHz |
9 | FSK standalone interface | 921.7 MHz | 250 kHz |
패킷 수신시, PacketRadioChip::onRxDone() 에서 지정한 콜백함수가 호출됩니다. 콜백함수에서 PacketRadioChip::readFrame() 을 통해 수신한 패킷을 읽을 수 있습니다.
SX1301에서 패킷을 송신하기 위해서는 PacketRadioChip::transmit() 을 이용하되, 인자 RadioPacket 에 modulation 등 원하는 파라미터를 설정해야 합니다.
anonymous enum |
anonymous enum |
anonymous enum |
enum SX1301Chip::Radio_t |
|
overridevirtual |
채널이 혼잡한지 아닌지 검사합니다.
채널이 혼잡하다고 감지되는 순간, onChannelBusy 가 가리키는 콜백함수가 호출됩니다.
Implements PacketRadioChip.
error_t SX1301Chip::configureRf | ( | uint8_t | index, |
bool | enable, | ||
bool | txEnable, | ||
uint32_t | freqHz, | ||
float | rssiOffset = -166.0 , |
||
Radio_t | type = RADIO_TYPE_SX1257 , |
||
uint32_t | txNotchFreqHz = 0 |
||
) |
RF interface를 설정합니다.
index | RF interface의 index (0~1) |
enable | RF interface의 활성화 여부 |
txEnable | RF interface에서의 Tx 활성화 여부 |
freqHz | RF interface에 설정할 중심 주파수 (단위: Hz) |
rssiOffset | RSSI 교정 offset (기본 값: -166) |
type | RF chain의 타입 (기본 값: SX1301Chip::RADIO_TYPE_SX1257) |
txNotchFreqHz | Tx notch filter frequency (126kHz ~ 250kHz) for SX1301AP2 (FPGA) |
index
, type
등 파라미터가 유효하지 않음 error_t SX1301Chip::configureRxIf | ( | uint8_t | index, |
uint8_t | rfChainIndex, | ||
bool | enable, | ||
int32_t | rFreqHz, | ||
uint8_t | bandwidth = BW_UNDEFINED , |
||
uint32_t | datarate = DR_UNDEFINED , |
||
uint8_t | fskSyncwordSize = 3 , |
||
uint64_t | fskSyncword = 0xC194C1 |
||
) |
Rx interface를 설정합니다.
index | IF chain의 index (0~7: multi LoRa, 8: SX1301Chip::IF_INDEX_LORA_STANDALONE, 9: SX1301Chip::IF_INDEX_FSK_STANDALONE) |
rfChainIndex | 사용할 RF chain의 index |
enable | IF chain의 활성화 여부 |
rFreqHz | 수신 대기할 주파수. RF chain의 중심 주파수 기준의 상대 주파수 |
bandwidth | 수신 대기할 bandwidth. Default는 SX1301Chip::BW_UNDEFINED 이며, LoRa interface 에서는 125kHz, FSK standalone interface 에서는 250kHz로 설정됩니다. |
datarate | 수신 대기할 datarate. Multi channel LoRa interface 에서는 SF7으로 고정되고, LoRa standalone interface 에서는 SX1301Chip::DR_LORA_SF7 ~ SX1301Chip::DR_LORA_SF12 사이의 값으로 설정 가능합니다. FSK standalone interface인 경우, 500 ~ 250000 사이의 값이어야 합니다. Default는 SX1301Chip::DR_UNDEFINED 이며, 이는 LoRa standalone interface에서는 SX1301Chip::DR_LORA_SF7, FSK standalone 인 경우, 50000 으로 설정됩니다. |
fskSyncwordSize | FSK syncword의 크기 (# of bytes). Default는 3. |
fskSyncword | FSK syncword (aligned right, MSBit first). Default는 0xC194C1. |
index
, datarate
, bandwidth
등 파라미터가 유효하지 않음error_t SX1301Chip::configureTxGain | ( | uint8_t | index, |
uint8_t | digGain, | ||
uint8_t | paGain, | ||
uint8_t | dacGain, | ||
uint8_t | mixGain, | ||
int8_t | dBm | ||
) |
Tx Gain look up table을 설정합니다.
index | Look up table index (0~15) |
digGain | Digital gain (2-bits) |
paGain | 외부 PA (2-bits) |
dacGain | Radio DAC (2-bits) |
mixGain | Radio mixer (2-bits) |
dBm | 보드 커넥터에서 측정된 Tx power (dBm 단위) |
index
. SX1301Chip::NUM_TX_GAIN 보다 작아야 함.digGain
. 3 이하의 값이어야 함.dacGain
. 3 이어야 함.mixGain
. 8~15 사이의 값이어야 함.paGain
. 3 이하의 값이어야 함. uint32_t SX1301Chip::getChannel | ( | uint8_t | index | ) |
Rx interface 별 설정된 주파수를 가져옵니다.
index | Rx interface의 index (0~9) |
index
가 유효하고, 활성화된 interface 인 경우 주파수. (단위: Hz) 그렇지 않은 경우 0.
|
virtual |
|
virtual |
수신 버퍼에서 프레임을 읽습니다.
frame
이 NULL 이거나, frame
내부 버퍼가 충분히 크지 않아서 실패 Implements PacketRadioChip.
error_t SX1301Chip::setBandwidth | ( | Radio::LoRaBW_t | bw | ) |
기본으로 사용할 LoRa bandwidth (BW)를 설정합니다.
전송할 프레임의 meta.LoRa.bw 에 유효한 Radio::LoRaBW_t 를 지정하지 않으면 이 함수에서 지정한 BW가 사용됩니다.
sf | LoRa bandwidth |
error_t SX1301Chip::setCodingRate | ( | Radio::LoRaCR_t | cr | ) |
기본으로 사용할 LoRa coding rate (CR)를 설정합니다.
전송할 프레임의 meta.LoRa.cr 에 유효한 Radio::LoRaCR_t 를 지정하지 않으면 이 함수에서 지정한 CR가 사용됩니다.
sf | LoRa coding rate |
error_t SX1301Chip::setDataRate | ( | Radio::LoRaSF_t | sf | ) |
기본으로 사용할 LoRa spreading factor (SF)를 설정합니다.
전송할 프레임의 meta.LoRa.sf 에 유효한 Radio::LoRaSF_t 를 지정하지 않으면 이 함수에서 지정한 SF가 사용됩니다.
sf | LoRa spreading factor |
error_t SX1301Chip::setSyncword | ( | uint8_t | value | ) |
Syncword를 설정합니다.
value | Syncword (기본: 0x12, LoRaWAN: 0x34) |
|
virtual |