Skip to content

Instantly share code, notes, and snippets.

@elfmimi
Created November 26, 2023 10:13
Show Gist options
  • Save elfmimi/059eaf93f4bad05b3c06571872563952 to your computer and use it in GitHub Desktop.
Save elfmimi/059eaf93f4bad05b3c06571872563952 to your computer and use it in GitHub Desktop.
pyOCD user script for RP2040
# pyOCD user script
# 'usb_boot' command will put target RP2040 into bootloader mode
#
# Howto invoke:
# pyocd cmd --script rp2040.py -c usb_boot
options.update({
"target_override": "rp2040",
})
if not "frequency" in options:
options.set("frequency", 10000000)
@command(help="Kick-start USB Bootloader")
def usb_boot():
target.halt()
# Enable XOSC
target.write32(0x40024000, target.read32(0x40024000) & ~0x00FFF000 | 0x00FAB000)
ptr = target.read16(0x14)
usb_boot_addr = 0
while True:
code = target.read16(ptr)
addr = target.read16(ptr+2)
ptr += 4
if code == 0:
break
# print(f"code = 0x{code:04X} addr = 0x{addr:04X}")
if code == 0x4255: # 'UB'
usb_boot_addr = addr & ~1
if usb_boot_addr == 0:
print("Error: could not find function address")
return
target.write_core_register('r0', 0)
target.write_core_register('r1', 0)
target.write_core_register('sp', 0x20041f00)
# target.write_core_register('pc', 0x2590)
target.write_core_register('pc', usb_boot_addr)
target.resume()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment