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
6
11
endif
7
12
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
12
14
13
- # TODO: Verify that it is a valid target.
15
+ SD_LOWER = $( shell echo $( SD ) | tr '[:upper:]' '[:lower:]')
14
16
15
- # If the build directory is not given, make it reflect the board name
17
+ # Build directory with SD
16
18
BUILD ?= $(if $(SD ) ,build-$(BOARD ) -$(SD_LOWER ) ,build-$(BOARD ) )
17
19
18
20
include ../../py/mkenv.mk
19
- include boards/$(BOARD ) /mpconfigboard.mk
20
21
-include mpconfigport.mk
21
22
22
23
ifneq ($(SD ) , )
@@ -52,6 +53,8 @@ INC += -I./nrfx/drivers/include
52
53
INC += -I../../lib/mp-readline
53
54
INC += -I./drivers/bluetooth
54
55
INC += -I./drivers
56
+ INC += -I../../lib/tinyusb/src
57
+ INC += -I./usb
55
58
56
59
NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
57
60
@@ -87,6 +90,7 @@ LIBS += -L $(dir $(LIBC_FILE_NAME)) -lc
87
90
LIBS += -L $(dir $(LIBGCC_FILE_NAME ) ) -lgcc
88
91
89
92
SRC_NRFX = $(addprefix nrfx/,\
93
+ drivers/src/nrfx_power.c \
90
94
drivers/src/nrfx_spim.c \
91
95
drivers/src/nrfx_twim.c \
92
96
drivers/src/nrfx_uart.c \
@@ -96,10 +100,13 @@ SRC_C += \
96
100
mphalport.c \
97
101
fatfs_port.c \
98
102
tick.c \
103
+ background.c \
104
+ internal_flash.c \
99
105
drivers/bluetooth/ble_drv.c \
100
106
drivers/bluetooth/ble_uart.c \
101
107
boards/$(BOARD ) /board.c \
102
108
nrfx/mdk/system_$(MCU_SUB_VARIANT ) .c \
109
+ nrfx/hal/nrf_nvmc.c \
103
110
device/$(MCU_VARIANT ) /startup_$(MCU_SUB_VARIANT ) .c \
104
111
lib/oofatfs/ff.c \
105
112
lib/oofatfs/option/ccsbcs.c \
@@ -108,10 +115,25 @@ SRC_C += \
108
115
lib/utils/context_manager_helpers.c \
109
116
lib/utils/interrupt_char.c \
110
117
lib/utils/pyexec.c \
118
+ lib/utils/stdout_helpers.c \
111
119
lib/libc/string0.c \
112
120
lib/mp-readline/readline.c \
113
- internal_flash.c \
114
121
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
115
137
116
138
DRIVERS_SRC_C += $(addprefix modules/,\
117
139
ubluepy/modubluepy.c \
@@ -213,9 +235,9 @@ OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
213
235
$(BUILD ) /$(FATFS_DIR ) /ff.o : COPT += -Os
214
236
$(filter $(PY_BUILD ) /../extmod/vfs_fat_% .o, $(PY_O ) ) : COPT += -Os
215
237
216
- .phony : all flash sd binary hex
238
+ .phony : all flash sd binary hex bootloader
217
239
218
- all : binary hex
240
+ all : binary hex uf2
219
241
220
242
OUTPUT_FILENAME = firmware
221
243
@@ -231,12 +253,18 @@ hex: $(BUILD)/$(OUTPUT_FILENAME).hex
231
253
$(BUILD ) /$(OUTPUT_FILENAME ) .hex : $(BUILD ) /$(OUTPUT_FILENAME ) .elf
232
254
$(OBJCOPY ) -O ihex $< $@
233
255
256
+ # ####################
257
+ # Flash with debugger
258
+ # ####################
234
259
FLASHER ?=
235
260
236
261
ifeq ($(FLASHER ) ,)
237
262
263
+ # Also update to bootloader settting to validate application and skip checksum ( app valid = 0x0001, crc = 0x0000 )
238
264
flash : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
239
265
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 )
240
268
nrfjprog --reset -f $(MCU_VARIANT )
241
269
242
270
sd : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
@@ -245,6 +273,9 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
245
273
nrfjprog --program $< --sectorerase -f $(MCU_VARIANT )
246
274
nrfjprog --reset -f $(MCU_VARIANT )
247
275
276
+ bootloader :
277
+ nrfjprog --program $(BOOT_FILE ) .hex -f nrf52 --chiperase --reset
278
+
248
279
else ifeq ($(FLASHER), pyocd)
249
280
250
281
flash : $(BUILD ) /$(OUTPUT_FILENAME ) .hex
@@ -257,6 +288,41 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
257
288
258
289
endif
259
290
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
+
260
326
$(BUILD ) /$(OUTPUT_FILENAME ) .elf : $(OBJ )
261
327
$(ECHO ) " LINK $@ "
262
328
$(Q )$(CC ) $(LDFLAGS ) -o $@ $(OBJ ) -Wl,--start-group $(LIBS ) -Wl,--end-group
0 commit comments