diff --git a/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
deleted file mode 100644
index 96062e2c42..0000000000
--- a/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifdef __AVR__
-
-#include "../shared/persistent_store_api.h"
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(EEPROM_SETTINGS)
-
-namespace HAL {
-namespace PersistentStore {
-
-bool access_start() { return true; }
-bool access_finish() { return true; }
-
-bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
-  while (size--) {
-    uint8_t * const p = (uint8_t * const)pos;
-    uint8_t v = *value;
-    // EEPROM has only ~100,000 write cycles,
-    // so only write bytes that have changed!
-    if (v != eeprom_read_byte(p)) {
-      eeprom_write_byte(p, v);
-      if (eeprom_read_byte(p) != v) {
-        SERIAL_ECHO_START();
-        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
-        return true;
-      }
-    }
-    crc16(crc, &v, 1);
-    pos++;
-    value++;
-  };
-  return false;
-}
-
-bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
-  do {
-    uint8_t c = eeprom_read_byte((unsigned char*)pos);
-    if (writing) *value = c;
-    crc16(crc, &c, 1);
-    pos++;
-    value++;
-  } while (--size);
-  return false;  // always assume success for AVR's
-}
-
-}
-}
-
-#endif // EEPROM_SETTINGS
-#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
index a9c34d7728..d2207d91aa 100644
--- a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
@@ -45,7 +45,7 @@
 #if HAS_SERVOS
 
 #include <Arduino.h>
-#include "../servo.h"
+#include "../shared/servo.h"
 #include "../shared/servo_private.h"
 
 static volatile int8_t Channel[_Nbr_16timers];              // counter for the servo being pulsed for each timer (or -1 if refresh interval)
@@ -158,4 +158,3 @@ void finISR(timer16_Sequence_t timer) {
 #endif // HAS_SERVOS
 
 #endif // ARDUINO_ARCH_SAM
-
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
index 5fbb7b2dce..fa611111d0 100644
--- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
@@ -26,8 +26,13 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
+#include "../../inc/MarlinConfig.h"
 #include "../shared/persistent_store_api.h"
 
+#if DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
+  #define E2END 0xFFF // Default to Flash emulated EEPROM size (EepromEmulation_Due.cpp)
+#endif
+
 extern void eeprom_flush(void);
 
 bool PersistentStore::access_start() { return true; }
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
deleted file mode 100644
index b644b2e172..0000000000
--- a/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifdef ARDUINO_ARCH_SAM
-
-#include "../shared/persistent_store_api.h"
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(EEPROM_SETTINGS)
-
-extern void eeprom_flush(void);
-
-namespace HAL {
-namespace PersistentStore {
-
-bool access_start() { return true; }
-
-bool access_finish() {
-  #if DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
-    eeprom_flush();
-  #endif
-  return true;
-}
-
-bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
-  while (size--) {
-    uint8_t * const p = (uint8_t * const)pos;
-    uint8_t v = *value;
-    // EEPROM has only ~100,000 write cycles,
-    // so only write bytes that have changed!
-    if (v != eeprom_read_byte(p)) {
-      eeprom_write_byte(p, v);
-      if (eeprom_read_byte(p) != v) {
-        SERIAL_ECHO_START();
-        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
-        return true;
-      }
-    }
-    crc16(crc, &v, 1);
-    pos++;
-    value++;
-  };
-  return false;
-}
-
-bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
-  do {
-    uint8_t c = eeprom_read_byte((unsigned char*)pos);
-    if (writing) *value = c;
-    crc16(crc, &c, 1);
-    pos++;
-    value++;
-  } while (--size);
-  return false;
-}
-
-}
-}
-
-#endif // EEPROM_SETTINGS
-#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp
index 36825f15ff..a9dbb3f1b0 100644
--- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp
@@ -41,6 +41,7 @@
 #if ENABLED(EEPROM_SETTINGS)
 
 #include "persistent_store_api.h"
+#include "../../inc/MarlinConfig.h"
 
 #if ENABLED(FLASH_EEPROM)
 
@@ -50,16 +51,12 @@ extern "C" {
 
 #define SECTOR_START(sector)	((sector < 16) ? (sector * 0x1000) : ((sector - 14) * 0x8000))
 #define EEPROM_SECTOR 29
-#define EEPROM_SIZE (E2END+1)
+#define EEPROM_SIZE (4096)
 #define SECTOR_SIZE (32768)
 #define EEPROM_SLOTS (SECTOR_SIZE/EEPROM_SIZE)
 #define EEPROM_ERASE (0xff)
 #define SLOT_ADDRESS(sector, slot) (((uint8_t *)SECTOR_START(sector)) + slot * EEPROM_SIZE)
 
-#if EEPROM_SIZE != 4096
-  #error "EEPROM_SIZE must match flash write size"
-#endif
-
 static uint8_t ram_eeprom[EEPROM_SIZE];
 static bool eeprom_dirty = false;
 static int current_slot = 0;
@@ -118,7 +115,7 @@ bool PersistentStore::access_finish() {
   return true;
 }
 
-bool PersistentStore::write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
   for (int i = 0; i < size; i++) ram_eeprom[pos + i] = value[i];
   eeprom_dirty = true;
   crc16(crc, value, size);
@@ -126,7 +123,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, uint16_t size,
   return false;  // return true for any error
 }
 
-bool PersistentStore::read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
   const uint8_t * const buff = writing ? &value[0] : &ram_eeprom[pos];
   if (writing) for (int i = 0; i < size; i++) value[i] = ram_eeprom[pos + i];
   crc16(crc, buff, size);
@@ -134,6 +131,8 @@ bool PersistentStore::read_data(int &pos, uint8_t* value, uint16_t size, uint16_
   return false;  // return true for any error
 }
 
+size_t PersistentStore::capacity() { return EEPROM_SIZE; }
+
 #endif // FLASH_EEPROM
 #endif // EEPROM_SETTINGS
 #endif // TARGET_LPC1768
diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_sdcard.cpp b/Marlin/src/HAL/HAL_LPC1768/persistent_store_sdcard.cpp
index 730e9a582e..490f16e07b 100644
--- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_sdcard.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_sdcard.cpp
@@ -26,6 +26,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
+#include "../../inc/MarlinConfig.h"
 #include "persistent_store_api.h"
 
 #if DISABLED(FLASH_EEPROM)
