Merge pull request #1917 from tridge/pullrequest-boot-delay

Pullrequest boot delay
This commit is contained in:
Lorenz Meier 2015-03-15 12:50:32 +01:00
commit b73ea03244
3 changed files with 78 additions and 0 deletions

59
Tools/boot_now.py Executable file
View File

@ -0,0 +1,59 @@
#!/usr/bin/env python
############################################################################
#
# Copyright (C) 2012-2015 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
# send BOOT command to a device
import argparse
import serial, sys
from sys import platform as _platform
# Parse commandline arguments
parser = argparse.ArgumentParser(description="Send boot command to a device")
parser.add_argument('--baud', action="store", type=int, default=115200, help="Baud rate of the serial port")
parser.add_argument('port', action="store", help="Serial port(s) to which the FMU may be attached")
args = parser.parse_args()
REBOOT = b'\x30'
EOC = b'\x20'
print("Sending reboot to %s" % args.port)
try:
port = serial.Serial(args.port, args.baud, timeout=0.5)
except Exception:
print("Unable to open %s" % args.port)
sys.exit(1)
port.write(REBOOT + EOC)
port.close()
sys.exit(0)

View File

@ -161,6 +161,7 @@ class uploader(object):
GET_OTP = b'\x2a' # rev4+ , get a word from OTP area GET_OTP = b'\x2a' # rev4+ , get a word from OTP area
GET_SN = b'\x2b' # rev4+ , get a word from SN area GET_SN = b'\x2b' # rev4+ , get a word from SN area
GET_CHIP = b'\x2c' # rev5+ , get chip version GET_CHIP = b'\x2c' # rev5+ , get chip version
SET_BOOT_DELAY = b'\x2d' # rev5+ , set boot delay
REBOOT = b'\x30' REBOOT = b'\x30'
INFO_BL_REV = b'\x01' # bootloader protocol revision INFO_BL_REV = b'\x01' # bootloader protocol revision
@ -405,6 +406,12 @@ class uploader(object):
raise RuntimeError("Program CRC failed") raise RuntimeError("Program CRC failed")
self.__drawProgressBar(label, 100, 100) self.__drawProgressBar(label, 100, 100)
def __set_boot_delay(self, boot_delay):
self.__send(uploader.SET_BOOT_DELAY
+ struct.pack("b", boot_delay)
+ uploader.EOC)
self.__getSync()
# get basic data about the board # get basic data about the board
def identify(self): def identify(self):
# make sure we are in sync before starting # make sure we are in sync before starting
@ -472,6 +479,9 @@ class uploader(object):
else: else:
self.__verify_v3("Verify ", fw) self.__verify_v3("Verify ", fw)
if args.boot_delay is not None:
self.__set_boot_delay(args.boot_delay)
print("\nRebooting.\n") print("\nRebooting.\n")
self.__reboot() self.__reboot()
self.port.close() self.port.close()
@ -501,6 +511,7 @@ parser = argparse.ArgumentParser(description="Firmware uploader for the PX autop
parser.add_argument('--port', action="store", required=True, help="Serial port(s) to which the FMU may be attached") parser.add_argument('--port', action="store", required=True, help="Serial port(s) to which the FMU may be attached")
parser.add_argument('--baud', action="store", type=int, default=115200, help="Baud rate of the serial port (default is 115200), only required for true serial ports.") parser.add_argument('--baud', action="store", type=int, default=115200, help="Baud rate of the serial port (default is 115200), only required for true serial ports.")
parser.add_argument('--force', action='store_true', default=False, help='Override board type check and continue loading') parser.add_argument('--force', action='store_true', default=False, help='Override board type check and continue loading')
parser.add_argument('--boot-delay', type=int, default=None, help='minimum boot delay to store in flash')
parser.add_argument('firmware', action="store", help="Firmware file to be uploaded") parser.add_argument('firmware', action="store", help="Firmware file to be uploaded")
args = parser.parse_args() args = parser.parse_args()

View File

@ -66,12 +66,20 @@ EXTERN(_vectors) /* force the vectors to be included in the output */
* code pulled in by libgcc.a requires it (and that code cannot be easily avoided). * code pulled in by libgcc.a requires it (and that code cannot be easily avoided).
*/ */
EXTERN(abort) EXTERN(abort)
EXTERN(_bootdelay_signature)
SECTIONS SECTIONS
{ {
.text : { .text : {
_stext = ABSOLUTE(.); _stext = ABSOLUTE(.);
*(.vectors) *(.vectors)
. = ALIGN(32);
/*
This signature provides the bootloader with a way to delay booting
*/
_bootdelay_signature = ABSOLUTE(.);
FILL(0xffecc2925d7d05c5)
. += 8;
*(.text .text.*) *(.text .text.*)
*(.fixup) *(.fixup)
*(.gnu.warning) *(.gnu.warning)