1- # Select the board to build for: if not given on the command line,
2- # then default to feather52832.
3- BOARD ?= feather52832
4- ifeq ($(wildcard boards/$(BOARD ) /.) ,)
5- $(error Invalid BOARD specified)
1+ # Select the board to build for.
2+ ifeq ($(BOARD ) ,)
3+ $(info You must provide a BOARD parameter with 'BOARD=')
4+ $(info Possible values are :)
5+ $(info $(sort $(subst /.,,$(subst boards/,,$(wildcard boards/*/.)))))
6+ $(error BOARD not defined)
7+ else
8+ ifeq ($(wildcard boards/$(BOARD)/.),)
9+ $(error Invalid BOARD specified)
10+ endif
611endif
712
8- # If SoftDevice is selected, try to use that one.
9- # Default to SD132 (exact version can be set with SOFTDEV_VERSION)
10- SD ?= s132
11- SD_LOWER = $(shell echo $(SD ) | tr '[:upper:]' '[:lower:]')
13+ include boards/$(BOARD ) /mpconfigboard.mk
1214
13- # TODO: Verify that it is a valid target.
15+ SD_LOWER = $( shell echo $( SD ) | tr '[:upper:]' '[:lower:]')
1416
15- # If the build directory is not given, make it reflect the board name
17+ # Build directory with SD
1618BUILD ?= $(if $(SD ) ,build-$(BOARD ) -$(SD_LOWER ) ,build-$(BOARD ) )
1719
1820include ../../py/mkenv.mk
19- include boards/$(BOARD ) /mpconfigboard.mk
2021-include mpconfigport.mk
2122
2223ifneq ($(SD ) , )
@@ -52,6 +53,8 @@ INC += -I./nrfx/drivers/include
5253INC += -I../../lib/mp-readline
5354INC += -I./drivers/bluetooth
5455INC += -I./drivers
56+ INC += -I../../lib/tinyusb/src
57+ INC += -I./usb
5558
5659NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
5760
@@ -87,6 +90,7 @@ LIBS += -L $(dir $(LIBC_FILE_NAME)) -lc
8790LIBS += -L $(dir $(LIBGCC_FILE_NAME ) ) -lgcc
8891
8992SRC_NRFX = $(addprefix nrfx/,\
93+ drivers/src/nrfx_power.c \
9094 drivers/src/nrfx_spim.c \
9195 drivers/src/nrfx_twim.c \
9296 drivers/src/nrfx_uart.c \
@@ -96,10 +100,13 @@ SRC_C += \
96100 mphalport.c \
97101 fatfs_port.c \
98102 tick.c \
103+ background.c \
104+ internal_flash.c \
99105 drivers/bluetooth/ble_drv.c \
100106 drivers/bluetooth/ble_uart.c \
101107 boards/$(BOARD ) /board.c \
102108 nrfx/mdk/system_$(MCU_SUB_VARIANT ) .c \
109+ nrfx/hal/nrf_nvmc.c \
103110 device/$(MCU_VARIANT ) /startup_$(MCU_SUB_VARIANT ) .c \
104111 lib/oofatfs/ff.c \
105112 lib/oofatfs/option/ccsbcs.c \
@@ -108,10 +115,25 @@ SRC_C += \
108115 lib/utils/context_manager_helpers.c \
109116 lib/utils/interrupt_char.c \
110117 lib/utils/pyexec.c \
118+ lib/utils/stdout_helpers.c \
111119 lib/libc/string0.c \
112120 lib/mp-readline/readline.c \
113- internal_flash.c \
114121
122+ ifeq ($(MCU_SUB_VARIANT ) ,nrf52840)
123+
124+ SRC_C += \
125+ usb/tusb_descriptors.c \
126+ usb/usb_msc_flash.c \
127+ lib/tinyusb/src/portable/nordic/nrf5x/dcd_nrf5x.c \
128+ lib/tinyusb/src/portable/nordic/nrf5x/hal_nrf5x.c \
129+ lib/tinyusb/src/common/tusb_fifo.c \
130+ lib/tinyusb/src/device/usbd.c \
131+ lib/tinyusb/src/device/usbd_desc.c \
132+ lib/tinyusb/src/class/msc/msc_device.c \
133+ lib/tinyusb/src/class/cdc/cdc_device.c \
134+ lib/tinyusb/src/tusb.c \
135+
136+ endif
115137
116138DRIVERS_SRC_C += $(addprefix modules/,\
117139 ubluepy/modubluepy.c \
@@ -213,9 +235,9 @@ OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
213235$(BUILD ) /$(FATFS_DIR ) /ff.o : COPT += -Os
214236$(filter $(PY_BUILD ) /../extmod/vfs_fat_% .o, $(PY_O ) ) : COPT += -Os
215237
216- .phony : all flash sd binary hex
238+ .phony : all flash sd binary hex bootloader
217239
218- all : binary hex
240+ all : binary hex uf2
219241
220242OUTPUT_FILENAME = firmware
221243
@@ -231,12 +253,18 @@ hex: $(BUILD)/$(OUTPUT_FILENAME).hex
231253$(BUILD ) /$(OUTPUT_FILENAME ) .hex : $(BUILD ) /$(OUTPUT_FILENAME ) .elf
232254 $(OBJCOPY ) -O ihex $< $@
233255
256+ # ####################
257+ # Flash with debugger
258+ # ####################
234259FLASHER ?=
235260
236261ifeq ($(FLASHER ) ,)
237262
263+ # Also update to bootloader settting to validate application and skip checksum ( app valid = 0x0001, crc = 0x0000 )
238264flash : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
239265 nrfjprog --program $< --sectorerase -f $(MCU_VARIANT )
266+ nrfjprog --erasepage $(BOOT_SETTING_ADDR ) -f $(MCU_VARIANT )
267+ nrfjprog --memwr $(BOOT_SETTING_ADDR ) --val 0x00000001 -f $(MCU_VARIANT )
240268 nrfjprog --reset -f $(MCU_VARIANT )
241269
242270sd : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
@@ -245,6 +273,9 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
245273 nrfjprog --program $< --sectorerase -f $(MCU_VARIANT )
246274 nrfjprog --reset -f $(MCU_VARIANT )
247275
276+ bootloader :
277+ nrfjprog --program $(BOOT_FILE ) .hex -f nrf52 --chiperase --reset
278+
248279else ifeq ($(FLASHER), pyocd)
249280
250281flash : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
@@ -257,6 +288,41 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
257288
258289endif
259290
291+ # ####################
292+ # Flash with DFU
293+ # ####################
294+ .phony : dfu-gen dfu-flash dfu-bootloader
295+
296+ ifeq ($(OS ) ,Windows_NT)
297+ NRFUTIL = ../../lib/nrfutil/binaries/win32/nrfutil.exe
298+ else
299+ NRFUTIL = nrfutil
300+ endif
301+
302+ check_defined = \
303+ $(strip $(foreach 1,$1, \
304+ $(call __check_defined,$1,$(strip $(value 2) ) ) ) )
305+ __check_defined = \
306+ $(if $(value $1) ,, \
307+ $(error Undefined make flag: $1$(if $2, ($2) ) ) )
308+
309+ dfu-gen : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
310+ $(NRFUTIL ) dfu genpkg --sd-req 0xFFFE --dev-type 0x0052 --application $^ $(BUILD ) /dfu-package.zip
311+
312+ dfu-flash : $(BUILD ) /dfu-package.zip
313+ @:$(call check_defined, SERIAL, example: SERIAL=/dev/ttyUSB0)
314+ $(NRFUTIL ) --verbose dfu serial --package $^ -p $(SERIAL ) -b 115200 --singlebank
315+
316+ dfu-bootloader :
317+ @:$(call check_defined, SERIAL, example: SERIAL=/dev/ttyACM0)
318+ $(NRFUTIL ) --verbose dfu serial --package $(BOOT_FILE ) .zip -p $(SERIAL ) -b 115200
319+
320+ uf2 : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
321+ $(ECHO ) " Create $( OUTPUT_FILENAME) .uf2"
322+ $(PYTHON2 ) $(TOP ) /tools/uf2/utils/uf2conv.py -f 0xADA52840 -c -o " $( BUILD) /$( OUTPUT_FILENAME) .uf2" $^
323+
324+ $(BUILD ) /dfu-package.zip : dfu-gen
325+
260326$(BUILD ) /$(OUTPUT_FILENAME ) .elf : $(OBJ )
261327 $(ECHO ) " LINK $@ "
262328 $(Q )$(CC ) $(LDFLAGS ) -o $@ $(OBJ ) -Wl,--start-group $(LIBS ) -Wl,--end-group
0 commit comments