@@ -80,18 +81,18 @@ bool PersistentStore::access_finish() {
 static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
   const char * const rw_str = write ? PSTR("write") : PSTR("read");
   SERIAL_PROTOCOLCHAR(' ');
-  serialprint_PGM(rw_str);
+  serialprintPGM(rw_str);
   SERIAL_PROTOCOLPAIR("_data(", pos);
   SERIAL_PROTOCOLPAIR(",", (int)value);
   SERIAL_PROTOCOLPAIR(",", (int)size);
   SERIAL_PROTOCOLLNPGM(", ...)");
   if (total) {
     SERIAL_PROTOCOLPGM(" f_");
-    serialprint_PGM(rw_str);
+    serialprintPGM(rw_str);
     SERIAL_PROTOCOLPAIR("()=", (int)s);
     SERIAL_PROTOCOLPAIR("\n size=", size);
     SERIAL_PROTOCOLPGM("\n bytes_");
-    serialprint_PGM(write ? PSTR("written=") : PSTR("read="));
+    serialprintPGM(write ? PSTR("written=") : PSTR("read="));
     SERIAL_PROTOCOLLN(total);
   }
   else
diff --git a/Marlin/src/HAL/shared/platforms.h b/Marlin/src/HAL/platforms.h
similarity index 100%
rename from Marlin/src/HAL/shared/platforms.h
rename to Marlin/src/HAL/platforms.h
diff --git a/Marlin/src/HAL/shared/I2cEeprom.cpp b/Marlin/src/HAL/shared/I2cEeprom.cpp
index 20fe7de341..792f2c65f6 100644
--- a/Marlin/src/HAL/shared/I2cEeprom.cpp
+++ b/Marlin/src/HAL/shared/I2cEeprom.cpp
@@ -33,7 +33,7 @@
 // Includes
 // --------------------------------------------------------------------------
 
-#include HAL_PATH(., HAL.h)
+#include HAL_PATH(.., HAL.h)
 #include <Wire.h>
 
 // --------------------------------------------------------------------------
@@ -157,4 +157,3 @@ void eeprom_read_block(void* pos, const void* eeprom_address, size_t n) {
 
 
 #endif // ENABLED(I2C_EEPROM)
-
diff --git a/Marlin/src/HAL/shared/SpiEeprom.cpp b/Marlin/src/HAL/shared/SpiEeprom.cpp
index 98ed612d07..d63f52fb38 100644
--- a/Marlin/src/HAL/shared/SpiEeprom.cpp
+++ b/Marlin/src/HAL/shared/SpiEeprom.cpp
@@ -29,7 +29,7 @@
 
 #if ENABLED(SPI_EEPROM)
 
-#include HAL_PATH(., HAL.h)
+#include HAL_PATH(.., HAL.h)
 
 #define CMD_WREN  6   // WREN
 #define CMD_READ  2   // WRITE
diff --git a/Marlin/src/HAL/persistent_store_api.cpp b/Marlin/src/HAL/shared/persistent_store_api.cpp
similarity index 92%
rename from Marlin/src/HAL/persistent_store_api.cpp
rename to Marlin/src/HAL/shared/persistent_store_api.cpp
index b60b75ee8e..50adc12631 100644
--- a/Marlin/src/HAL/persistent_store_api.cpp
+++ b/Marlin/src/HAL/shared/persistent_store_api.cpp
@@ -20,11 +20,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-#include "../inc/MarlinConfigPre.h"
+#include "../../inc/MarlinConfigPre.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
-  #include "shared/persistent_store_api.h"
+  #include "persistent_store_api.h"
   PersistentStore persistentStore;
 
 #endif
diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h
index f3bc903bf2..7f9b50eb01 100644
--- a/Marlin/src/inc/MarlinConfigPre.h
+++ b/Marlin/src/inc/MarlinConfigPre.h
@@ -23,7 +23,7 @@
 #ifndef _MARLIN_CONFIGPRE_H_
 #define _MARLIN_CONFIGPRE_H_
 
-#include "../HAL/shared/platforms.h"
+#include "../HAL/platforms.h"
 #include "../core/boards.h"
 #include "../core/macros.h"
 #include "../core/types.h"
diff --git a/buildroot/share/tests/DUE_tests b/buildroot/share/tests/DUE_tests
index 7b172fe6ab..100cdd570b 100755
--- a/buildroot/share/tests/DUE_tests
+++ b/buildroot/share/tests/DUE_tests
@@ -5,7 +5,7 @@ set -e
 
 restore_configs
 opt_set MOTHERBOARD BOARD_RAMPS4DUE_EFB
-opt_enable S_CURVE_ACCELERATION
+opt_enable S_CURVE_ACCELERATION EEPROM_SETTINGS
 opt_set E0_AUTO_FAN_PIN 8
 opt_set EXTRUDER_AUTO_FAN_SPEED 100
-exec_test $1 $2 "RAMPS4DUE_EFB S_CURVE_ACCELERATION"
+exec_test $1 $2 "RAMPS4DUE_EFB S_CURVE_ACCELERATION EEPROM_SETTINGS"
diff --git a/buildroot/share/tests/LPC1768_tests b/buildroot/share/tests/LPC1768_tests
index 07d891c61a..86616c3831 100755
--- a/buildroot/share/tests/LPC1768_tests
+++ b/buildroot/share/tests/LPC1768_tests
@@ -14,8 +14,8 @@ exec_test $1 $2 "VIKI2 and SDSUPPORT"
 
 restore_configs
 opt_set MOTHERBOARD BOARD_MKS_SBASE
-opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
-exec_test $1 $2 "MKS SBASE RRDFG SDSUPPORT"
+opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS
+exec_test $1 $2 "MKS SBASE RRDFG SDSUPPORT EEPROM_SETTINGS"
 
 #clean up
 restore_configs