@@ -725,6 +725,19 @@ void RadioSetRxConfig( RadioModems_t modem, uint32_t bandwidth,
725725 SX126xSetModulationParams ( & SX126x .ModulationParams );
726726 SX126xSetPacketParams ( & SX126x .PacketParams );
727727
728+ // WORKAROUND - Optimizing the Inverted IQ Operation, see DS_SX1261-2_V1.2 datasheet chapter 15.4
729+ if ( SX126x .PacketParams .Params .LoRa .InvertIQ == LORA_IQ_INVERTED )
730+ {
731+ // RegIqPolaritySetup = @address 0x0736
732+ SX126xWriteRegister ( 0x0736 , SX126xReadRegister ( 0x0736 ) & ~( 1 << 2 ) );
733+ }
734+ else
735+ {
736+ // RegIqPolaritySetup @address 0x0736
737+ SX126xWriteRegister ( 0x0736 , SX126xReadRegister ( 0x0736 ) | ( 1 << 2 ) );
738+ }
739+ // WORKAROUND END
740+
728741 // Timeout Max, Timeout handled directly in SetRx function
729742 RxTimeout = 0xFFFF ;
730743
@@ -820,6 +833,20 @@ void RadioSetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
820833 SX126xSetPacketParams ( & SX126x .PacketParams );
821834 break ;
822835 }
836+
837+ // WORKAROUND - Modulation Quality with 500 kHz LoRa® Bandwidth, see DS_SX1261-2_V1.2 datasheet chapter 15.1
838+ if ( ( modem == MODEM_LORA ) && ( SX126x .ModulationParams .Params .LoRa .Bandwidth == LORA_BW_500 ) )
839+ {
840+ // RegTxModulation = @address 0x0889
841+ SX126xWriteRegister ( 0x0889 , SX126xReadRegister ( 0x0889 ) & ~( 1 << 2 ) );
842+ }
843+ else
844+ {
845+ // RegTxModulation = @address 0x0889
846+ SX126xWriteRegister ( 0x0889 , SX126xReadRegister ( 0x0889 ) | ( 1 << 2 ) );
847+ }
848+ // WORKAROUND END
849+
823850 SX126xSetRfTxPower ( power );
824851 TxTimeout = timeout ;
825852}
@@ -1106,6 +1133,13 @@ void RadioIrqProcess( void )
11061133 {
11071134 //!< Update operating mode state to a value lower than \ref MODE_STDBY_XOSC
11081135 SX126xSetOperatingMode ( MODE_STDBY_RC );
1136+
1137+ // WORKAROUND - Implicit Header Mode Timeout Behavior, see DS_SX1261-2_V1.2 datasheet chapter 15.3
1138+ // RegRtcControl = @address 0x0902
1139+ SX126xWriteRegister ( 0x0902 , 0x00 );
1140+ // RegEventMask = @address 0x0944
1141+ SX126xWriteRegister ( 0x0944 , SX126xReadRegister ( 0x0944 ) | ( 1 << 1 ) );
1142+ // WORKAROUND END
11091143 }
11101144 SX126xGetPayload ( RadioRxPayload , & size , 255 );
11111145 SX126xGetPacketStatus ( & RadioPktStatus );
0 commit comments