1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 20:49:49 +04:00

OpenOCD scripts (#2101)

* Scripts: option bytes check
* Scripts: option bytes set
* Scripts: openocd config
* Scripts: increased readability, process IPCCBR option byte
* Scripts: split dap_ob.py
* Updater: process IPCCBR option byte
* Scripts: move chip-related functions to chip definition
* Scripts: freeze CPU registers
* Scripts: flash programming routine
* ob.py
* otp.py
* otp: handle errors correctly
* downgrade to python 3.9
* correct type hinting
* Scripts: fix path to ob.data

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Sergey Gavrilov
2022-12-27 22:59:36 +10:00
committed by GitHub
parent ded7e727d0
commit 727f043747
8 changed files with 1035 additions and 66 deletions

View File

@@ -35,6 +35,7 @@ OTP_DISPLAYS = {
from flipper.app import App
from flipper.cube import CubeProgrammer
from flipper.utils.programmer_openocd import OpenOCDProgrammer
class Main(App):
@@ -53,21 +54,21 @@ class Main(App):
self.parser_flash_first = self.subparsers.add_parser(
"flash_first", help="Flash first block of OTP to device"
)
self._addArgsSWD(self.parser_flash_first)
self._addArgsOpenOCD(self.parser_flash_first)
self._addFirstArgs(self.parser_flash_first)
self.parser_flash_first.set_defaults(func=self.flash_first)
# Flash Second
self.parser_flash_second = self.subparsers.add_parser(
"flash_second", help="Flash second block of OTP to device"
)
self._addArgsSWD(self.parser_flash_second)
self._addArgsOpenOCD(self.parser_flash_second)
self._addSecondArgs(self.parser_flash_second)
self.parser_flash_second.set_defaults(func=self.flash_second)
# Flash All
self.parser_flash_all = self.subparsers.add_parser(
"flash_all", help="Flash OTP to device"
)
self._addArgsSWD(self.parser_flash_all)
self._addArgsOpenOCD(self.parser_flash_all)
self._addFirstArgs(self.parser_flash_all)
self._addSecondArgs(self.parser_flash_all)
self.parser_flash_all.set_defaults(func=self.flash_all)
@@ -75,17 +76,19 @@ class Main(App):
self.logger = logging.getLogger()
self.timestamp = datetime.datetime.now().timestamp()
def _addArgsSWD(self, parser):
def _addArgsOpenOCD(self, parser):
parser.add_argument(
"--port", type=str, help="Port to connect: swd or usb1", default="swd"
"--port-base", type=int, help="OpenOCD port base", default=3333
)
parser.add_argument(
"--interface",
type=str,
help="OpenOCD interface",
default="interface/cmsis-dap.cfg",
)
parser.add_argument(
"--serial", type=str, help="OpenOCD interface serial number"
)
parser.add_argument("--serial", type=str, help="ST-Link Serial Number")
def _getCubeParams(self):
return {
"port": self.args.port,
"serial": self.args.serial,
}
def _addFirstArgs(self, parser):
parser.add_argument("--version", type=int, help="Version", required=True)
@@ -173,14 +176,22 @@ class Main(App):
file.write(self._packFirst())
self.logger.info(f"Flashing OTP")
cp = CubeProgrammer(self._getCubeParams())
cp.flashBin("0x1FFF7000", filename)
cp.resetTarget()
openocd = OpenOCDProgrammer(
self.args.interface,
self.args.port_base,
self.args.serial,
)
if not openocd.otp_write(0x1FFF7000, filename):
raise Exception("Failed to flash OTP")
self.logger.info(f"Flashed Successfully")
os.remove(filename)
except Exception as e:
self.logger.exception(e)
return 1
finally:
os.remove(filename)
return 0
@@ -197,14 +208,22 @@ class Main(App):
file.write(self._packSecond())
self.logger.info(f"Flashing OTP")
cp = CubeProgrammer(self._getCubeParams())
cp.flashBin("0x1FFF7010", filename)
cp.resetTarget()
openocd = OpenOCDProgrammer(
self.args.interface,
self.args.port_base,
self.args.serial,
)
if not openocd.otp_write(0x1FFF7010, filename):
raise Exception("Failed to flash OTP")
self.logger.info(f"Flashed Successfully")
os.remove(filename)
except Exception as e:
self.logger.exception(e)
return 1
finally:
os.remove(filename)
return 0
@@ -223,14 +242,22 @@ class Main(App):
file.write(self._packSecond())
self.logger.info(f"Flashing OTP")
cp = CubeProgrammer(self._getCubeParams())
cp.flashBin("0x1FFF7000", filename)
cp.resetTarget()
openocd = OpenOCDProgrammer(
self.args.interface,
self.args.port_base,
self.args.serial,
)
if not openocd.otp_write(0x1FFF7000, filename):
raise Exception("Failed to flash OTP")
self.logger.info(f"Flashed Successfully")
os.remove(filename)
except Exception as e:
self.logger.exception(e)
return 1
finally:
os.remove(filename)
return 0