From: Tilman Sauerbeck Date: Sun, 7 Jul 2019 20:07:56 +0000 (+0200) Subject: tools: Don't try to erase and program the second flash sector. X-Git-Url: http://git.code-monkey.de/?p=gps-watch.git;a=commitdiff_plain;h=6c782c1ea136dd3968ae611a61bd5512cf5c009e tools: Don't try to erase and program the second flash sector. The bootloader refuses to erase that sector anyway. Consequences are that we may not put any code in the second sector and that we will get verification errors for that sector. --- 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)