Skip to content
Yancey Wang edited this page Apr 4, 2022 · 17 revisions

Backgroup

This project uses Arduino to reset the chip inside your Canon printer's MC-G02 Maintenance Cartridge, so that bring the chip back to a like-new status, and reuse the cartridge again and again.

What is Maintenance Cartridge

Maintenance Cartridge is a cartridge inside some printers, not limited to Canon, it's the place where the "wasted inks" are stored. This cartridge will eventually become full, and you printer will reuse to print and more. Then normally you have to buy a new one from Canon.

What is MC-G02

MC-G02 is one type of Maintenance Cartridge used inside the recent Canon PIXMA G series printers.

What Stops you from reusing the MC-G02 Maintenance Cartridge

You can detach the MC-G02 cartridge printer pretty easily, and you can clean it by youself and remove the accumulated ink inside. Canon doesn't use a sensor to detect how much ink is indeed inside the cartridge; instead there is a chip on the cartridge, which behaves as a "counter", and get increased each time the cartrige is used. Even if you have cleaned wasted ink inside the cartridge, the counter inside chip won't got decreased, and the printer will still refuse to print.

Back to this Project

This project allows you to "reset" the counter inside the chip mentioned above. Then you can resue the MC-G02 cartridge.

Usage

Prerequisite

To use this project, you need:

Know basic usage of Arduino, like upload program to Arduino and run, read output from Serial Monitor.

Remove the chip from the cartridge and connect it to Arduino.

Overview

This project consist of a read(dump) program and a write program.

The write program is literally the resetter of the chip. But in order to use the write program, you need a rom.

To get a rom, you need either:

  1. get it from someone else who already did the dump, maybe on the internet.
  2. dump a rom by youself.

The dumped rom just allows you to set the cartrige back to exactly the same status as the time the rom is dumped, thus can be used to reset the cartridge. So if you want to dump it by youself, do it early, before you cartridege is filled up.

Connect the chip to arduino

Detach the cartridge from printer, remove the chip from the cartridge, and connect the wires.

Those two resistors are of 10k ohm, used as "pull-up" resistors. The circut is suggested by [1].

Dump the rom (if you can't get a rom from others)

Open the program inside sketch_hack_read with Arduino IDE, upload it to Arduino and run.

If everthing is as expected, you will get the following output from Serial Monitor (use baud rate 9600):

Start Dumping...
Below is your rom:

const unsigned char my_rom1[] PROGMEM=
{
0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,...,
...
...
}

Then the {0xXX,0xXX,0xXX,0xXX,...} stuff is the rom you dumped. Each 0xXX represents a byte, you should get 2048 such bytes. Since the chip is a eeprom of 16Kbits. Save this for future use, better with the const unsigned char my_rom1[] PROGMEM= prefix, so that it can be copied as a whole conveniently.

If you get something esle such as Wire Not Ready!!!, then there must be something wrong. (e.g. your wire is not correctly or solidly connected).

Note

It's suggested to dump it at 2 times, and make sure the 2 dumps are identical, in case you get a corrupted dump.

Write a dumped rom

Open the program inside sketch_hack_write with Arduino IDE, You copy the whole const unsigned char my_rom1[] PROGMEM={0xXX,0xXX,0xXX,0xXX,...}, and paste it into the correct place of the program opened in Arduino IDE(there is an indicator to help you locate the place).

upload it to Arduino and run. If everthing is as expected, you will get the following output from Serial Monitor (baud rate 9600):

Start Writing Rom...
current writing page:0
current writing page:16
......
current writing page:112

Write Done!

Start Dumping for Verification...
Check if this dump matches with before by youself:

const unsigned char my_rom1[] PROGMEM=
{
0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,...,
...
...
}

The program first write the dumped rom into the chip, and then start a verification dump. You at least need to do a fast eyeball check of the value: the verification dump should be idential to the rom you used for write. For extra safety, it's suggest to make sure those values are identical by some diff tools (e.g. vimdiff).

Note

Both the read program and write program used [2] [3] as reference during writing.

All Done.

Your cartridge chip is now "resetted". Insert the chip back to the cartridge and attach the cartridge into printer. (You possibly want to clean/dry the wasted inks inside before reusing the cartridge.)

Q/A

Q: Why not you (the author) share a dumped rom, so that I don't need to dump it by myself.

A: That content dumped from Cannon chip might has somekind of copyright, sharing it might involve me into legal trouble.

Reference

[1] https://microcontrollerslab.com/24c04-two-wire-serial-eeprom-interrfacing-arduino/

[2] https://www.youtube.com/watch?v=WZ5GESc6424&t=629s&ab_channel=SMtrainingacademy

[3] https://github.com/P-Find/arduino-24c16

Clone this wiki locally