; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921 [env:rak4631] extends = nrf52840_base board = wiscore_rak4631 board_check = true build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631 -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard" -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 -DEINK_HEIGHT=122 build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631> + + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} melopero/Melopero RV3028@^1.1.0 https://github.com/RAKWireless/RAK13800-W5100S.git#1.0.2 rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2 https://github.com/meshtastic/RAK12034-BMX160.git#4821355fb10390ba8557dc43ca29a023bcfbb9d9 debug_tool = jlink ; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) ; Note: as of 6/2013 the serial/bootloader based programming takes approximately 30 seconds ;upload_protocol = jlink ; Allows programming and debug via the RAK NanoDAP as the default debugger tool for the RAK4631 (it is only $10!) ; programming time is about the same as the bootloader version. ; For information on this see the meshtastic developers documentation for "Development on the NRF52" [env:rak4631_dbg] extends = env:rak4631 board_level = extra ; if the builtin version of openocd has a buggy version of semihosting, so use the external version ; platform_packages = platformio/tool-openocd@^3.1200.0 build_flags = ${env:rak4631.build_flags} -D USE_SEMIHOSTING lib_deps = ${env:rak4631.lib_deps} https://github.com/geeksville/Armduino-Semihosting.git#35b538fdf208c3530c1434cd099a08e486672ee4 ; NOTE: the pyocd support for semihosting is buggy. So I switched to using the builtin platformio support for the stlink adapter which worked much better. ; However the built in openocd version in platformio has buggy support for TCP to semihosting. ; ; So I'm now trying the external openocd - but the openocd scripts for nrf52.cfg assume you are using a DAP adapter not an STLINK adapter. ; In theory I could change those scripts. But for now I'm trying going back to a DAP adapter but with the external openocd. upload_protocol = stlink ; eventually use platformio/tool-pyocd@^2.3600.0 instad ;upload_protocol = custom ;upload_command = pyocd flash -t nrf52840 $UPLOADERFLAGS $SOURCE ; We want the initial breakpoint at setup() instead of main(). Also we want to enable semihosting at that point so instead of ; debug_init_break = tbreak setup ; we just turn off the platformio tbreak and do it in .gdbinit (where we have more flexibility for scripting) ; also we use a permanent breakpoint so it gets reused each time we restart the debugging session? debug_init_break = tbreak setup ; Note: add "monitor arm semihosting_redirect tcp 4444 all" if you want the stdout from the device to go to that port number instead ; (for use by meshtastic command line) ; monitor arm semihosting disable ; monitor debug_level 3 ; ; IMPORTANT: fileio must be disabled before using port 5555 - openocd ver 0.12 has a bug where if enabled it never properly parses the special :tt name ; for stdio access. ; monitor arm semihosting_redirect tcp 5555 stdio ; Also note: it is _impossible_ to do non blocking reads on the semihost console port (an oversight when ARM specified the semihost API). ; So we'll neve be able to general purpose bi-directional communication with the device over semihosting. debug_extra_cmds = echo Running .gdbinit script monitor arm semihosting enable monitor arm semihosting_fileio enable monitor arm semihosting_redirect disable commands 1 echo Breakpoint at setup() has semihosting console, connect to it with "telnet localhost 5555" set wantSemihost = true set useSoftDevice = false end ; Only reprogram the board if the code has changed debug_load_mode = modified ;debug_load_mode = manual debug_tool = stlink ;debug_tool = custom ; debug_server = ; openocd ; -f ; /usr/local/share/openocd/scripts/interface/stlink.cfg ; -f ; /usr/local/share/openocd/scripts/target/nrf52.cfg ; $PLATFORMIO_CORE_DIR/packages/tool-openocd/openocd/scripts/interface/cmsis-dap.cfg ; Allows programming and debug via the RAK NanoDAP as the default debugger tool for the RAK4631 (it is only $10!) ; programming time is about the same as the bootloader version. ; For information on this see the meshtastic developers documentation for "Development on the NRF52" ; We manually pass in the elf file so that pyocd can reverse engineer FreeRTOS data (running threads, etc...) ;debug_server = ; pyocd ; gdbserver ; -j ; ${platformio.workspace_dir}/.. ; -t ; nrf52840 ; --semihosting ; --elf ; ${platformio.build_dir}/${this.__env__}/firmware.elf ; If you want to debug the semihosting support you can turn on extra logging in pyocd with ; -L ; pyocd.debug.semihost.trace=debug ; The following is not needed because it automatically tries do this ;debug_server_ready_pattern = -.*GDB server started on port \d+.* ;debug_port = localhost:3333