X-Git-Url: http://git.code-monkey.de/?p=gps-watch.git;a=blobdiff_plain;f=tools%2Fupdate-firmware;fp=tools%2Fupdate-firmware;h=f610343f37c8ba1fb672b73e49ac37c2fde44841;hp=32381dc47393ac39b32d4819d5f0ddbb54214485;hb=6c782c1ea136dd3968ae611a61bd5512cf5c009e;hpb=1b1fe0d53c04d6e7d7ff81387399813fb8147161 diff --git a/tools/update-firmware b/tools/update-firmware index 32381dc..f610343 100755 --- a/tools/update-firmware +++ b/tools/update-firmware @@ -94,6 +94,12 @@ class ChecksumMismatch(BootloaderError): super(ChecksumMismatch, self).__init__(msg) +class PermissionDenied(BootloaderError): + def __init__(self, command): + msg = 'Target reported permission denied for command {}'.format(command) + + super(PermissionDenied, self).__init__(msg) + class Command: def __init__(self, num, name): self._num = num @@ -179,15 +185,19 @@ class Application: for i in range(len(chunks)): sector = sector0 + i - self._erase(sector) + # The bootloader will refuse to erase the second sector + # as it contains the precious flash configuration field. + if sector != 1: + self._erase(sector) # Write first sector last, to prevent the bootloader from # jumping to partially programmed code. for i, chunk in reversed(list(enumerate(chunks))): sector = sector0 + i - self._load_chunk(chunk) - self._program(sector) + if sector != 1: + self._load_chunk(chunk) + self._program(sector) num_verify_errors = 0 @@ -295,6 +305,8 @@ class Application: raise InvalidArgument(self._last_command) elif e == 3: raise ChecksumMismatch(self._last_command) + elif e == 4: + raise PermissionDenied(self._last_command) else: msg = 'Target reported some other error for {}'.format(self._last_command)