From 7d63d6c77c018a719ed317e58f9658c473833bf7 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Wed, 4 Mar 2015 14:11:50 +0200 Subject: [PATCH] Add second upload method through native USB Port for SAM-based boards --- platformio/boards/arduino.json | 26 ++++++++++++++++++++++++++ platformio/builder/scripts/atmelsam.py | 23 +++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/platformio/boards/arduino.json b/platformio/boards/arduino.json index f0288e91..43779bc1 100644 --- a/platformio/boards/arduino.json +++ b/platformio/boards/arduino.json @@ -620,5 +620,31 @@ "use_1200bps_touch": true, "wait_for_upload_port": true } + }, + "dueUSB": { + "build": { + "core": "arduino", + "extra_flags": "-D__SAM3X8E__ -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM", + "f_cpu": "84000000L", + "mcu": "at91sam3x8e", + "cpu": "cortex-m3", + "pid": "0x003e", + "usb_product": "Arduino Due", + "variant": "arduino_due_x", + "vid": "0x2341", + "ldscript": "sam3x8e.ld" + }, + "framework": "arduino", + "name": "Arduino Due (USB Native Port)", + "platform": "atmelsam", + "upload": { + "disable_flushing": true, + "maximum_ram_size": 28672, + "maximum_size": 524288, + "protocol": "sam-ba", + "require_upload_port" : true, + "use_1200bps_touch": true, + "wait_for_upload_port": true + } } } diff --git a/platformio/builder/scripts/atmelsam.py b/platformio/builder/scripts/atmelsam.py index e098e371..347cb75a 100644 --- a/platformio/builder/scripts/atmelsam.py +++ b/platformio/builder/scripts/atmelsam.py @@ -10,10 +10,33 @@ from os.path import join from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Default, DefaultEnvironment, SConscript) +from platformio.util import get_serialports + def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 env.AutodetectUploadPort() + board_type = env.subst("$BOARD") + env.Append( + UPLOADERFLAGS=[ + "-U", + "true" if "usb" in board_type.lower( + ) or board_type == "digix" else "false" + ]) + + upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) + + if not upload_options.get("disable_flushing", False): + env.FlushSerialBuffer("$UPLOAD_PORT") + + before_ports = [i['port'] for i in get_serialports()] + + if upload_options.get("use_1200bps_touch", False): + env.TouchSerialPort("$UPLOAD_PORT", 1200) + + if upload_options.get("wait_for_upload_port", False): + env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) + env = DefaultEnvironment()