Итак задача - запрограммировать EEPROM 24c04 из чипа
CRUM картриджа MLT-1043S. Картридж для принтера Samsung
ML-1661/1676/1861/1866/1866W.
Имеется девайс i2c-tiny-usb.
Софт, который потребуется: i2c-tools, hexdump, hexedit и самособранный eeprog. Последний ловко качается исходниками и компилируется в свою же папку, при этом никак не интегрируясь в систему и не представляя призрачной угрозы portage.
Далее всё подключаем\зажимаем и проворачиваем следующее:
Убедимся что поддержка программатора есть в ядре:
Загружаем нужные нам модули
Проверяем жив ли интерфейс:
Проверяем, а не висит ли на этом интерфейсе нечто похожее на EEPROM:
Видим 2 устройства - это нормально. 24с04 отражается в память двумя кусками. Последовательность логична - первые 256 байт на первом сегменте, вторые - на втором.
Считаем содержимое в бинарном виде с обоих сегментов собранным eeprog и пишем вывод в файлики:
Параметры программы:-f = не спрашивать, /dev/i2c-0 = с какого устройства читать, 0x50 = адрес, который мы узнали выше, -r = чтение, 0:256 = диапазон чтения от 0 до 256 байта.
Просмотреть считанное легко и просто используя hexdump -С.
Далее привожу выхлоп своих данных:
Теперь нам нужно обнулить счётчики и поменять номер картриджа. Делается это в любом HEX-редакторе, например hexedit -s(включает, ИМХО, более учеловеченное отображение).
Рассмотрим на готовом:
В первом файле мы обнулили счётчики - это первые 3 строки.
Во-втором файле мы изменили версию чипа CRUM, подправив одну цифру. Эта цифра при сбросе чипа будет всегда различаться, и если совпадёт - принтер не примет картридж. В строке |00783513.2......| можно менять всё что угодно, или всё что угодно до точки с двойкой (?).
В строке 00000080 мы убрали все a5 a5 a5 a5. Это, как говорят некоторые особо разбирающиеся люди - прогресс бар.
Всё. Зашиваем обратно:
Параметры программы:-f = не спрашивать, /dev/i2c-0 = на какое устройство писать, 0x50 = адрес, по которому писать, -w = запись, 0 = начиная с 0-ого байта.
Вуаля!
Имеется девайс i2c-tiny-usb.
Софт, который потребуется: i2c-tools, hexdump, hexedit и самособранный eeprog. Последний ловко качается исходниками и компилируется в свою же папку, при этом никак не интегрируясь в систему и не представляя призрачной угрозы portage.
Далее всё подключаем\зажимаем и проворачиваем следующее:
Убедимся что поддержка программатора есть в ядре:
Device Drivers > I2C support > I2C device interface <*> (to get access through /dev/i2c-X) Device Drivers > I2C support > I2C Hardware Bus support > Tiny-USB adapter <*>
Загружаем нужные нам модули
modprobe i2c-tiny-usb i2c-dev i2c-core
Проверяем жив ли интерфейс:
i2cdetect -l i2c-0 i2c i2c-tiny-usb at bus 002 device 008 I2C adapter
Проверяем, а не висит ли на этом интерфейсе нечто похожее на EEPROM:
i2cdetect 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Видим 2 устройства - это нормально. 24с04 отражается в память двумя кусками. Последовательность логична - первые 256 байт на первом сегменте, вторые - на втором.
Считаем содержимое в бинарном виде с обоих сегментов собранным eeprog и пишем вывод в файлики:
# ./eeprog -f /dev/i2c-0 0x50 -r 0:256 > dump1 # ./eeprog -f /dev/i2c-0 0x51 -r 0:256 > dump2
Параметры программы:-f = не спрашивать, /dev/i2c-0 = с какого устройства читать, 0x50 = адрес, который мы узнали выше, -r = чтение, 0:256 = диапазон чтения от 0 до 256 байта.
Просмотреть считанное легко и просто используя hexdump -С.
Далее привожу выхлоп своих данных:
# hexdump -C dump1 00000000 01 33 02 39 01 33 2a df 01 61 ab f4 ff ff ff ff |.3.9.3*..a......| 00000010 00 00 06 c3 ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000020 00 00 1c 0d ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000030 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100 # hexdump -C dump2 00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000010 ff ff ff ff ff ff ff ff 50 54 31 36 36 43 48 4e |........PT166CHN| 00000020 ff ff ff ff ff ff ff ff 43 52 55 4d 2d 31 31 31 |........CRUM-111| 00000030 30 30 37 38 31 35 31 33 01 32 de 9f 07 ff ff ff |00781513.2......| 00000040 02 c7 9a e6 ff ff ff ff 00 01 4c 08 ff ff ff ff |..........L.....| 00000050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000070 0a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000080 a5 a5 a5 a5 50 54 31 36 36 43 48 4e ff ff ff ff |....PT166CHN....| 00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100
Теперь нам нужно обнулить счётчики и поменять номер картриджа. Делается это в любом HEX-редакторе, например hexedit -s(включает, ИМХО, более учеловеченное отображение).
Рассмотрим на готовом:
Для первого куска: 00000000 00 00 00 02 ff ff ff ff 00 00 00 00 ff ff ff ff |................| 00000010 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000020 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000030 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100 Для второго куска 00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000010 ff ff ff ff ff ff ff ff 50 54 31 36 36 43 48 4e |........PT166CHN| 00000020 ff ff ff ff ff ff ff ff 43 52 55 4d 2d 31 31 31 |........CRUM-111| 00000030 30 30 37 38 33 35 31 33 01 32 de 9f 07 ff ff ff |00783513.2......| 00000040 02 c7 9a e6 ff ff ff ff 00 01 4c 08 ff ff ff ff |..........L.....| 00000050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000070 0a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000080 ff ff ff ff 50 54 31 36 36 43 48 4e ff ff ff ff |....PT166CHN....| 00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100Звёздочки, если вы не догадались - повторяющиеся линии файла. В редакторе строк будет несколько большим.
В первом файле мы обнулили счётчики - это первые 3 строки.
Во-втором файле мы изменили версию чипа CRUM, подправив одну цифру. Эта цифра при сбросе чипа будет всегда различаться, и если совпадёт - принтер не примет картридж. В строке |00783513.2......| можно менять всё что угодно, или всё что угодно до точки с двойкой (?).
В строке 00000080 мы убрали все a5 a5 a5 a5. Это, как говорят некоторые особо разбирающиеся люди - прогресс бар.
Всё. Зашиваем обратно:
# cat dump1 |./eeprog -f /dev/i2c-0 0x50 -w 0 # cat dump2 |./eeprog -f /dev/i2c-0 0x51 -w 0
Параметры программы:-f = не спрашивать, /dev/i2c-0 = на какое устройство писать, 0x50 = адрес, по которому писать, -w = запись, 0 = начиная с 0-ого байта.
Вуаля!
0 коммент.:
Отправить комментарий