@@ -54,6 +54,41 @@ def get_suitable_optiboot_binary(framework_dir, board_config):
5454 return bootloader_path .replace (".hex" , "_BIGBOOT.hex" )
5555
5656
57+ def get_suitable_urboot_binary (framework_dir , board_config ):
58+ mcu = board_config .get ("build.mcu" , "" ).lower ()
59+ f_cpu = int (board_config .get ("build.f_cpu" , "16000000L" ).strip ("UL" ))
60+ oscillator = board .get ("hardware.oscillator" , "external" ).lower ()
61+ bootloader_led = board_config .get ("bootloader.led_pin" , "no-led" ).lower ()
62+ bootloader_speed = board_config .get ("bootloader.speed" , env .subst ("$UPLOAD_SPEED" ))
63+ bootloader_file = "urboot_%s.hex" % mcu
64+
65+ if core == "MicroCore" :
66+ f_cpu_error = float (board_config .get ("hardware.f_cpu_error" , "0.0" ))
67+ uart = board_config .get ("hardware.uart" , "swio_rxb1_txb0" ).lower ()
68+ if oscillator == "internal" :
69+ clock_speed = f_cpu + int (f_cpu_error / 100 * f_cpu )
70+ else :
71+ clock_speed = f_cpu
72+ else :
73+ uart = board_config .get ("hardware.uart" , "uart0" ).lower ()
74+ clock_speed = f_cpu
75+
76+ bootloader_path = join (
77+ framework_dir ,
78+ "bootloaders" ,
79+ "urboot" ,
80+ "watchdog_1_s" ,
81+ "%s_oscillator" % oscillator ,
82+ "%d_hz" % clock_speed ,
83+ "%s_baud" % bootloader_speed ,
84+ uart ,
85+ bootloader_led ,
86+ bootloader_file ,
87+ )
88+
89+ return bootloader_path
90+
91+
5792framework_dir = ""
5893if env .get ("PIOFRAMEWORK" , []):
5994 framework_dir = platform .get_package_dir (
@@ -64,6 +99,9 @@ def get_suitable_optiboot_binary(framework_dir, board_config):
6499if core in ("MiniCore" , "MegaCore" , "MightyCore" , "MajorCore" ):
65100 if not isfile (bootloader_path ):
66101 bootloader_path = get_suitable_optiboot_binary (framework_dir , board )
102+ elif core == "MicroCore" :
103+ if not isfile (bootloader_path ):
104+ bootloader_path = get_suitable_urboot_binary (framework_dir , board )
67105else :
68106 if not isfile (bootloader_path ):
69107 bootloader_path = join (framework_dir , "bootloaders" , bootloader_path )
@@ -76,10 +114,16 @@ def get_suitable_optiboot_binary(framework_dir, board_config):
76114 sys .stderr .write ("Error: Couldn't find bootloader image %s\n " % bootloader_path )
77115 env .Exit (1 )
78116
117+ print ("Using bootloader image:\n %s" % bootloader_path )
118+
79119fuses_action = env .SConscript ("fuses.py" , exports = "env" )
80120
81- lock_bits = board .get ("bootloader.lock_bits" , "0x0F" )
82- unlock_bits = board .get ("bootloader.unlock_bits" , "0x3F" )
121+ if core == "MicroCore" :
122+ lock_bits = board .get ("bootloader.lock_bits" , "0xFF" )
123+ unlock_bits = board .get ("bootloader.unlock_bits" , "0xFF" )
124+ else :
125+ lock_bits = board .get ("bootloader.lock_bits" , "0x0F" )
126+ unlock_bits = board .get ("bootloader.unlock_bits" , "0x3F" )
83127
84128env .Replace (
85129 BOOTUPLOADER = "avrdude" ,
0 commit comments