Восстановление AVR ( fuse’s ) микроконтроллера через Raspberry Pi

Накидал по быстрому инструкцию по восстановлению fuses для AVR микроконтроллеров. Не могу сейчас сказать, что для всех. В I-net’e очень мало информации по этой теме и в основном не полная.

  1. Берём сам Raspberry Pi “v3b+” устанавливаем Raspbian OS и обновляем его.
  2. sudo apt update
  3. sudo apt upgrade

запускаем на XTAL1 с ножки GPIO.22 ( к примеру ) скрипт.

import os
import time
import RPi.GPIO as IO


def main():
	#IO.setmode(IO.BOARD) # IO.BCM
	IO.setmode(IO.BCM) # IO.BCM
	IO.setup(22, IO.OUT)
	state = True
	while True:
	    IO.output(22,state)
	    time.sleep(0.0002)
	    state = not state

if __name__=='__main__':
    try:
        main()
    except KeyboardInterrupt:
        IO.cleanup()
    finally:
        IO.cleanup()

для AVRDUDE добавляем CONF файл в ~/avrdude_gpio.conf

  • стащил с интернета по заливке на контроллер через GPIO.
# Linux GPIO configuration for avrdude.
# Change the lines below to the GPIO pins connected to the AVR.
programmer
  id    = "pi_1";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 12;
  sck   = 24;
  mosi  = 23;
  miso  = 18;
;


Запускаем саму DUDU с параметрами ( для моего 1284P контроллера )

avrdude -vvvv \
-C ~/avrdude_gpio.conf \
-c pi_1 \
-p m1284p \
-i4000 \
-U lfuse:w:0x42:m \
-U hfuse:w:0x99:m \
-U efuse:w:0xFF:m \
-U lock:w:0xFF:m 

-i4000 это скорость задержки. Если не подключается, то нужно поиграться с увеличением задержки.

После облома блокируются иногда GPIO. Разблокировка работает вот так. В скрипте выше на python’e он сам за собой блокировку чистит.

echo 12 > /sys/class/gpio/unexport
echo 23 > /sys/class/gpio/unexport
echo 24 > /sys/class/gpio/unexport
echo 18 > /sys/class/gpio/unexport

Восстановление 3D-принтера ANET-A6L c AliExpress удалось. Прошил на Marlin 2.0.5.2.

C Auto-level пока ещё не разобрался, но это другая история.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

TRANSLATE