knx/src/rp2040_arduino_platform.h
Sonnengruesser a0134e6cfb
RP2040 EEPROM/Flash compiler flag fix (#216)
* RP2040 EEPROM/Flash compiler flag fix

only check flash size if Flash is used, not EEPROM

* RP2040 EEPROM/Flash compiler flag fix

use EEPROM emulation as default to allow build of the knx-demo (memory.h defines EEPROM size 1024 which doesn't work with Flashsize 4k)

* Update rp2040_arduino_platform.h
2022-10-15 22:25:22 +02:00

61 lines
1.6 KiB
C++

#include "arduino_platform.h"
#include "Arduino.h"
#ifdef ARDUINO_ARCH_RP2040
#ifndef USE_RP2040_EEPROM_EMULATION
#ifndef KNX_FLASH_OFFSET
#define KNX_FLASH_OFFSET 0x180000 // 1.5MiB
#pragma warning "KNX_FLASH_OFFSET not defined, using 0x180000"
#endif
#endif
#ifdef USE_RP2040_LARGE_EEPROM_EMULATION
#define USE_RP2040_EEPROM_EMULATION
#endif
class RP2040ArduinoPlatform : public ArduinoPlatform
{
public:
RP2040ArduinoPlatform();
RP2040ArduinoPlatform( HardwareSerial* s);
void setupUart();
// unique serial number
uint32_t uniqueSerialNumber() override;
void restart();
#ifdef USE_RP2040_EEPROM_EMULATION
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
#ifdef USE_RP2040_LARGE_EEPROM_EMULATION
uint8_t _rambuff[KNX_FLASH_SIZE];
bool _rambuff_initialized = false;
#endif
#else
// size of one EraseBlock in pages
virtual size_t flashEraseBlockSize();
// size of one flash page in bytes
virtual size_t flashPageSize();
// start of user flash aligned to start of an erase block
virtual uint8_t* userFlashStart();
// size of the user flash in EraseBlocks
virtual size_t userFlashSizeEraseBlocks();
//relativ to userFlashStart
virtual void flashErase(uint16_t eraseBlockNum);
//write a single page to flash (pageNumber relative to userFashStart
virtual void flashWritePage(uint16_t pageNumber, uint8_t* data);
// writes _eraseblockBuffer to flash - overrides Plattform::writeBufferedEraseBlock() for performance optimization only
void writeBufferedEraseBlock();
#endif
};
#endif