Tired of SD EEPROM boot failures on the SKR V1.4. Follow the SKR V1.4 I2C EEPROM guide on installing a physical EEPROM on the SKR V1.4 board.
While you can utilise a SPI EEPROM. For this article I am going to keep to I2C as that is personally what I use. Furthermore the Inter-Integrated Circuit or I2C ( I²C to be correct) are quick and easy to use and cost very little. Moreover there are just four little connections to plug in.
Required ItemsAffiliate Links Below:
Breadboard Dupont Connectors
AT24C256 I2C Module
Without a doubt one of the quickest and easiest methods of adding a physical EEPROM chip is to use a AT24C256 EEPROM Board. Furthermore it is usually supplied with a 256K EEPROM chip pre-installed. While there are a few variants, go for one that the EEPROM chip itself is not physically soldered to the board.
Additionally I prefer jumper connections over the switch variants on the grounds of longevity. Furthermore as Marlin gets bigger you can simply pull out the old chip and insert one with more capacity. For instance I am currently using 512k chips on the AT24C boards. Thats more than enough capacity for all your requirements in Marlin 2 and still leave space for all the Frivolous Games you can enable.
Setting the AT24C* Jumpers
Before we start connecting the AT24C* EEPROM board to the SKR V1.4, we need to assign the jumper connections on the EEPROM board. Begin by removing all the jumpers. Additionally disable the write protect feature by placing a jumper to the far right on the WP connection. While leaving off the jumpers A0, A1, and A2 as shown in the picture above.
Wiring the AT24C* to SKR V1.4
Firstly make yourself a four wire female to female Dupont 2.54mm pitch cable. However you could use some female to female breadboard jumper wires for convenience. (See at beginning of article under the required items).
With the cable making out the way, let’s start by plugging in the first connection to the I2C port on the SKR V1.4.
- Connect the 5V I2C connector on the SKR V1.4 to the VCC on the AT24C* EEPROM board.
- Connect the GND I2C connector on the SKR V1.4 to the GND on the AR24C*.
- Connect the 0.0 I2C connector on the SKR V1.4 to the SCL on the AR24C*.
- Connect the 0.1 I2C connector on the SKR V1.4 to the SDA on the AR24C*.
Marlin Firmware Changes
Setting up the I2C EEPROM within Marlin 2 is a simple step of copying and pasting the codes below.
Firstly we need to enable the I2C EEPROM within the SKR V1.4 Board Pin File. See file path below:
Inside the pins_BTT_SKR_V1_4 file add the following code just below the board information declaration
#define MNV_SKRV1_4_256K_END 0x7FFF //32Kb
//#define MNV_SKRV1_4_512K_END 0xFFFF //64Kb
#define E2END MNV_SKRV1_4_256K_END
If later on you decide change the EEPROM capacity to 512K. Then un-define the 256K option by placing forward slashes in front. Furthermore remove the forward slashes from the 512K option, save, recompile marlin and upload.
//#define MNV_SKRV1_4_256K_END 0x7FFF //32Kb
#define MNV_SKRV1_4_512K_END 0xFFFF //64Kb
#define E2END MNV_SKRV1_4_512K_END
The chances are you have already enabled the EEPROM Settings within the Marlin 2 Configuration.h file. However if you have not then use the settings below.
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
Did you notice I don’t have the EEPROM auto initialise on error turned on ? It is for good reason.
Moreover how would I know if the EEPROM has failed, if it is going to wipe itself reload the default Marlin configuration and start again ?
Why would that be a problem ? Importantly I would loose my automatic bed levelling mesh information and my bed would all of a sudden be off. Furthermore everything that has changed on the printer such as Baby Steps, PID Tuning would be lost unless it was stored on the last Marlin Firmware uploaded to the printer.
Additionally by disabling the auto init method if there is a problem, 95% of the time you can just tell something isn’t quite right, by either sight or sound. A quick and simple fix is often as simple as switching the 3D printer on and off again. Importantly when it is turned back on the EEPROM should still contain all the information and be back working as normal.
At this point in time on some versions of Marlin 2 there is a conflict created when using the I2C EEPROM on the LPC176X chipsets.
If you get an error similar to below, then have a look at our I2C Error Marlin 2 Guide.
.pio/build/LPC1768/libFrameworkArduino.a(arduino.cpp.o): In function eeprom_write_byte(unsigned char, unsigned char)’: .platformio/packages/framework-arduino-lpc176x/cores/arduino/arduino.cpp:111: multiple definition of eeprom_write_byte(unsigned char, unsigned char)’
If you found this guide useful, please consider a donation to help keep the Make ‘N’ Print website running. For further information please have a look at our support us page