Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Filament EEPROM Decoding
I hope this thread can be used to further decode the Filament EEPROMs

I compared the Green, Blue, and Yellow filament EEPROM data (EEPROM dumped at and noticed at byte 0x02 (and also byte 0x42) for green we have a value of 0x47 = decimal value 71 = ASCII code "G"
00: 5A4147… ZAG - Green ABS
00: 5A4142… ZAB - Blue ABS
00: 5A4159… ZAY - Yellow ABS
00: 5A4157… ZAW - White ABS
White ABS from Oliver (EEPROM dumped at - note: partially used, NOT NEW)

So byte 0x02/0x42 lists the ASCII letter indicating color.

These NEW cartridges are have 100% mirrored halves. Bytes 0x00-0x3F are identical to bytes 0x40-0x7F.

Oliver's USED cartridge is nearly mirrored, but
bytes 0x38-0x3D (values: 0xD04407202FAE) differ from those in
bytes 0x78-0x7D (values: 0xAA55AA550783)
so perhaps bytes 0x40-0x7F always maintain the initial settings incase the first half gets corrupted.

0xAA55AA550783 appears in NEW cartridges at both bytes 0x38-0x3D and bytes 0x78-0x7D.

My guess is that the first 4 bytes 0xAA55AA55 indicate an "expiration date" in seconds, relative to Unix time (helpful, where the filament will stop working. The value 0x55AA55AA (little endian) is 1,437,226,410 which corresponds to a Unix time of Sat, 18 Jul 2015 13:33:30 GMT. This may just be a coincidence as Oliver's 0xD0440720 doesn't seem to follow.

If someone tries a date that has already passed we could see if the printer refuses to print. 0x805E3753 = Sun, 30 Mar 2014 00:00:00 GMT as an example.

Hopefully some of this will be of use

byte 0x02/0x42 lists the ASCII letter indicating filament color.
NEW cartridges are 100% mirrored, the first half changes on USED cartridges. 2nd half is possibly used in case 1st half becomes corrupted.
Bytes 0x38-0x3B MAY be an "expiration date" for the filament
Bytes 0x3C-0x3D also change in USED cartridges.
You could be right - But there was also a sticker on each box of filament, making me think this could also be a serial number. Thoughts?

I havent tried it yet, but I bet that "A" means abs, so im going to try a "P" to see if it switches to say PLA. Just a thought, nothing more...

This is from reversing both the FW and the Windows app.
00:xyzCode - 'Z'
01:material - 'A' for ABS
05-07:mdate - manufacture date ??
08-0b:total len
0c-0f:total len now, used to be remaining len in older fw
10-11:temp head
12-13:temp bed
14-15:mloc - manufacture location ??
16-17:dloc - distribution location ??
18-23Confusedn - serial number, zero padded for now
24-25: check digit - 0x0034 in LE format is the only one i've seen so far

Also it looks like since fw 1.1.I the printer remembers cartridges serial numbers and the corresponding smallest filament lengths. So every time you reset the filament counter you need to tweak the serial number as well, otherwise the printer will limit the filament output so your prints will break apart.
Very good work,

I see an uno in my future with lcd and buttons for changing options without pc.
read the serial number and add 1 to it should be straight forward as well.
Interesting. I have a couple carts the same. I will read them and post them soon, hopefully by the weekend.

Ill also confirm intentional print degradation after reset, If so, A) that's a beavis thing for them to so, and B) all the more reason to get open source software running on the machine. Frankly, I don't recall any other printer manufacturer doing that...??

Flashing G firmware somehow clears that internal printer storage. After verifying that G fw prints OK I immediately upgraded it back to 1.1.I
and it continued to treat the previously marked cartridge right. I don't know if printing on G fw was necessary, may be just powering it on was enough.
I'd second the open source part. It shouldn't be too difficult to reverse engineer the PIO ports used by the CPU to control the motors, heaters, leds, etc. I have no idea on how long it will take to actually adopt an open source firmware even if you have all that information.
Hi Kieth,

How did the "p" experiment go? Did it work for you? What temps did it set?

Sorry, havent had time. Was much more busy than expected.

hello all, i would create a resetter using a PICAXE micro instead of Arduino, i was able to completely read the memory chip, write some random values an then write back the original values.

i followed this blog
but i'm completely puzzled about what inside the arduino resetter program

#define CODE 0x00 //1 Byte
#define MATERIAL 0x01 //1 Byte
#define COLOR 0x02 //2 Bytes
#define DATE 0x05 //4 Bytes
#define TOTALLEN 0x08 //4 Bytes
#define NEWLEN 0x0C //4 Bytes
#define HEADTEMP 0x10 //2 Bytes
#define BEDTEMP 0x12 //2Bytes
#define MLOC 0x14 //2 Bytes
#define DLOC 0x16 //2 Bytes
#define SN 0x18 //12 Bytes
#define CRC 0x24 //2 Bytes
#define LEN2 0x34 //4 Bytes

i carefully examinated the entire program..
as you can see at 0x24 there is a "CRC" but the arduino resetter program do not update it after "messing" with values... why?
i would put open source my picaxe program for all users, i'm doing this just for my joy to use another platform to filament reset cartridges Smile

then there is a strange thing on 0x05 DATE, the previous data is 0x02 COLOR 2 bytes so it will use 0x02 and 0x03.
DATE is 4 bytes long so it should use 0x05,0x06,0x07,0x08
but next there is TOTALLEN value (4bytes) starting from 0x08 but isn't 0x08 address occupied by one byte of the DATA value?
i think the DATA value is wrong and should start at 0x04 instead of 0x05, am i right?

is there an updated table of decoded memory locations of the cartridge eprom where i can look at?

thanks for any help

0x05 "DATE" is actually part of the serial number: It is not rewritten. 0x04 is always 00 (so far)
All those #defines were just peoples best guess at the time but most of them are correct. Serial number is broken up and rearranged (see picture)
New firmware upgrades seem to be using more of the data e.g comparing LEN2 vs TOTALLEN & NEWLEN and probably checking that 0x38 is AA55AA55, and that 0x3C matches 0x7C as it does on a new cartridge. Best idea is to rewrite the entire data to match an original cartridge and increment the serial number, but technically filament use only alters 12 bytes (for now).

AA55 is a standard End Of File marker, used out of convention and has no special significance.
[Image: DaVinciEEPROMserialguide.png]
Hello everyone, I have my original PLA 2.0 nozzle, I hope someone can help me, I need to reset the parameters PLA Arduino, silk factory parameter 190 heating bed 45, less likely to use the Columbia Valley in English translation, please forgive me, Thank you help!

I have a da Vinci 2.0A duo.
I connected the logic analyser to the printer to analyse the EEPROM data transmission.
Data were transferred with bit-rate 27 kHz.

Each read sequence consists four parts:
1. Access device at address 0xA1 - fail. At 0xA1 can be placed e.g. 11LC161 - 16kB EEPROM.
2. Read from device at 0xA0 32 (0x20) bytes from address 0x00
3. Read from device at 0xA0 32 (0x20) bytes from address 0x20
4. Read from device at 0xA0 16 (0x10) bytes from address 0x70

When it prints the printer write regularly to the EEPROM (~25cm)
Each write sequence consists eight parts:
1. Access device at address 0xA1 - fail. At 0xA1 can be placed e.g. 11LC161 - 16kB EEPROM.
2. Read from device at 0xA0 32 (0x20) bytes from address 0x00
3. Read from device at 0xA0 32 (0x20) bytes from address 0x20
4. Read from device at 0xA0 16 (0x10) bytes from address 0x70
5. Set device at 0xA0 to write mode (command 0x96)
6. Write to device at 0xA0 16 (0x10) bytes at address 0x30
7. Set device at 0xA0 to write mode (command 0x96)
8. Write to device at 0xA0 16 (0x10) bytes at address 0x70

Example writes:
30: 883355AAAF1C0000 0000001004ED00E0
70: 883355AAC0D40100 AA55AA5597060B00
30: 883355AA961C0000 0000001004ED00E0
70: 883355AAC0D40100 AA55AA5597060B00
30: 883355AA7D1C0000 0000001004ED00E0
70: 883355AAC0D40100 AA55AA5597060B00
30: 883355AA641C0000 0000001004ED00E0
70: 883355AAC0D40100 AA55AA5597060B00
30: 883355AA741B0000 0000001004ED00E0
70: 883355AAC0D40100 AA55AA5597060B00

I attach files that can be viewed in Saleae Logic software .

Best regards,
Hi AWa.

Thanks for this post. I also have a da Vinci 2.0A duo with the latest firmware and software.
I'm very interested by resseting the eeprom of my cartridges.

Your tests are very interresting. Reading the previous posts, I can say filament length remaining is at address 0x34-0x37: for example, at t=60s we have 0x00001CAF (equ to 7343). At address 0x74-0x77, we have the original lenght value 0x0001D4C0 (equ to 120000). The cartridge seems to be a stock one (only 120m). Can you confirm? If this is OK, the value is in mm.
Only line 30 is writed

I have other question:
Do you have a new cartrige? if yes, can you read its EEPROM and post the result before using it? Can you use it and post a new read of the EEPROM? By this way, we will know if something is writed to mark the cartridge as "already used".
Your cartridge seems to be near empty. When it is empty, can you read again the EEPROM and post it. Maybe we can see if these is some data to say "the cartridge is empty!"

I will try to find on my PC computer this WE if there is any informations of cartridges in files of software or in the registry of windows. Maybe there is data about empty cartridges.

Best regards.

Sorry for my bad english :-(
I use arduino to read and reset EEPROM chips for my 1.1 plus. Did the chips or data on them change? Or are they not the same as the ones from 2.A Duo?


Updating EEPROM...
Dumping Content after modification...
00: 5A4142000034324B80A9030080A90300 ZAB..42K........
10: D2005A00544855533031303900000000 ..Z.THUS0109....
20: 000000003400000001010101AA55AA55 ....4........U.U
30: 883355AA80A90300AA55AA5507830A00 .3U......U.U....
40: 5A4142000034324B80A9030080A90300 ZAB..42K........
50: D2005A00544855533031303900000000 ..Z.THUS0109....

Using EEPROM programmer I checked the color codes (range from 60 to 100 only).
Colors 60-64 and 91-100 are reported as Unknown, only capital letters are used.

Recognized colors:

DEC  HEX      Symbol    Color
65     0x41    A     Purple
66     0x42    B     Blue
67     0x43    C     Neon tangerine
68     0x44    D     Virdity
69     0x45    E     Olivine
70     0x46    F     Gold
71     0x47    G     Green
72     0x48    H     Neon green
73     0x49    I     Snow white
74     0x4A    J     Neon yellow
75     0x4B    K     Black
76     0x4C    L     Violet
77     0x4D    M     Grape purple
78     0x4E    N     Purpurin
79     0x4F    O     Clear yellow
80     0x50    P     Clear green
81     0x51    Q     Clear tangerine
82     0x52    R     Red
83     0x53    S     Cyber yellow
84     0x54    T     Tangerine
85     0x55    U     Clear Blue
86     0x56    V     Clear Purple
87     0x57    W     White
88     0x58    X     Clear magenta
89     0x59    Y     Yellow
90     0x5A    Z     Nature

Define for C:
#define PURPLE          0x41
#define BLUE            0x42
#define NEON_TANGERINE  0x43
#define VIRDITY         0x44
#define OLIVINE         0x45
#define GOLD            0x46
#define GREEN           0x47
#define NEON_GREEN      0x48
#define SNOW_WHITE      0x49
#define NEON_YELLOW     0x4A
#define BLACK           0x4B
#define VIOLET          0x4C
#define GRAPE_PURPLE    0x4D
#define PURPURIN        0x4E
#define CLEAR_YELLOW    0x4F
#define CLEAR_GREEN     0x50
#define CLEAR_TANGERINE 0x51
#define RED             0x52
#define CYBER_YELLOW    0x53
#define TANGERINE       0x54
#define CLEAR_BLUE      0x55
#define CLEAR_PURPLE    0x56
#define WHITE           0x57
#define CLEAR_MAGENTA   0x58
#define YELLOW          0x59
#define NATURE          0x5A


Forum Jump:

Users browsing this thread: 1 Guest(s)