Skip to content

Commit 6f5b2a7

Browse files
committed
Merge branch 'release/v4.2.0'
2 parents 408c19c + 2755afa commit 6f5b2a7

File tree

6 files changed

+65
-23
lines changed

6 files changed

+65
-23
lines changed

boards/attiny13.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"extra_flags": "-DARDUINO_AVR_ATTINY13",
55
"f_cpu": "9600000L",
66
"mcu": "attiny13",
7-
"variant": "attiny13"
7+
"variant": "attiny13a"
88
},
99
"hardware": {
1010
"oscillator": "internal",

boards/attiny13a.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"extra_flags": "-DARDUINO_AVR_ATTINY13",
55
"f_cpu": "9600000L",
66
"mcu": "attiny13a",
7-
"variant": "attiny13"
7+
"variant": "attiny13a"
88
},
99
"hardware": {
1010
"oscillator": "internal",

builder/bootloader.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
5792
framework_dir = ""
5893
if env.get("PIOFRAMEWORK", []):
5994
framework_dir = platform.get_package_dir(
@@ -64,6 +99,9 @@ def get_suitable_optiboot_binary(framework_dir, board_config):
6499
if 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)
67105
else:
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+
79119
fuses_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

84128
env.Replace(
85129
BOOTUPLOADER="avrdude",

builder/fuses.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ def get_hfuse(target, uart, oscillator, bod, eesave, jtagen):
205205
ckopt_offset = ckopt_bit << 4
206206
jtagen_bit = 1 if jtagen == "yes" else 0
207207
jtagen_offset = jtagen_bit << 6
208+
selfprogen_bit = 1 if uart != "no_bootloader" else 0
209+
selfprogen_offset = selfprogen_bit << 4
208210

209211
if target in targets_1:
210212
if uart == "no_bootloader":
@@ -248,13 +250,13 @@ def get_hfuse(target, uart, oscillator, bod, eesave, jtagen):
248250

249251
elif target in targets_7:
250252
if bod == "4.3v":
251-
return 0x9
253+
return 0xF9 & ~selfprogen_offset
252254
elif bod == "2.7v":
253-
return 0xFB
255+
return 0xFB & ~selfprogen_offset
254256
elif bod == "1.8v":
255-
return 0xFD
257+
return 0xFD & ~selfprogen_offset
256258
else:
257-
return 0xFF
259+
return 0xFF & ~selfprogen_offset
258260

259261
else:
260262
sys.stderr.write("Error: Couldn't calculate hfuse for %s\n" % target)
@@ -411,15 +413,13 @@ def is_target_without_bootloader(target):
411413
"attiny26",
412414
"attiny25",
413415
"attiny24",
414-
"attiny13",
415-
"attiny13a",
416416
)
417417

418418
return target in targets_without_bootloader
419419

420420

421421
def get_lock_bits(target):
422-
if is_target_without_bootloader(target):
422+
if is_target_without_bootloader(target) or core == "MicroCore":
423423
return "0xff"
424424
else:
425425
return "0x0f"
@@ -464,7 +464,7 @@ def get_lock_bits(target):
464464
f_cpu = board.get("build.f_cpu", "16000000L").upper()
465465
oscillator = board.get("hardware.oscillator", "external").lower()
466466
bod = board.get("hardware.bod", "2.7v").lower()
467-
uart = board.get("hardware.uart", "uart0").lower()
467+
uart = board.get("hardware.uart", "no_bootloader" if core == "MicroCore" else "uart0").lower()
468468
eesave = board.get("hardware.eesave", "yes").lower()
469469
jtagen = board.get("hardware.jtagen", "no").lower()
470470
ckout = board.get("hardware.ckout", "no").lower()
@@ -477,9 +477,7 @@ def get_lock_bits(target):
477477
print("Oscillator = %s" % oscillator)
478478
print("BOD level = %s" % bod)
479479
print("Save EEPROM = %s" % eesave)
480-
481-
if target not in ("attiny13", "attiny13a"):
482-
print("UART port = %s" % uart)
480+
print("UART port = %s" % uart)
483481

484482
if target not in (
485483
"atmega8535",

platform.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"type": "git",
1919
"url": "https://github.com/platformio/platform-atmelavr.git"
2020
},
21-
"version": "4.1.0",
21+
"version": "4.2.0",
2222
"frameworks": {
2323
"arduino": {
2424
"package": "framework-arduino-avr",
@@ -71,31 +71,31 @@
7171
"type": "framework",
7272
"optional": true,
7373
"owner": "platformio",
74-
"version": "~2.2.2"
74+
"version": "~2.2.3"
7575
},
7676
"framework-arduino-avr-mightycore": {
7777
"type": "framework",
7878
"optional": true,
7979
"owner": "platformio",
80-
"version": "~2.2.1"
80+
"version": "~2.2.2"
8181
},
8282
"framework-arduino-avr-minicore": {
8383
"type": "framework",
8484
"optional": true,
8585
"owner": "platformio",
86-
"version": "~2.2.1"
86+
"version": "~2.2.2"
8787
},
8888
"framework-arduino-avr-majorcore": {
8989
"type": "framework",
9090
"optional": true,
9191
"owner": "platformio",
92-
"version": "~2.2.1"
92+
"version": "~2.2.2"
9393
},
9494
"framework-arduino-avr-microcore": {
9595
"type": "framework",
9696
"optional": true,
9797
"owner": "platformio",
98-
"version": "~2.2.1"
98+
"version": "~2.3.0"
9999
},
100100
"framework-arduino-avr-nicai": {
101101
"type": "framework",

platform.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ def configure_default_packages(self, variables, targets):
5757
if upload_protocol == "micronucleus":
5858
disabled_tool = "tool-avrdude"
5959

60-
if "fuses" in targets:
60+
if "fuses" in targets or "bootloader" in targets:
6161
required_tool = "tool-avrdude"
6262

6363
if required_tool in self.packages:
64-
self.packages[required_tool]['optional'] = False
64+
self.packages[required_tool]["optional"] = False
6565

6666
if disabled_tool in self.packages and disabled_tool != required_tool:
6767
del self.packages[disabled_tool]

0 commit comments

Comments
 (0)