flash.mk 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # Hey Emacs, this is a -*- makefile -*-
  2. ##############################################################################
  3. # Architecture or project specific options
  4. #
  5. DFU_ARGS ?=
  6. ifneq ("$(SERIAL)","")
  7. DFU_ARGS += -S $(SERIAL)
  8. endif
  9. DFU_UTIL ?= dfu-util
  10. define EXEC_DFU_UTIL
  11. if ! $(DFU_UTIL) -l | grep -q "Found DFU"; then \
  12. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  13. sleep $(BOOTLOADER_RETRY_TIME) ;\
  14. while ! $(DFU_UTIL) -l | grep -q "Found DFU"; do \
  15. printf "." ;\
  16. sleep $(BOOTLOADER_RETRY_TIME) ;\
  17. done ;\
  18. printf "\n" ;\
  19. fi
  20. $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
  21. endef
  22. define EXEC_WB32_DFU_UPDATER
  23. if ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; then \
  24. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  25. sleep $(BOOTLOADER_RETRY_TIME) ;\
  26. while ! wb32-dfu-updater_cli -l | grep -q "Found DFU"; do \
  27. printf "." ;\
  28. sleep $(BOOTLOADER_RETRY_TIME) ;\
  29. done ;\
  30. printf "\n" ;\
  31. fi
  32. wb32-dfu-updater_cli -D $(BUILD_DIR)/$(TARGET).bin
  33. endef
  34. dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
  35. $(call EXEC_DFU_UTIL)
  36. define EXEC_UF2_UTIL_DEPLOY
  37. if ! $(UF2CONV) --deploy $(BUILD_DIR)/$(TARGET).uf2 2>/dev/null; then \
  38. printf "$(MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY)" ;\
  39. sleep $(BOOTLOADER_RETRY_TIME) ;\
  40. while ! $(UF2CONV) --deploy $(BUILD_DIR)/$(TARGET).uf2 2>/dev/null; do \
  41. printf "." ;\
  42. sleep $(BOOTLOADER_RETRY_TIME) ;\
  43. done ;\
  44. printf "\n" ;\
  45. fi
  46. endef
  47. # TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
  48. # within the emulated eeprom via dfu-util or another tool
  49. ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-left uf2-split-left))
  50. OPT_DEFS += -DINIT_EE_HANDS_LEFT
  51. endif
  52. ifneq (,$(filter $(MAKECMDGOALS), dfu-util-split-right uf2-split-right))
  53. OPT_DEFS += -DINIT_EE_HANDS_RIGHT
  54. endif
  55. dfu-util-split-left: dfu-util
  56. dfu-util-split-right: dfu-util
  57. uf2-split-left: flash
  58. uf2-split-right: flash
  59. ST_LINK_CLI ?= st-link_cli
  60. ST_LINK_ARGS ?=
  61. st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
  62. $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
  63. ST_FLASH ?= st-flash
  64. ST_FLASH_ARGS ?=
  65. st-flash: $(BUILD_DIR)/$(TARGET).hex sizeafter
  66. $(ST_FLASH) $(ST_FLASH_ARGS) --reset --format ihex write $(BUILD_DIR)/$(TARGET).hex
  67. # Autodetect teensy loader
  68. ifndef TEENSY_LOADER_CLI
  69. ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
  70. TEENSY_LOADER_CLI ?= teensy-loader-cli
  71. else
  72. TEENSY_LOADER_CLI ?= teensy_loader_cli
  73. endif
  74. endif
  75. TEENSY_LOADER_CLI_MCU ?= $(MCU_LDSCRIPT)
  76. define EXEC_TEENSY
  77. $(TEENSY_LOADER_CLI) -mmcu=$(TEENSY_LOADER_CLI_MCU) -w -v $(BUILD_DIR)/$(TARGET).hex
  78. endef
  79. teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
  80. $(call EXEC_TEENSY)
  81. flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
  82. $(SILENT) || printf "Flashing for bootloader: $(BLUE)$(BOOTLOADER)$(NO_COLOR)\n"
  83. ifneq ($(strip $(PROGRAM_CMD)),)
  84. $(UNSYNC_OUTPUT_CMD) && $(PROGRAM_CMD)
  85. else ifeq ($(strip $(BOOTLOADER)),kiibohd)
  86. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  87. else ifeq ($(strip $(BOOTLOADER)),tinyuf2)
  88. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY)
  89. else ifeq ($(strip $(BOOTLOADER)),rp2040)
  90. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_UF2_UTIL_DEPLOY)
  91. else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
  92. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY)
  93. else ifeq ($(strip $(MCU_FAMILY)),MIMXRT1062)
  94. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY)
  95. else ifeq ($(strip $(MCU_FAMILY)),STM32)
  96. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  97. else ifeq ($(strip $(MCU_FAMILY)),WB32)
  98. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_WB32_DFU_UPDATER)
  99. else ifeq ($(strip $(MCU_FAMILY)),GD32V)
  100. $(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU_UTIL)
  101. else
  102. $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
  103. endif