Der Bootloader startet sofort nach !RESET und ist für ca. 3s aktiv. Um den Bootloader zu aktivieren wird eine spezielle Zeichenkette erwartet, andernfalls startet das Programm an Adresse 0.
#!/usr/bin/env python
import serial
import time
import os.path
import sys
import subprocess
GPIO_NR=204
GPIO_DIR='/sys/class/gpio/gpio%i/'%GPIO_NR
BOOT_ENTER_STR="DEADBEEF"
BOOT_REQUIRED_STR="BOOT.RUN"
SER_DEVICE="/dev/ttySAC0"
BAUDRATE=57600
AVRDUDE_ARGS=[
"avrdude",
"-P", SER_DEVICE,
"-c", "avr109",
"-p", "m1284p",
"-b", "%i"%BAUDRATE
]
if not os.path.isdir(GPIO_DIR):
f=open('/sys/class/gpio/export','w')
f.write('%i\n'%GPIO_NR)
f.flush()
f.close()
def doReset():
reset_gpio=open(GPIO_DIR+'direction','w')
reset_gpio.write("out\n")
reset_gpio.flush()
time.sleep(0.1)
reset_gpio.write("in\n")
reset_gpio.flush()
time.sleep(0.1)
reset_gpio.close()
ser=serial.Serial(SER_DEVICE,baudrate=BAUDRATE)
while True:
print("Searching for bootloader.")
doReset()
boot_response=ser.readline().replace('\x00','').strip()
print('greeting:', boot_response)
ser.write(BOOT_ENTER_STR)
boot_response=ser.readline().replace('\x00','').strip()
print('enter-response:',boot_response)
if boot_response==BOOT_REQUIRED_STR:
break
ser.close()
print("calling AVRDUDE")
subprocess.call(AVRDUDE_ARGS+sys.argv[1:])
/usr/local/bin/exynos_load -U flash:w:/root/ledtest.hex