[SX126x] Added automatic block calibration
This commit is contained in:
parent
943f591e92
commit
6a4634fbb2
2 changed files with 23 additions and 52 deletions
|
@ -27,7 +27,7 @@ int16_t SX126x::begin(float bw, uint8_t sf, uint8_t cr, uint16_t syncWord, uint1
|
|||
}
|
||||
|
||||
// configure settings not accessible by API
|
||||
state = config();
|
||||
state = config(SX126X_PACKET_TYPE_LORA);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ int16_t SX126x::beginFSK(float br, float freqDev, float rxBw, uint16_t preambleL
|
|||
}
|
||||
|
||||
// configure settings not accessible by API
|
||||
state = configFSK();
|
||||
state = config(SX126X_PACKET_TYPE_GFSK);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
@ -1069,7 +1069,7 @@ int16_t SX126x::setFrequencyRaw(float freq, bool calibrate) {
|
|||
return(ERR_NONE);
|
||||
}
|
||||
|
||||
int16_t SX126x::config() {
|
||||
int16_t SX126x::config(uint8_t modem) {
|
||||
// set DIO2 as IRQ
|
||||
uint8_t* data = new uint8_t[1];
|
||||
data[0] = SX126X_DIO2_AS_IRQ;
|
||||
|
@ -1091,8 +1091,8 @@ int16_t SX126x::config() {
|
|||
return(state);
|
||||
}
|
||||
|
||||
// set LoRa mode
|
||||
data[0] = SX126X_PACKET_TYPE_LORA;
|
||||
// set modem
|
||||
data[0] = modem;
|
||||
state = SPIwriteCommand(SX126X_CMD_SET_PACKET_TYPE, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
|
@ -1123,57 +1123,28 @@ int16_t SX126x::config() {
|
|||
// clear IRQ
|
||||
state = clearIrqStatus();
|
||||
state |= setDioIrqParams(SX126X_IRQ_NONE, SX126X_IRQ_NONE);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// calibrate all blocks
|
||||
delete[] data;
|
||||
data = new uint8_t[1];
|
||||
data[0] = SX126X_CALIBRATE_ALL;
|
||||
state = SPIwriteCommand(SX126X_CMD_CALIBRATE, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// wait for calibration completion
|
||||
delayMicroseconds(1);
|
||||
while(digitalRead(_mod->getRx()));
|
||||
|
||||
delete[] data;
|
||||
|
||||
return(ERR_NONE);
|
||||
}
|
||||
|
||||
int16_t SX126x::configFSK() {
|
||||
// set DIO2 as IRQ
|
||||
uint8_t* data = new uint8_t[1];
|
||||
data[0] = SX126X_DIO2_AS_IRQ;
|
||||
int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set regulator mode
|
||||
data[0] = SX126X_REGULATOR_DC_DC;
|
||||
state = SPIwriteCommand(SX126X_CMD_SET_REGULATOR_MODE, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// reset buffer base address
|
||||
state = setBufferBaseAddress();
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set FSK mode
|
||||
data[0] = SX126X_PACKET_TYPE_GFSK;
|
||||
state = SPIwriteCommand(SX126X_CMD_SET_PACKET_TYPE, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set Rx/Tx fallback mode to STDBY_RC
|
||||
data[0] = SX126X_RX_TX_FALLBACK_MODE_STDBY_RC;
|
||||
state = SPIwriteCommand(SX126X_CMD_SET_RX_TX_FALLBACK_MODE, data, 1);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// clear IRQ
|
||||
state = clearIrqStatus();
|
||||
state |= setDioIrqParams(SX126X_IRQ_NONE, SX126X_IRQ_NONE);
|
||||
|
||||
delete[] data;
|
||||
|
||||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX126x::SPIwriteCommand(uint8_t cmd, uint8_t* data, uint8_t numBytes, bool waitForBusy) {
|
||||
return(SX126x::SPItransfer(cmd, true, data, NULL, numBytes, waitForBusy));
|
||||
}
|
||||
|
|
|
@ -134,6 +134,7 @@
|
|||
#define SX126X_CALIBRATE_RC13M_ON 0b00000010 // 1 1 enabled
|
||||
#define SX126X_CALIBRATE_RC64K_OFF 0b00000000 // 0 0 64 kHz RC osc. calibration: disabled
|
||||
#define SX126X_CALIBRATE_RC64K_ON 0b00000001 // 0 0 enabled
|
||||
#define SX126X_CALIBRATE_ALL 0b01111111 // 6 0 calibrate all blocks
|
||||
|
||||
//SX126X_CMD_CALIBRATE_IMAGE
|
||||
#define SX126X_CAL_IMG_430_MHZ_1 0x6B
|
||||
|
@ -408,8 +409,7 @@ class SX126x: public PhysicalLayer {
|
|||
|
||||
float _dataRate;
|
||||
|
||||
int16_t config();
|
||||
int16_t configFSK();
|
||||
int16_t config(uint8_t modem);
|
||||
|
||||
// common low-level SPI interface
|
||||
int16_t SPIwriteCommand(uint8_t cmd, uint8_t* data, uint8_t numBytes, bool waitForBusy = true);
|
||||
|
|
Loading…
Add table
Reference in a new issue