I am developing an application which uses a P2 module. The board only has an SWD interface, not a USB header so DFU updates are not possible.
I have read the documentation linked here: https://docs.particle.io/reference/developer-tools/jtag/ and I believe that the process is:
- Write custom application;
- Generate a firmware.bin file containing the custom application;
- Use the hex file generator (https://docs.particle.io/tools/developer-tools/hex-generator/) which will append the custom application to the required firmware components and generate an Intel Hex file at the correct location, i.e take the following *.bin files and make a monolithic hex file:
system-part1.bin loaded at address 0x60000
bootloader.bin loaded at address 0x4000
prebootloader-part1.bin loaded at address 0x14000
custom_firmware.bin loaded at address ????
This hex file can then be flashed to the P2 module.
The documentation https://docs.particle.io/reference/developer-tools/jtag/ which says:
At this point, the device will reboot, but the user firmware binary (tinker) has not been flashed. Since the address varies, it's often easier to flash this using USB in DFU mode:
particle usb dfu particle flash --usb p2/tinker.bin
As I described, the board I am developing on does not have a USB header, I can only program it using SWD. So once I have a hex file containing absolute addresses, how do I flash that to the P2 module?
I have spent a bit of time investigating the options and have successfully loaded the *.bin files described above, I just don't know of the appropriate OpenOCD command for the RTL872x. The nRF family have a few examples, but not the Realtek part used in the P2.
I have tried the following command after appending my firmware file using the Hex generator:
bash-5.0$ bin/openocd -s share/openocd/scripts/ -f interface/cmsis-dap.cfg -f target/rtl872x_km4_debug.cfg -c "init" -c "flash write_image /home/foo/development/photon_workbench/test_project/ParticleTest/image.hex" -c "reset" -c "exit" xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-17:31) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : CMSIS-DAP: SWD supported Info : CMSIS-DAP: JTAG supported Info : CMSIS-DAP: Atomic commands supported Info : CMSIS-DAP: FW Version = 0254 Info : CMSIS-DAP: Serial# = 070000814a46be801431313030313736a5a5a5a597969908 Info : CMSIS-DAP: Interface Initialised (SWD) Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1 Info : CMSIS-DAP: Interface ready Info : clock speed 1000 kHz Info : SWD DPIDR 0x6ba02477 Info : [rtl872x.cpu] Cortex-M55 r1p0 processor detected Info : [rtl872x.cpu] target has 2 breakpoints, 1 watchpoints Info : starting gdb server for rtl872x.cpu on 3333 Info : Listening on port 3333 for gdb connections flash flash bank bank_id driver_name base_address size_bytes chip_width_bytes bus_width_bytes target [driver_options ...] flash banks flash init flash list gdb_flash_program ('enable'|'disable') nand program <filename> [address] [pre-verify] [verify] [reset] [exit]
This looks like the arguments passed to the OpenOCD flash image_write command are missing.
Does this mean I need to extend the target/rtl872x_km4_debug.cfg file?
Thank you for any help you can offer.