reversing-mono4k icon indicating copy to clipboard operation
reversing-mono4k copied to clipboard

Reverse engineering of the Anycubic Mono 4K

Discord

Reverse engineering the Anycubic Photon Mono 4K

This documents the reversing of the Mono 4K, which helps in writing the open-source firmware Turbo Resin.

Table of content

  • Part 1: Discovery of the hardware and firmware extraction
  • Part 2: Planning the read of the external flash
  • Part 3: Creating a Rust development environment
  • Part 4: Dumping content of the external flash
  • Part 5: Graphics extraction from the external ROM
  • Part 6: Taking control of the user-facing LCD display
  • Part 7: Detecting touches on the display and improving on the original firmware
  • Part 8: Driving the Z-axis stepper motor
  • Part 9: Driving the LCD Panel, and displaying a print layer from the USB stick
  • Part 10: Elegoo Saturn: display images from USB to the LCD panel

Introduction

The Anycubic Mono 4K is my first 3D printer. It's been quite a steep learning curve to print with resin, but it's really satisfying to make objects once the workflow is ironed out.

Here's the printer.

Anycubic Mono 4K

Here's an example of a printed object.

Printed Bracket

~~There are visible lines due to the lack of anti-aliasing support on the printer. Its LCD screen outputs only fully transparent, or fully opaque pixels, no gray-scale. Apparently, we have to wait for a firmware update, but I'd rather not wait.~~

Update: The original firmware handles anti-aliasing just fine.

Reverse engineering the printer will guide our implementation of a new firmware, Turbo Resin, so we can add the features that we want.

Resources

  • Datasheets: datasheet folder
  • Original firmware: firmware folder
  • UI images: /firmware/ui folder
  • PCB photos: pcb folder
  • Pin config: print_ports_config.py and port_config.txt
  • Turbo Resin firmware: (https://github.com/nviennot/turbo-resin)
  • Our discord channel: https://discord.gg/9HSMNYxPAM