Skip to content

Commit e5de86c

Browse files
authored
R9M using wrong Idle method and EEPROM speedup (ExpressLRS#1133)
* Abort current telem receive if about to commit * EEPROM STM32 targets should not pause timer * Revert "EEPROM STM32 targets should not pause timer" This reverts commit e2a31e5. * EEPROM STM32 targets should not pause timer * Use 400khz I2C and only update EEPROM not write * Only use 400kHz on R9M
1 parent 012db88 commit e5de86c

3 files changed

Lines changed: 15 additions & 8 deletions

File tree

src/include/target/Frsky_TX_R9M.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#define TARGET_USE_EEPROM 1
77
#define TARGET_EEPROM_ADDR 0x51
8+
#define TARGET_EEPROM_400K
89

910
// GPIO pin definitions
1011
#define GPIO_PIN_RFamp_APC1 PA6 //APC2 is connected through a I2C dac and is handled elsewhere

src/lib/EEPROM/elrs_eeprom.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "logging.h"
44

55
#if defined(PLATFORM_STM32)
6-
#if TARGET_USE_EEPROM && \
6+
#if defined(TARGET_USE_EEPROM) && \
77
defined(GPIO_PIN_SDA) && (GPIO_PIN_SDA != UNDEF_PIN) && \
88
defined(GPIO_PIN_SCL) && (GPIO_PIN_SCL != UNDEF_PIN)
99
#if !defined(TARGET_EEPROM_ADDR)
@@ -15,7 +15,7 @@
1515
#include <extEEPROM.h>
1616
extEEPROM EEPROM(kbits_2, 1, 1, TARGET_EEPROM_ADDR);
1717
#else
18-
#define STM32_USE_FLASH 1
18+
#define STM32_USE_FLASH
1919
#include <stm32_eeprom.h>
2020
#endif
2121
#else
@@ -26,15 +26,19 @@ void
2626
ELRS_EEPROM::Begin()
2727
{
2828
#if defined(PLATFORM_STM32)
29-
#if STM32_USE_FLASH
29+
#if defined(STM32_USE_FLASH)
3030
eeprom_buffer_fill();
3131
#else // !STM32_USE_FLASH
3232
/* Initialize I2C */
3333
Wire.setSDA(GPIO_PIN_SDA);
3434
Wire.setSCL(GPIO_PIN_SCL);
3535
Wire.begin();
3636
/* Initialize EEPROM */
37-
EEPROM.begin(extEEPROM::twiClock100kHz, &Wire);
37+
#if defined(TARGET_EEPROM_400K)
38+
EEPROM.begin(extEEPROM::twiClock400kHz, &Wire);
39+
#else
40+
EEPROM.begin(extEEPROM::twiClock100kHz, &Wire);
41+
#endif
3842
#endif // STM32_USE_FLASH
3943
#else /* !PLATFORM_STM32 */
4044
EEPROM.begin(RESERVED_EEPROM_SIZE);
@@ -50,7 +54,7 @@ ELRS_EEPROM::ReadByte(const uint32_t address)
5054
ERRLN("EEPROM address is out of bounds");
5155
return 0;
5256
}
53-
#if STM32_USE_FLASH
57+
#if defined(STM32_USE_FLASH)
5458
return eeprom_buffered_read_byte(address);
5559
#else
5660
return EEPROM.read(address);
@@ -66,8 +70,10 @@ ELRS_EEPROM::WriteByte(const uint32_t address, const uint8_t value)
6670
ERRLN("EEPROM address is out of bounds");
6771
return;
6872
}
69-
#if STM32_USE_FLASH
73+
#if defined(STM32_USE_FLASH)
7074
eeprom_buffered_write_byte(address, value);
75+
#elif defined(PLATFORM_STM32)
76+
EEPROM.update(address, value);
7177
#else
7278
EEPROM.write(address, value);
7379
#endif
@@ -81,7 +87,7 @@ ELRS_EEPROM::Commit()
8187
{
8288
ERRLN("EEPROM commit failed");
8389
}
84-
#elif STM32_USE_FLASH
90+
#elif defined(STM32_USE_FLASH)
8591
eeprom_buffer_flush();
8692
#endif
8793
}

src/src/tx_main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ static void CheckConfigChangePending()
568568
if (syncSpamCounter > 0)
569569
return;
570570

571-
#if !defined(PLATFORM_STM32) && !defined(TARGET_USE_EEPROM)
571+
#if !defined(PLATFORM_STM32) || defined(TARGET_USE_EEPROM)
572572
while (busyTransmitting); // wait until no longer transmitting
573573
hwTimer.callbackTock = &timerCallbackIdle;
574574
#else

0 commit comments

Comments
 (0)