The Dimension SST 768 is one hell of a machine, but has one major setback besides its initial price – it’s professional prototyping, what can you say? – the price of P400 ABS material cartridges. These can cost up to $260 each, whereas you can easily purchase your own spools of ABS and HIPS (support material) for no more than $40-50 per 1kg spool in most cases (PP3DP’s material is some of the best available). Anyway, on to the actual hack.
Now, all of this would not have been possible without HaveBlue and his post over at haveblue.org that details a few key points about these printers (it may work for more than just the SST 768, please let me know if anyone tries it!). On a side note, I would definitely recommend checking out a few of his other posts on 3D printing. I also would like to thank my friend Ian/puppyofkosh for all his help on investigating the EEPROM of various cartridges – his knowledge of programming and hexadecimal was invaluable.
A quick explanation of how the printer keeps track of how much material is remaining is in order. The amount of remaining material in a cartridge is saved in an EEPROM chip (DS2433) on a small PCB that connects directly to the printer. This is a 512 byte (4kb) EEPROM with a hex value for how much material the cartridge has left – the problem being that it’s encrypted by some unique value, probably the serial number. Second, the printer itself keeps a running list of what cartridges have been inserted and expended throughout its lifetime.
The main idea is to dump a cartridge’s EEPROM at 100%, let it reach 5-10% through regular use (doesn’t exactly matter what value it reaches, that’s up to you), and then write back your 100% dump to the same cartridge, thereby preserving the encryption. In addition, it would be nice if the file (/system.dat, and in some cases /mariner/config/system.dat) that keeps track of used cartridges could be deleted on boot. Luckily, the printer runs Linux (RHEL 8), so that should make things a bit easier and more familiar.
Required hardware:
- Phillips screwdriver.
- Serial cable, nothing fancy.
- IDE to USB adapter (required if you do not have any IDE ports on your computer’s motherboard, recommended even if you do as it does make life a little easier)
The way this can be accomplished is as follows:
- Take out the hard drive from the 3D printer (very easily accessible, just unscrew the 3 screws on the side door).
- Make an image of the drive using “dd” – an excellent program that works extremely well.
- UPDATE: If you are using Windows, download a program called Win32DiskImager and use that to create a backup image of the hard drive instead of following the below – it should be much easier. Also, be sure to check the simplified guide (with a pre-made image coming soon) here:
- Using Virtualbox or your virtualization software of choice, restore the image you made of the hard drive into a VM. If you are using Virtualbox, I would suggest using the VBoxManage tool to convert the raw image to a VDI, and then using that VDI as a hard drive attached to a virtual machine in Virtualbox.
- Change the root password however you want (I manually edited /etc/shadow from a LiveCD in the virtual machine, you can type “linux single” into the LILO prompt before booting up the system and issuing passwd, etc.)
- Make the necessary edits to rc.local to delete the system.dat file(s) on boot, enable SSH (not necessary, but may be helpful in the future) by adding another entry to rc.local, and edit iptables to allow SSH.
- Create an image of the virtual machine you just made all of the changes in. I would recommend booting a LiveCD in the VM, and using dd with a pipe to gzip (with a further pipe to scp/ftp if you wish, although the image should only come out to ~870mb when compressed – easily fitting into the LiveCD’s temporary RAM storage).
- Take this newly created, compressed image, and use “gzip -dc” with a pipe to “dd” to image the printer’s physical hard drive. Alternatively, you could have imaged the drive directly from the LiveCD in the virtual machine (something like dd if=/dev/sda of=/dev/sdc where /dev/sdc is the printer’s physical hard drive that you attached to the VM.)
- Put the hard drive back into the printer, and turn it on. With any luck, it should boot and you should have SSH access to it. If it does not boot, restore the vanilla image back to a VM, and try again. If you do not have SSH access, make sure you edited iptables correctly – keep in mind those lines are processed in order! Add the line allowing connections to port 22 as high up in the list as possible.
The above is what I like to refer to as “Part I” of the hack. Moving on to Part II, now we’ll actually read and write to the cartridge’s EEPROM.
- This is where that serial cable listed up top comes in. Notice the serial port on the back of the printer labelled “DIAG”? That’s the diagnostic console, and it can perform extremely low level functions that even having root access doesn’t give you. Connect one end of your serial cable to the port, and the other end to some computer.
- I would suggest PuTTY, but I suppose HyperTerminal and other terminal emulation software would work as well. Configure your software of choice to a baud rate of 38400, 8 data bits, 1 stop bit, no parity, and XOn/XOff, hardware, or no flow control (try each until one works)
- If everything worked, you’ll be greeted by a very minimal console (should just be a black or white screen).
- Issue the following command to read the cartridge’s EEPROM: “er 0 0 512″. Replace that command with “er 1 0 512″ if you wish to dump the support material cartridge’s EEPROM. Give it a few seconds, and it should print out something that looks like this. Manually copy and paste that entire chunk, and save it to a file on your local machine. Using Notepad++ (my software of choice), or any other text-editing program, format the file so that it looks like this, a comma-separated, one-line string of hex values. You can safely remove the “Model Cartridge ID” and any such other extraneous text. Please note, as stated earlier, my 100% dump will not work for your cartridge’s EEPROM chip as each has a different serial number that is used to encrypt the data on it (Thank you, Ian).
- Using Notepad++ (although one could also write a quick Perl script to sift through the data and format it as needed) it is actually quite easy to format the file as needed. By using Alt+Click+Drag, you enter column select mode, and can easily remove the columns on each side. Next, use the search and replace function in Notepad++ to search for and remove all “\n”, and “\r” characters, replacing them with spaces. You should now have a space-separated, single-line string of hex values. Simply use the search and replace function one more time to replace all spaces with commas, and then put a double-quote at each end.I made a quick JavaScript tool to automate formatting EEPROM dumps so they can be written back.
- Keep this file around for when your cartridge reaches a low percentage of remaining material, and then issue the following command via the console: “ew 0 0 {your comma-separated, double-quote enclosed 100% dump from the same cartridge here}”. Replace with “ew 1 0 {data}” if you wish to write your previous support material dump to the support material EEPROM.
- Reboot the printer, and voila – you’re back to 100%! Just make sure to re-spool the cartridge, and you’re good to go!
So, what just happened during those last two steps? You overwrote the near-empty value on the cartridge’s EEPROM with its previous 100% dump/value. Since the dump came from the same cartridge (albeit earlier in time), the unique encryption key is preserved, and the cartridge is ready to be used again. Upon rebooting the printer, the printer starts up, deletes the system.dat file(s), and sees the cartridge you are using as a brand new one that has never been used before. At last, your newly re-spooled cartridge is ready to print again!
I’d love to hear any tips, alternate methods, and/or experiences in the comments. However, your standard disclaimer applies: I am not responsible for any damage to any of your hardware.
Pingback: This hack can refill your Stratasys 3D printer - Hack a Day
Superb writeup! One simplification that I would suggest is to only read/write the 12 bytes that actually change on the EEPROM – that makes things simple enough that you could type them in by hand. I think er 0 88 12 and ew 0 88 “1a, e4, c0, c3, 9d, 9f, 7e, 2e, ce, 52, 4b, b9″ would be the two commands for your cartridge.
Very nice, hack! This is something probably a lot of people have been waiting for.
Maybe readers are also interested in my hack, I posted today: The file format of the CMB files created by the catalyst software.
http://azttm.wordpress.com/2012/09/22/inside-the-stratasys-dimension-catalyst-cmb-file-format/
Happy hacking!
Pingback: Aaron Kondziela » Blog Archive » Stratasys Dimension SST 768 DIY VGA Connector
How does the usual reprap filament fair on the 768 ? Any issues to report?
The generic reprap filament is rather low-grade as it tends to smoke a bit, crud up the nozzle, etc. I would suggest going with PP3DP material (very close to Stratasys P400 quality) – the best easily accessible material (and around the same price per kilogram as RepRap material).
I’m interested in performing this process to my 768 printer, however I am having some technical issues with it. It is giving me an error “code 14, 7″. We have not had a service contract for the machine for a couple of years, and are afraid of how much it is going to cost when
When your machine needs service do you perform the service yourself?
I assume that performing this hack makes the unit non-serviceable by Stratasys technicians?
Thanks for the write-up!
This may help you on your error code. Sounds like you have a homing sensor issue:
14,05 Abort : Unexpected contact
with X axis home sensor.
14,06 Abort : Unexpected contact
with X axis EOT sensor.
14,07 Abort : Unexpected contact
with Y axis home sensor.
14,08 Abort : Unexpected contact
with Y axis EOT sensor.
1. Power cycle the machine.
2. Check for an obstruction hitting the model.
3. Check to make sure the homing sensors are clean.
4. Using Maraca/LED’s/test points: Check if home & limit boxes are
checked. If so, check limit switches and/or umbilical cable for X sensors,
mid unit harness for Y sensors.
5. Manually move the XY table in X and Y checking for smooth operation.
6. Belt Drive XY Table – Check and adjust belt tension.
7. Cable Drive XY Table – Check and adjust cable tension.
8. Incorrect length substrate arm installed. Replace substrate arm with
the correct length.
9. Replace XY table. Failed bearings in the Y drive shaft possible root
cause.
Many thanks Mike!
I’ll look into those options. I had no clue what the issue was. Those give me a lot of ideas. I’ve mostly just cleaned the machine from the front and have not yet opened up the back or sides of it. This gives me the opportunity to do so!
I can’t thank you enough Mike. This proved immeasurably helpful. It ended up being exactly what it said. The Y Home optical sensor had a burned out LED. I Googled the part number and fixed it for like $10. So amazing. Thank you!
We had similar errors on our dimension SST. Aside from replacing the sensors, we also ended up having to replace the linear bearings on all three axes. The good news is that they (and their end caps) are easily obtainable from McMaster-Carr. The bad news is that the shafts may be pitted and those aren’t directly available. We had to use our machine shop to trim, drill, and tap to fit.
Reassembly is tedious but not terrible. Realignment of the shafts is best done with simple custom fixtures (easy if you have the machine shop resources to make the shafts in the first place).
Incidentally, our machine was purchased in 2006 or so.
Thank you very much for your post. You gave me the impetus to take the next steps needing in getting this machine working.
I replaced the Y Home sensor, but it looks like that wasn’t enough. The machine starts up fine, but once it reaches temperature it bombs out. During the second homing procedure directly before building it errors out with the 14, 7 Error. I thought maybe the sensor was sensitive to heat. I bought extra sensors for Y EOT, X EOT and X HOME. I’ll go ahead and replace those, and if that doesn’t work, I’ll swap out the bearings.
I hope, hope, hope the shafts are ok. I just lubed them and I didn’t notice any pitting.
Again, many thanks.
Hi. I have the same problem with my dimension elite printer.It is giving me error codes “14,5 & 14,6″. And I read your instruction but I cant undrstand these steps.Could you please leave some pictures of device part.I dont know for example where the homing sensor is. Thank youi
Hello Dan, What you explain here is very interesting, I have a HP 3D printer (just like uPrint) and it is necesary for me to hack it but I don´t have enough technical knowledge, ¿Could you please give me a more detailed explanation of this procedure?, something like a step by step tutorial.
Thank you very much.
Hi Daniel,
Unfortunately I don’t know too much about the uPrint, but I do hear things have been changed up quite a bit. It will probably require more serious hacking (probing and writing to the EEPROM manually), but that’s just a guess.
so I was able to dd an image and then used
VBoxManage convertdd dimension.img dimension.vdi –format VDI
and added it to a new vm
however on boot i got “bad pmd in pte_alloc”
what happened
I had bumped the ava ram to 1024 MB vs the default of 512 MB –dont change it :)
Hi Travis,
Try lowering the amount of RAM allocated to the VM down to 128MB or so. It seems like this may be a bug in earlier kernel versions. If that doesn’t work, you can actually just edit the files on the hard drive directly (but keep the dd image as a backup of the original image).
Hello folks,
I’m interested to know if it would not to be possible to “upgrade” a SST 768 to a Elite version. It seems the hardware should be equal, my be just the tips are different and for sure some part of the Firmware on the HDD. Anyone have experience on this topic? What are the exatly differences between the two printers? Would be great to give new breath with 0,17 mm slices on our old SST 768 printers.
Another question: any chance to use the Insight software to create toolpaths for the SST 768 printers? The Catalyst Ex is very limited.
Very interesting. I would be also interested to try this on Dimension SST1200es.
Going to need very detailed instructions though.
Hello Dan,
I’m having some challenges getting the computer to communicate with the printer. Looking at the back of my Dimension 768 Printer, the Diag serial port is a male DB9 connection. Were you using a female to female null modem serial cable, or a male to female serial cable with a gender changer? Or possible some other kind of serial cable? Any insight is greatly appreciated!
Hi,
I used a regular DB-9 female-female serial cable (one end in the printer, one end in a computer) in order to communicate with the printer. I think the issue here may be that the the printer requires some specific line settings / baud rate. Using PuTTY, here’s what worked for me:
Baud rate: 38400
Data bits: 8
Stop bits: None
Parity: None
Flow Control: Hardware
Let me know how it goes!
Well shoot. I’m going to have to throw myself at the mercy of the Gnurds community for this one.
I’ve done everything I can and I think my master hard drive is screwed up. I hope someone can help me with this.
I first backed up the entire master hard disk with True Image. I then restored the entire disk to a different hard disk. The restored disk wouldn’t boot up the printer, but the master still did.
I then did tried a dd -> raw -> VDI -> raw -> dd operation.
I booted up the Ubuntu machine, then plugged in the USB/IDE cable with the master drive attached. I ran the following command to the printers(HAL) hard drive sdc on a Ubuntu linux machine(Spitfire) to make an entire copy of the drive.
sudo dd if=/dev/sdc of=/media/spitfire_raid/hal.bin
As soon as the copy was complete, I shutdown the machine and removed HAL’s master hard drive. Restarted Spitifre and renamed the file hal.bin to hal.raw
mv hal.bin hal.raw
Then I made a VDI trhough conversion with VBox Manage
VBoxManage convertdd hal.raw hal.vdi –format VDI
I tried to open the VDI in virtualbox and it gave me a root error. I went ahead and converted it back to raw to test the raw-> VDI->raw pipeline with this command.
VBoxManage internalcommands converttoraw hal.vdi hal_clone.raw
Then dd’d it to a different hard drive essential making a clone.
sudo dd if=/media/spitfire_raid/hal_clone.raw of=/dev/sdc
Installed the clone into the computer it didn’t work. So then I dd’d the original raw file to the cloned hard drive.
sudo dd if=/media/spitfire_raid/hal.raw of=/dev/sdc
Didn’t work. So then I had an “oh crap” moment and installed the original HAL Master into the printer and it didn’t work.
Anyone have an idea of where I went wrong and how I might go about fixing this problem? Any insight is greatly appreciated.
OK, I’ve made a little progress here on this. I couldn’t get the hard drive to boot on VirtualBox. Turns out the drive was setup in VirtualBox as an SATA drive. I changed that to IDE and it booted up in VirtualBox through LILO. However, If I just let it start itself it bombed out with the following error.
MASTER login: DPM: invalid signature: expected ######## got 0
DPM: failed to acquire 28 byte I/O memory range at 0xd1000
DPM: invalid signature: expected ######## got 0
DPM: failed to acquire 28 byte I/O memory range at 0xdc000
Anyone understand what that error is? Some kind of hardware dongle?
I converted this VDI to raw and back to a VDI again and it still booted up. So my so my VBoxManage conversions must be working OK.
I then dd’d the raw image onto a hard drive I bought off eBay with the exact specifications of original master. The machine still doesn’t boot up. So I am working on getting a serial connection to the machine.
Dan, I have a couple of questions.
1. Why is it necessary to change the root password?
2. The password in /etc/shadow is encrypted right? You know what kind of incryption?
3. In the /etc/rc.local file I assume you just put a command in there like…
rm -rf /system.dat
After that what command did you put in there to boot up the SSH? I’m just starting to research iptables. I have to learn more about that. Any advice is greatly appreciated.
All the Best
Strictly speaking, changing the root password is not necessary – I only did it so I could have root access to the printer. The password in /etc/shadow is indeed encrypted, but if you edit it to be blank, the password will default to no password.
Also, enabling SSH and configuring iptables is also not completely necessary – those things are only if you want remote access to the 3D printer.
The only change that really needs to be made is adding “rm -rf /system.dat” to /etc/rc.local or /etc/init.d/rc.local (whichever one is present on the printer) so that the file that keeps track of which cartridges have been used is deleted on every boot.
Excellent. Thank you Dan for that further description.
I also wanted to pass on that I figured out what was wrong with my system and clone discs. The discs appeared to be “removed improperly”, so they needed to be repaired. I executed the following commands to rebuild them in an Ubuntu (12.04) terminal.
fsck /dev/sdc
sync
sync
/dev/sdc is the location of the disc I had attached to my computer. Your address may be different. I hope that helps someone!
Hello Dan,
do you have any idea what are the hardware and software differences between the Elite and the 768? Looking on the 768/Elite Service Maintenance Guide it seems to be the same machine. Any idea where the Firmware recognize the machine type?
I would like to try to “upgrade” an 768 to an Elite.
Hi Jarno,
There may only be a few minute differences in hardware – the rest is software. I’m not sure how to fake a 768 into an Elite, but it definitely sounds possible.
Hi Dan,
I suppose during the boot sequence their is somewhere a data file defining the machine type, may only on the HDD, may be on the controller firmware also.
On the hardware I suppose the Tip are different, but gor no info at all about, and may be the Z-axis reduction pulley have a different gear ratio. Are some one here that could help to figure this out? Would be nice to have a image file of the Elite HDD in order to test it on a 768.
Hi Dan,
Thank you for detaling this hack. The serial connection part seems easy but the hard drive hacking will surely twist my melon. Do you think 768 hard drives are unique or can be shared? The idea of simply fitting a ready hacked drive sounds good
cheers,
chris
Hi Chris,
It’s certainly possible as the data on the drives is nearly the same – except for one thing. The individual printer’s MAC address would need to be edited in a few config files before the printer would be able to establish network connectivity. I think I’ll be making another blog post on a more simplified process as a good portion of the hard drive hacking is simply to enable remote access to the printer (useful, but not 100% necessary).
Do you by any chance know where the head calibration settings are and how to access them? I need to adjust the head to table distance in detail
btw, are you in the UK or USA?
I’m in the US.
I definitely remember seeing them somewhere.. I’ll do some searching and let you know.
Hi – your hack is quite amazing and detailed. It addresses an issue I have discussed with my coworkers since we have opened “empty” filament cartridges and found there is still significant material remaining; ostensibly, according to StrataSys to allow for troubleshooting, system setup, etc. We aren’t ready to jump into hacking our system yet or refilling cartridges but maybe someone out there can help with another issue we are having. We have been using our SST 768 printer for about six years without issue and have not had a maintenance contract for the at least the last three years. Our machine had two environment fans crater so we purchase replacements and installed them. We believe we reset on the internal thermal interlocks in the environment chamber and connected all the disconnected cables, etc. On restarting the system the environment temperature does not rise to operating temp and if I try to go to “maintenance” mode the machine gives error 18,5. I don’t know where the original CD is (in fact I think the installation rep probably kept the thing). Can anyone tell me what the error code 18, 5 indicates? Thanks – and good luck with your hacks (system optimizations)!
Hi Brian,
I was finally able to locate some information on your error, but unfortunately it doesn’t tell you anything more than you already know. The error code simply means that the “chamber temperature is incorrect” – sorry I can’t be of any more help than that.
EDIT: Check out MaracaEX and try raising the chamber temperature with that. http://gnurds.com/download/gnurds/maracaex.zip
Hi Dan,
Thanks for the info on Maraca. I used it to connect to the printer and all parameters seemed proper so I was able to rule out a setpoint error. We did a little trouble shooting on the main power distribution PCB and found the Crydom solid state relay for the 120 VAC circuit (heater power) was not activating even though it had the proper enable signal. After replacing this relay (~$28 ) the machine is up and running. So, if anyone else gets a 18,5 error you may want to consider checking this component. Thanks again for the assistance and good luck with your projects – once again I am impressed with your deciphering the operations of the printer and developing hacks, functional extensions, optimizations, etc! :-)
Hi Dan
You seem to be the man who is helping everyone out! I am trying to get my dimension working
sorry for being a bit of a newbie, but im trying to learn as fast as i can..!
I have already picked up some of your and have hyperterminaled in and found a dodgy thermocouple that needed a wiggle.
now I have had the same problem with it saying the master login is incorrect. Sometimes it goes past this point and displays the following.
Mariner display, fatal error: comm: :configure: tcsettr failure
Comm error: input output error
0
0
8001
32769
Are there any poiners with this one? could it be so simple that the LCD display is not correctly plugged in?
Cheers!
Will
Hi,
We have a Dimension Elite machine and for the last few years it has been great.
But recently we came across an official cartridge which would print soluble support for the first 2cm of Z height and then stop printing, while continuing with model. On investigation the filament was snapping just before it got to the feed rollers. At first we thought it was one cartridge, but now the problem has returned.
Has anyone else had similar problems?
Cheers
Rob
We dont have the elite but we have had this happen from time to time. I think it may have to do with the age of the support cartridge. We purchased a large number of cartridges almost 6 years ago and are still using them, but from time to time have problems feeding support.
Friends, I need to get the maintenance and service manual for my SST768, since I have problems with sensors typical 14.7 in X and want to change. If you can help would be great, I am aware of your posts. Someone could get the chips for the cartridges ABS?
Thanks Martin [email protected]
I see where you have foud a suitable material for the printing plastic, has anyone specified an alternate for the “support” material?
Thanks
[email protected]
Last I checked, it’s being worked on… but that’s as far as I know. Try looking up “High Impact Polystyrene” for more info. From my understanding, the formula is rather difficult to get just right as compared to ABS.
Finally, have found 2 files in new firmware with cartridge data.
First is a small one file: /mariner/config/system.dat
Second is relatively big (~500-1000kb): /var/lib/stateless/state/var/lib/dbus/xdh-cache
You need to change /etc/rc.d/rc.local
Add to the end of file:
rm -f /mariner/config/system.dat
rm -f /var/lib/stateless/state/var/lib/dbus/xdh-cache
Yep, great to confirm that /mariner/config/system.dat is indeed one of those files. Also make sure you have /system.dat covered; thank you so much for reporting back (especially on xdh-cache)! But remember, always make a backup of everything you wish to delete.
Do you know if this can be done with a UPrint SE?
Just had an idea, maybe you guys can provide some insight….What records the use of material/spool fill level on these machines?
Reason I ask is because I was wondering if there was a way to leave the cartridges in but bypass the spool inside the cartridge to a spool outside of the machine.
I do not have one of these machines yet but its on the way so I wanted to look into this.
What do you guys think?
Hi Dave,
A small chip (EEPROM) on the cartridge records how much is left, and that value is also written to one of the system.dat files on the printer (just /system.dat on SST 768 printers). A way to do it is simulate an EEPROM via a microcontroller, but have that EEPROM reset back to 100% every time it goes down even a percentage. As far as using a spool that is outside of the 3D printer, you can probably do this if you use the cartridge as a sort of intermediary – feed filament into the cartridge from an external spool, and then the 3D printer will grab it via the cartridge (may require a little bit of cutting into the cartridge to be able to actually feed the filament while the printer is on like that). Once everything is set up, resetting the cartridge back to its initial value is trivial.
Dan, so if I understand correctly, as the filament is fed, the printer keeps track of what is used and records it on the chip? Or does the cartridge somehow read how much is used? Hmmm
The printer keeps track of what is used, and writes the value back to the cartridge’s EEPROM. As a safety, it also keeps a file with all of the cartridges and their percentages that it has ever seen. For example, try pulling out all of the material from a full cartridge + then inserting it back in. The printer will still think that it is full.
I understand. So I guess fooling the printer about what it is using is out of the question.
Has anyone looked into hacking the programming on the unit to disable the whole cartridge recording/use system? I would guess that is proprietary to Stratasys and much more complicated….
In any case I will definitely look into disabling the use of the cartridge for an outside spool once my printer arrives. I have a whole machine shop here so I should be able to come up with something. Not having to even worry about refilling the cartridges would be nice….