Added PA Clamping fix to FSK and SX1268

This commit is contained in:
BarryPSmith 2019-11-12 10:39:44 -08:00
parent 078641d64d
commit b8b05262bc
5 changed files with 32 additions and 17 deletions

View file

@ -22,7 +22,7 @@ int16_t SX1262::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint16_t syn
return(state); return(state);
} }
state = fixPaClamping(); state = SX126x::fixPaClamping();
if (state != ERR_NONE) { if (state != ERR_NONE) {
return state; return state;
} }
@ -48,6 +48,11 @@ int16_t SX1262::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t
return(state); return(state);
} }
state = SX126x::fixPaClamping();
if (state != ERR_NONE) {
return state;
}
return(state); return(state);
} }
@ -115,13 +120,3 @@ int16_t SX1262::setOutputPower(int8_t power) {
// restore OCP configuration // restore OCP configuration
return(writeRegister(SX126X_REG_OCP_CONFIGURATION, &ocp, 1)); return(writeRegister(SX126X_REG_OCP_CONFIGURATION, &ocp, 1));
} }
int16_t SX1262::fixPaClamping() {
uint8_t clampConfig;
uint16_t state = readRegister(SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
if (state != ERR_NONE) {
return state;
}
clampConfig |= 0x1E;
return writeRegister(SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
}

View file

@ -8,7 +8,6 @@
//SX126X_CMD_SET_PA_CONFIG //SX126X_CMD_SET_PA_CONFIG
#define SX126X_PA_CONFIG_SX1261 0x01 #define SX126X_PA_CONFIG_SX1261 0x01
#define SX126X_PA_CONFIG_SX1262 0x00 #define SX126X_PA_CONFIG_SX1262 0x00
#define SX126X_REG_TX_CLAMP_CONFIG 0x08D8 //Datasheet 15.2
/*! /*!
\class SX1262 \class SX1262
@ -95,10 +94,6 @@ class SX1262: public SX126x {
int16_t setOutputPower(int8_t power); int16_t setOutputPower(int8_t power);
private: private:
/*!
\brief Fixes overly eager PA clamping, as described in section 15.2 of the datasheet
*/
int16_t fixPaClamping();
}; };
#endif #endif

View file

@ -22,6 +22,11 @@ int16_t SX1268::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint16_t syn
return(state); return(state);
} }
state = SX126x::fixPaClamping();
if (state != ERR_NONE) {
return state;
}
return(state); return(state);
} }
int16_t SX1268::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t power, float currentLimit, uint16_t preambleLength, float dataShaping) { int16_t SX1268::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t power, float currentLimit, uint16_t preambleLength, float dataShaping) {
@ -42,6 +47,11 @@ int16_t SX1268::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t
return(state); return(state);
} }
state = SX126x::fixPaClamping();
if (state != ERR_NONE) {
return state;
}
return(state); return(state);
} }

View file

@ -1202,6 +1202,16 @@ int16_t SX126x::setFrequencyRaw(float freq) {
return(ERR_NONE); return(ERR_NONE);
} }
int16_t SX126x::fixPaClamping() {
uint8_t clampConfig;
uint16_t state = readRegister(SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
if (state != ERR_NONE) {
return state;
}
clampConfig |= 0x1E;
return writeRegister(SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
}
int16_t SX126x::config(uint8_t modem) { int16_t SX126x::config(uint8_t modem) {
// set regulator mode // set regulator mode
uint8_t data[7]; uint8_t data[7];

View file

@ -92,6 +92,7 @@
#define SX126X_REG_OCP_CONFIGURATION 0x08E7 #define SX126X_REG_OCP_CONFIGURATION 0x08E7
#define SX126X_REG_XTA_TRIM 0x0911 #define SX126X_REG_XTA_TRIM 0x0911
#define SX126X_REG_XTB_TRIM 0x0912 #define SX126X_REG_XTB_TRIM 0x0912
#define SX126X_REG_TX_CLAMP_CONFIG 0x08D8 //Datasheet 15.2
// SX126X SPI command variables // SX126X SPI command variables
@ -751,6 +752,10 @@ class SX126x: public PhysicalLayer {
int16_t setFrequencyRaw(float freq); int16_t setFrequencyRaw(float freq);
/*!
\brief Fixes overly eager PA clamping on SX1262 / SX1268, as described in section 15.2 of the datasheet
*/
int16_t fixPaClamping();
private: private:
Module* _mod; Module* _mod;