From 6c782c1ea136dd3968ae611a61bd5512cf5c009e Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Sun, 7 Jul 2019 22:07:56 +0200 Subject: [PATCH] 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. --- tools/update-firmware | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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) -- 2.30.2