diff --git a/Makefile b/Makefile index 0d2700868..79c9cf292 100644 --- a/Makefile +++ b/Makefile @@ -77,19 +77,24 @@ help: @echo " all_flight - Build all firmware, bootloaders and bootloader updaters" @echo " all_fw - Build only firmware for all boards" @echo " all_bl - Build only bootloaders for all boards" - @echo " all_blupd - Build only bootloader updaters for all boards" + @echo " all_bu - Build only bootloader updaters for all boards" @echo @echo " all_clean - Remove your build directory ($(BUILD_DIR))" @echo " all_flight_clean - Remove all firmware, bootloaders and bootloader updaters" @echo " all_fw_clean - Remove firmware for all boards" @echo " all_bl_clean - Remove bootlaoders for all boards" - @echo " all_blupd_clean - Remove bootloader updaters for all boards" + @echo " all_bu_clean - Remove bootloader updaters for all boards" + @echo + @echo " all_ - Build all available images for " + @echo " all__clean - Remove all available images for " @echo @echo " [Firmware]" @echo " - Build firmware for " + @echo " supported boards are ($(ALL_BOARDS))" + @echo " fw_ - Build firmware for " @echo " supported boards are ($(FW_TARGETS))" - @echo " _clean - Remove firmware for " - @echo " _program - Use OpenOCD + JTAG to write firmware to " + @echo " fw__clean - Remove firmware for " + @echo " fw__program - Use OpenOCD + JTAG to write firmware to " @echo @echo " [Bootloader]" @echo " bl_ - Build bootloader for " @@ -98,9 +103,9 @@ help: @echo " bl__program - Use OpenOCD + JTAG to write bootloader to " @echo @echo " [Bootloader Updater]" - @echo " blupd_ - Build bootloader updater for " - @echo " supported boards are ($(BLUPD_TARGETS))" - @echo " blupd__clean - Remove bootloader updater for " + @echo " bu_ - Build bootloader updater for " + @echo " supported boards are ($(BU_TARGETS))" + @echo " bu__clean - Remove bootloader updater for " @echo @echo " [Simulation]" @echo " sim_posix - Build OpenPilot simulation firmware for" @@ -311,254 +316,128 @@ uavobjects_clean: # ############################## -FW_TARGETS := openpilot ahrs coptercontrol pipxtreme ins -BL_TARGETS := $(addprefix bl_, $(FW_TARGETS)) -BLUPD_TARGETS := $(addprefix blupd_, $(FW_TARGETS)) +# $(1) = Canonical board name all in lower case (e.g. coptercontrol) +# $(2) = Name of board used in source tree (e.g. CopterControl) +define FW_TEMPLATE +.PHONY: $(1) fw_$(1) +$(1): fw_$(1)_opfw +fw_$(1): fw_$(1)_opfw + +fw_$(1)_%: uavobjects_flight + $(V1) mkdir -p $(BUILD_DIR)/fw_$(1)/dep + $(V1) cd $(ROOT_DIR)/flight/$(2) && \ + $$(MAKE) -r --no-print-directory \ + BOARD_NAME=$(1) \ + TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ + REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ + $$* + +.PHONY: $(1)_clean +$(1)_clean: fw_$(1)_clean +fw_$(1)_clean: + $(V0) @echo " CLEAN $$@" + $(V1) $(RM) -fr $(BUILD_DIR)/fw_$(1) +endef + +# $(1) = Canonical board name all in lower case (e.g. coptercontrol) +# $(2) = Name of board used in source tree (e.g. CopterControl) +define BL_TEMPLATE +.PHONY: bl_$(1) +bl_$(1): bl_$(1)_bin +bl_$(1)_bino: bl_$(1)_bin + +bl_$(1)_%: + $(V1) mkdir -p $(BUILD_DIR)/bl_$(1)/dep + $(V1) cd $(ROOT_DIR)/flight/Bootloaders/$(2) && \ + $$(MAKE) -r --no-print-directory \ + BOARD_NAME=$(1) \ + TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ + REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ + $$* + +.PHONY: bl_$(1)_clean +bl_$(1)_clean: + $(V0) @echo " CLEAN $$@" + $(V1) $(RM) -fr $(BUILD_DIR)/bl_$(1) +endef + +# $(1) = Canonical board name all in lower case (e.g. coptercontrol) +define BU_TEMPLATE +.PHONY: bu_$(1) +bu_$(1): bu_$(1)_opfw + +bu_$(1)_%: bl_$(1)_bino + $(V1) mkdir -p $(BUILD_DIR)/bu_$(1)/dep + $(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \ + $$(MAKE) -r --no-print-directory \ + BOARD_NAME=$(1) \ + TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ + REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ + $$* + +.PHONY: bu_$(1)_clean +bu_$(1)_clean: + $(V0) @echo " CLEAN $$@" + $(V1) $(RM) -fr $(BUILD_DIR)/bu_$(1) +endef + +# $(1) = Canonical board name all in lower case (e.g. coptercontrol) +define BOARD_PHONY_TEMPLATE +.PHONY: all_$(1) +all_$(1): $$(filter fw_$(1), $$(FW_TARGETS)) +all_$(1): $$(filter bl_$(1), $$(BL_TARGETS)) +all_$(1): $$(filter bu_$(1), $$(BU_TARGETS)) + +.PHONY: all_$(1)_clean +all_$(1)_clean: $$(addsuffix _clean, $$(filter fw_$(1), $$(FW_TARGETS))) +all_$(1)_clean: $$(addsuffix _clean, $$(filter bl_$(1), $$(BL_TARGETS))) +all_$(1)_clean: $$(addsuffix _clean, $$(filter bu_$(1), $$(BU_TARGETS))) +endef + +ALL_BOARDS := openpilot ahrs coptercontrol pipxtreme ins + +# Friendly names of each board (used to find source tree) +openpilot_friendly := OpenPilot +coptercontrol_friendly := CopterControl +pipxtreme_friendly := PipXtreme +ins_friendly := INS +ahrs_friendly := AHRS + +FW_TARGETS := $(addprefix fw_, $(ALL_BOARDS)) +BL_TARGETS := $(addprefix bl_, $(ALL_BOARDS)) +BU_TARGETS := $(addprefix bu_, $(ALL_BOARDS)) # FIXME: The INS build doesn't have a bootloader or bootloader # updater yet so we need to filter them out to prevent errors. -BL_TARGETS := $(filter-out bl_ins, $(BL_TARGETS)) -BLUPD_TARGETS := $(filter-out blupd_ins, $(BLUPD_TARGETS)) +BL_TARGETS := $(filter-out bl_ins, $(BL_TARGETS)) +BU_TARGETS := $(filter-out bu_ins, $(BU_TARGETS)) .PHONY: all_fw all_fw_clean -all_fw: $(addsuffix _bin, $(FW_TARGETS)) -all_fw_clean: $(addsuffix _clean, $(FW_TARGETS)) +all_fw: $(addsuffix _opfw, $(FW_TARGETS)) +all_fw_clean: $(addsuffix _clean, $(FW_TARGETS)) .PHONY: all_bl all_bl_clean -all_bl: $(addsuffix _bin, $(BL_TARGETS)) -all_bl_clean: $(addsuffix _clean, $(BL_TARGETS)) +all_bl: $(addsuffix _bin, $(BL_TARGETS)) +all_bl_clean: $(addsuffix _clean, $(BL_TARGETS)) -.PHONY: all_blupd all_blupd_clean -all_blupd: $(addsuffix _bin, $(BLUPD_TARGETS)) -all_blupd_clean: $(addsuffix _clean, $(BLUPD_TARGETS)) +.PHONY: all_bu all_bu_clean +all_bu: $(addsuffix _opfw, $(BU_TARGETS)) +all_bu_clean: $(addsuffix _clean, $(BU_TARGETS)) .PHONY: all_flight all_flight_clean -all_flight: all_fw all_bl all_blupd -all_flight_clean: all_fw_clean all_bl_clean all_blupd_clean +all_flight: all_fw all_bl all_bu +all_flight_clean: all_fw_clean all_bl_clean all_bu_clean -.PHONY: openpilot -openpilot: openpilot_bin +$(foreach board, $(ALL_BOARDS), $(eval $(call BOARD_PHONY_TEMPLATE,$(board)))) -openpilot_%: uavobjects_flight - $(V1) mkdir -p $(BUILD_DIR)/openpilot/dep - $(V1) cd $(ROOT_DIR)/flight/OpenPilot && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* +# Expand the bootloader updater rules +$(foreach board, $(ALL_BOARDS), $(eval $(call BU_TEMPLATE,$(board),$($(board)_friendly)))) -.PHONY: openpilot_clean -openpilot_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/openpilot - -.PHONY: bl_openpilot -bl_openpilot: bl_openpilot_bin -bl_openpilot_bino: bl_openpilot_bin - -bl_openpilot_%: - $(V1) mkdir -p $(BUILD_DIR)/bl_openpilot/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/OpenPilot && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/bl_openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: bl_openpilot_clean -bl_openpilot_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/bl_openpilot - -.PHONY: blupd_openpilot -blupd_openpilot: blupd_openpilot_bin - -blupd_openpilot_%: bl_openpilot_bino - $(V1) mkdir -p $(BUILD_DIR)/blupd_openpilot/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/blupd_openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ - BOARD=STM3210E_OP MODEL=HD MODEL_SUFFIX=_OP \ - BLOBJ=$(BUILD_DIR)/bl_openpilot/OpenPilot_BL.bin.o $* - -.PHONY: blupd_openpilot_clean -blupd_openpilot_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/blupd_openpilot - -.PHONY: ahrs -ahrs: ahrs_bin - -ahrs_%: uavobjects_flight - $(V1) mkdir -p $(BUILD_DIR)/ahrs/dep - $(V1) cd $(ROOT_DIR)/flight/AHRS && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: ahrs_clean -ahrs_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/ahrs - -.PHONY: bl_ahrs -bl_ahrs: bl_ahrs_bin -bl_ahrs_bino: bl_ahrs_bin - -bl_ahrs_%: - $(V1) mkdir -p $(BUILD_DIR)/bl_ahrs/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/AHRS && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/bl_ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: bl_ahrs_clean -bl_ahrs_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/bl_ahrs - -.PHONY: blupd_ahrs -blupd_ahrs: blupd_ahrs_bin - -blupd_ahrs_%: bl_ahrs_bino bl_ahrs - $(V1) mkdir -p $(BUILD_DIR)/blupd_ahrs/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/blupd_ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ - BOARD=STM32103CB_AHRS MODEL=MD \ - BLOBJ=$(BUILD_DIR)/bl_ahrs/AHRS_BL.bin.o $* - -.PHONY: blupd_ahrs_clean -blupd_ahrs_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/blupd_ahrs - -.PHONY: coptercontrol -coptercontrol: coptercontrol_bin - -coptercontrol_%: uavobjects_flight - $(V1) mkdir -p $(BUILD_DIR)/coptercontrol/dep - $(V1) cd $(ROOT_DIR)/flight/CopterControl && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: coptercontrol_clean -coptercontrol_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/coptercontrol - -.PHONY: bl_coptercontrol -bl_coptercontrol: bl_coptercontrol_bin -bl_coptercontrol_bino: bl_coptercontrol_bin - -bl_coptercontrol_%: - $(V1) mkdir -p $(BUILD_DIR)/bl_coptercontrol/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/CopterControl && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/bl_coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: bl_coptercontrol_clean -bl_coptercontrol_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/bl_coptercontrol - -.PHONY: blupd_coptercontrol -blupd_coptercontrol: blupd_coptercontrol_bin - -blupd_coptercontrol_%: bl_coptercontrol_bino - $(V1) mkdir -p $(BUILD_DIR)/blupd_coptercontrol/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/blupd_coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ - BOARD=STM32103CB_CC_Rev1 MODEL=MD MODEL_SUFFIX=_CC \ - BLOBJ=$(BUILD_DIR)/bl_coptercontrol/CopterControl_BL.bin.o $* - -.PHONY: blupd_coptercontrol_clean -blupd_coptercontrol_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/blupd_coptercontrol - -.PHONY: pipxtreme -pipxtreme: pipxtreme_bin - -pipxtreme_%: uavobjects_flight - $(V1) mkdir -p $(BUILD_DIR)/pipxtreme/dep - $(V1) cd $(ROOT_DIR)/flight/PipXtreme && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: pipxtreme_clean -pipxtreme_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/pipxtreme - -.PHONY: bl_pipxtreme -bl_pipxtreme: bl_pipxtreme_bin -bl_pipxtreme_bino: bl_pipxtreme_bin - -bl_pipxtreme_%: - $(V1) mkdir -p $(BUILD_DIR)/bl_pipxtreme/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/PipXtreme && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/bl_pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: bl_pipxtreme_clean -bl_pipxtreme_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/bl_pipxtreme - -.PHONY: blupd_pipxtreme -blupd_pipxtreme: blupd_pipxtreme_bin - -blupd_pipxtreme_%: bl_pipxtreme_bino - $(V1) mkdir -p $(BUILD_DIR)/blupd_pipxtreme/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/blupd_pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \ - BOARD=STM32103CB_PIPXTREME MODEL=MD MODEL_SUFFIX=_CC \ - BLOBJ=$(BUILD_DIR)/bl_pipxtreme/PipXtreme_BL.bin.o $* - -.PHONY: blupd_pipxtreme_clean -blupd_pipxtreme_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/blupd_pipxtreme - - -.PHONY: ins -ins: ins_bin - -ins_%: uavobjects_flight - $(V1) mkdir -p $(BUILD_DIR)/ins/dep - $(V1) cd $(ROOT_DIR)/flight/INS && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/ins" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: ins_clean -ins_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/ins - -.PHONY: bl_ins -bl_ins: bl_ins_elf - -bl_ins_%: - $(V1) mkdir -p $(BUILD_DIR)/bl_ins/dep - $(V1) cd $(ROOT_DIR)/flight/Bootloaders/INS && \ - $(MAKE) -r --no-print-directory \ - OUTDIR="$(BUILD_DIR)/bl_ins" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \ - REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $* - -.PHONY: bl_ins_clean -bl_ins_clean: - $(V0) @echo " CLEAN $@" - $(V1) $(RM) -fr $(BUILD_DIR)/bl_ins +# Expand the firmware rules +$(foreach board, $(ALL_BOARDS), $(eval $(call FW_TEMPLATE,$(board),$($(board)_friendly)))) +# Expand the bootloader rules +$(foreach board, $(ALL_BOARDS), $(eval $(call BL_TEMPLATE,$(board),$($(board)_friendly)))) .PHONY: sim_posix sim_posix: sim_posix_elf diff --git a/flight/AHRS/Makefile b/flight/AHRS/Makefile index d4dafd68f..46405ca6c 100644 --- a/flight/AHRS/Makefile +++ b/flight/AHRS/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := fw_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES for debugging @@ -41,21 +48,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_AHRS -MODEL = MD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/ahrs - -# Target file name (without extension). -TARGET = AHRS - # Paths AHRS = ./ AHRSINC = $(AHRS)/inc @@ -160,7 +152,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -223,7 +215,6 @@ CDEFS = -DSTM32F10X_$(MODEL) CDEFS += -DUSE_STDPERIPH_DRIVER CDEFS += -DUSE_$(BOARD) CDEFS += -DIN_AHRS -CDEFS += -DUSE_BOOTLOADER # Place project-specific -D and/or -U options for # Assembler with preprocessor here. @@ -299,21 +290,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08002000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08002000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -345,14 +323,6 @@ endif endif endif -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -382,29 +352,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin -.PHONY: elf lss sym hex bin bino +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif @@ -445,4 +419,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/AHRS/ahrs.c b/flight/AHRS/ahrs.c index 57f9e11e2..830245572 100644 --- a/flight/AHRS/ahrs.c +++ b/flight/AHRS/ahrs.c @@ -33,6 +33,7 @@ /* OpenPilot Includes */ #include "ahrs.h" +#include #include "pios.h" #include "ahrs_timer.h" #include "ahrs_spi_comm.h" @@ -1228,6 +1229,8 @@ void homelocation_callback(AhrsObjHandle obj) void firmwareiapobj_callback(AhrsObjHandle obj) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; + FirmwareIAPObjData firmwareIAPObj; FirmwareIAPObjGet(&firmwareIAPObj); if(firmwareIAPObj.ArmReset==0) @@ -1235,7 +1238,7 @@ void firmwareiapobj_callback(AhrsObjHandle obj) if(firmwareIAPObj.ArmReset==1) { - if((firmwareIAPObj.BoardType==BOARD_TYPE) || (firmwareIAPObj.BoardType==0xFF)) + if((firmwareIAPObj.BoardType==bdinfo->board_type) || (firmwareIAPObj.BoardType==0xFF)) { ++reset_count; @@ -1247,11 +1250,11 @@ void firmwareiapobj_callback(AhrsObjHandle obj) } } } - else if(firmwareIAPObj.BoardType==BOARD_TYPE && firmwareIAPObj.crc!=PIOS_BL_HELPER_CRC_Memory_Calc()) + else if(firmwareIAPObj.BoardType==bdinfo->board_type && firmwareIAPObj.crc!=PIOS_BL_HELPER_CRC_Memory_Calc()) { - PIOS_BL_HELPER_FLASH_Read_Description(firmwareIAPObj.Description,SIZE_OF_DESCRIPTION); + PIOS_BL_HELPER_FLASH_Read_Description(firmwareIAPObj.Description,bdinfo->desc_size); firmwareIAPObj.crc=PIOS_BL_HELPER_CRC_Memory_Calc(); - firmwareIAPObj.BoardRevision=BOARD_REVISION; + firmwareIAPObj.BoardRevision=bdinfo->board_rev; FirmwareIAPObjSet(&firmwareIAPObj); } } diff --git a/flight/Bootloaders/AHRS/Makefile b/flight/Bootloaders/AHRS/Makefile index 4a43a6081..18bf8a269 100644 --- a/flight/Bootloaders/AHRS/Makefile +++ b/flight/Bootloaders/AHRS/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := bl_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES for debugging @@ -41,23 +48,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_AHRS -MODEL = MD - - - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/bl_ahrs - -# Target file name (without extension). -TARGET = AHRS_BL - # Paths AHRS_BL = ./ AHRS_BLINC = $(AHRS_BL)/inc @@ -149,7 +139,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -209,6 +199,15 @@ CDEFS = -DSTM32F10X_$(MODEL) CDEFS += -DUSE_STDPERIPH_DRIVER CDEFS += -DUSE_$(BOARD) +# Provide (only) the bootloader with board-specific defines +BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE) +BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION) +BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE) +BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION) +BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE) +BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE) +BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE) + # Place project-specific -D and/or -U options for # Assembler with preprocessor here. #ADEFS = -DUSE_IRQ_ASM_WRAPPER @@ -243,8 +242,9 @@ CFLAGS += -O$(OPT) ifeq ($(DEBUG),NO) CFLAGS += -fdata-sections -ffunction-sections endif -CFLAGS += -mcpu=$(MCU) -mthumb +CFLAGS += -mcpu=$(MCU) CFLAGS += $(CDEFS) +CFLAGS += $(BLONLY_CDEFS) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. CFLAGS += -mapcs-frame @@ -266,7 +266,7 @@ CONLYFLAGS += $(CSTANDARD) # Assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlns: create listing -ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp +ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) @@ -291,20 +291,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -336,14 +324,6 @@ endif endif endif -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo "Programming with OPENOCD" - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -373,6 +353,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE))) + .PHONY: elf lss sym hex bin bino elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss @@ -383,8 +366,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: @@ -437,4 +418,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/Bootloaders/AHRS/main.c b/flight/Bootloaders/AHRS/main.c index 30915cef0..b284e6365 100644 --- a/flight/Bootloaders/AHRS/main.c +++ b/flight/Bootloaders/AHRS/main.c @@ -33,6 +33,7 @@ /* OpenPilot Includes */ #include "ahrs_bl.h" +#include #include "pios_opahrs_proto.h" #include "bl_fsm.h" /* lfsm_state */ #include "stm32f10x_flash.h" @@ -108,6 +109,7 @@ static struct opahrs_msg_v0 link_rx_v0; static struct opahrs_msg_v0 user_tx_v0; static struct opahrs_msg_v0 user_rx_v0; void process_spi_request(void) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; bool msg_to_process = FALSE; PIOS_IRQ_Disable(); @@ -166,15 +168,15 @@ void process_spi_request(void) { break; case OPAHRS_MSG_V0_REQ_MEM_MAP: opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_MEM_MAP); - user_tx_v0.payload.user.v.rsp.mem_map.density = HW_TYPE; + user_tx_v0.payload.user.v.rsp.mem_map.density = bdinfo->hw_type; user_tx_v0.payload.user.v.rsp.mem_map.rw_flags = (BOARD_READABLE - | (BOARD_WRITABLA << 1)); + | (BOARD_WRITABLE << 1)); user_tx_v0.payload.user.v.rsp.mem_map.size_of_code_memory - = SIZE_OF_CODE; + = bdinfo->fw_size; user_tx_v0.payload.user.v.rsp.mem_map.size_of_description - = SIZE_OF_DESCRIPTION; + = bdinfo->desc_size; user_tx_v0.payload.user.v.rsp.mem_map.start_of_user_code - = START_OF_USER_CODE; + = bdinfo->fw_base; lfsm_user_set_tx_v0(&user_tx_v0); break; case OPAHRS_MSG_V0_REQ_SERIAL: @@ -192,7 +194,7 @@ void process_spi_request(void) { PIOS_LED_On(LED1); opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS); if (!(user_rx_v0.payload.user.v.req.fwup_data.adress - < START_OF_USER_CODE)) { + < bdinfo->fw_base)) { for (uint8_t x = 0; x < user_rx_v0.payload.user.v.req.fwup_data.size; ++x) { if (FLASH_ProgramWord( @@ -250,13 +252,10 @@ void process_spi_request(void) { return; } void jump_to_app() { - //while(TRUE) - //{ - // PIOS_LED_Toggle(LED1); - // PIOS_DELAY_WaitmS(1000); - //} + const struct pios_board_info * bdinfo = &pios_board_info_blob; + PIOS_LED_On(LED1); - if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ + if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ FLASH_Lock(); RCC_APB2PeriphResetCmd(0xffffffff, ENABLE); RCC_APB1PeriphResetCmd(0xffffffff, ENABLE); @@ -265,10 +264,10 @@ void jump_to_app() { //_SetCNTR(0); // clear interrupt mask //_SetISTR(0); // clear all requests - JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4); + JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) START_OF_USER_CODE); + __set_MSP(*(__IO uint32_t*) bdinfo->fw_base); Jump_To_Application(); } else { boot_status = jump_failed; diff --git a/flight/Bootloaders/BootloaderUpdater/Makefile b/flight/Bootloaders/BootloaderUpdater/Makefile index 25de8140b..81aa163ec 100644 --- a/flight/Bootloaders/BootloaderUpdater/Makefile +++ b/flight/Bootloaders/BootloaderUpdater/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET = bu_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -51,21 +58,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD ?= NULL -MODEL ?= NULL - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = ../../../build/bootloaders/BootloaderUpdater - -# Target file name (without extension). -TARGET = BL_Updater - # Paths OPSYSTEM = . OPSYSTEMINC = $(OPSYSTEM)/inc @@ -224,7 +216,6 @@ endif ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif -CDEFS += -DUSE_BOOTLOADER # Place project-specific -D and/or -U options for # Assembler with preprocessor here. @@ -309,9 +300,9 @@ LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin # Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08003000 bin" +OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) $(START_OF_FW_CODE) bin" # Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08003000 bin" +OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) $(START_OF_FW_CODE) bin" # reset target OOCD_CL+=-c "reset run" # terminate OOCD after programming @@ -364,6 +355,7 @@ program: $(OUTDIR)/$(TARGET).bin endif # Link: create ELF output file from object files. +BLOBJ := $(TOP)/build/bl_$(BOARD_NAME)/bl_$(BOARD_NAME).bin.o $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ) $(BLOBJ))) # Assemble: create object files from assembler source files. @@ -392,14 +384,16 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin -.PHONY: elf lss sym hex bin bino +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf -elf.stripped: $(OUTDIR)/$(TARGET).elf.stripped lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) @@ -411,11 +405,11 @@ docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif diff --git a/flight/Bootloaders/CopterControl/Makefile b/flight/Bootloaders/CopterControl/Makefile index 08b97701c..4fc2f0f08 100644 --- a/flight/Bootloaders/CopterControl/Makefile +++ b/flight/Bootloaders/CopterControl/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := bl_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -48,21 +55,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_CC_Rev1 -MODEL = MD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/bl_coptercontrol - -# Target file name (without extension). -TARGET = CopterControl_BL - # Paths OPSYSTEM = . OPSYSTEMINC = $(OPSYSTEM)/inc @@ -181,7 +173,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -260,6 +252,15 @@ ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif +# Provide (only) the bootloader with board-specific defines +BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE) +BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION) +BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE) +BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION) +BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE) +BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE) +BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE) + # Place project-specific -D and/or -U options for # Assembler with preprocessor here. #ADEFS = -DUSE_IRQ_ASM_WRAPPER @@ -295,8 +296,9 @@ ifeq ($(DEBUG),NO) CFLAGS += -ffunction-sections endif -CFLAGS += -mcpu=$(MCU) -mthumb +CFLAGS += -mcpu=$(MCU) CFLAGS += $(CDEFS) +CFLAGS += $(BLONLY_CDEFS) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. CFLAGS += -mapcs-frame @@ -316,7 +318,7 @@ CONLYFLAGS += $(CSTANDARD) # Assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlns: create listing -ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp +ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) @@ -341,20 +343,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -394,14 +384,6 @@ ${OUTDIR}/InitMods.c: Makefile @echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c @echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -431,6 +413,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE))) + .PHONY: elf lss sym hex bin bino elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss @@ -441,8 +426,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: @@ -495,4 +478,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/Bootloaders/CopterControl/main.c b/flight/Bootloaders/CopterControl/main.c index 23a8f16c1..67f6a4c32 100644 --- a/flight/Bootloaders/CopterControl/main.c +++ b/flight/Bootloaders/CopterControl/main.c @@ -27,6 +27,7 @@ */ /* Bootloader Includes */ #include +#include #include "stopwatch.h" #include "op_dfu.h" #include "usb_lib.h" @@ -163,7 +164,9 @@ int main() { } void jump_to_app() { - if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ + const struct pios_board_info * bdinfo = &pios_board_info_blob; + + if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ FLASH_Lock(); RCC_APB2PeriphResetCmd(0xffffffff, ENABLE); RCC_APB1PeriphResetCmd(0xffffffff, ENABLE); @@ -171,10 +174,10 @@ void jump_to_app() { RCC_APB1PeriphResetCmd(0xffffffff, DISABLE); _SetCNTR(0); // clear interrupt mask _SetISTR(0); // clear all requests - JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4); + JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) START_OF_USER_CODE); + __set_MSP(*(__IO uint32_t*) bdinfo->fw_base); Jump_To_Application(); } else { DeviceState = failed_jump; diff --git a/flight/Bootloaders/CopterControl/op_dfu.c b/flight/Bootloaders/CopterControl/op_dfu.c index 854c7cb71..b45e1e798 100644 --- a/flight/Bootloaders/CopterControl/op_dfu.c +++ b/flight/Bootloaders/CopterControl/op_dfu.c @@ -30,6 +30,7 @@ #include "pios.h" #include "op_dfu.h" #include "pios_bl_helper.h" +#include //programmable devices Device devicesTable[10]; uint8_t numberOfDevices = 0; @@ -382,16 +383,18 @@ void processComand(uint8_t *xReceive_Buffer) { return; } void OPDfuIni(uint8_t discover) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; Device dev; + dev.programmingType = Self_flash; - dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1)); - dev.startOfUserCode = START_OF_USER_CODE; - dev.sizeOfCode = SIZE_OF_CODE; - dev.sizeOfDescription = SIZE_OF_DESCRIPTION; - dev.BL_Version = BOOTLOADER_VERSION; + dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1)); + dev.startOfUserCode = bdinfo->fw_base; + dev.sizeOfCode = bdinfo->fw_size; + dev.sizeOfDescription = bdinfo->desc_size; + dev.BL_Version = bdinfo->bl_rev; dev.FW_Crc = CalcFirmCRC(); - dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION; - dev.devType = HW_TYPE; + dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev); + dev.devType = bdinfo->hw_type; numberOfDevices = 1; devicesTable[0] = dev; if (discover) { diff --git a/flight/Bootloaders/OpenPilot/Makefile b/flight/Bootloaders/OpenPilot/Makefile index 33a7f8705..e4285f7e0 100644 --- a/flight/Bootloaders/OpenPilot/Makefile +++ b/flight/Bootloaders/OpenPilot/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := bl_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -48,21 +55,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103RET -BOARD = STM3210E_OP -MODEL = HD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/bl_openpilot - -# Target file name (without extension). -TARGET = OpenPilot_BL - # Paths OPSYSTEM = . OPSYSTEMINC = $(OPSYSTEM)/inc @@ -184,7 +176,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_OP.S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -263,6 +255,15 @@ ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif +# Provide (only) the bootloader with board-specific defines +BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE) +BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION) +BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE) +BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION) +BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE) +BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE) +BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE) + # Place project-specific -D and/or -U options for # Assembler with preprocessor here. #ADEFS = -DUSE_IRQ_ASM_WRAPPER @@ -300,6 +301,7 @@ endif CFLAGS += -mcpu=$(MCU) CFLAGS += $(CDEFS) +CFLAGS += $(BLONLY_CDEFS) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. CFLAGS += -mapcs-frame @@ -344,20 +346,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -397,14 +387,6 @@ ${OUTDIR}/InitMods.c: Makefile @echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c @echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -434,6 +416,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE))) + .PHONY: elf lss sym hex bin bino elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss @@ -444,8 +429,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: @@ -498,4 +481,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/Bootloaders/OpenPilot/main.c b/flight/Bootloaders/OpenPilot/main.c index 4766caf41..3ed5a80aa 100644 --- a/flight/Bootloaders/OpenPilot/main.c +++ b/flight/Bootloaders/OpenPilot/main.c @@ -27,6 +27,7 @@ */ /* Bootloader Includes */ #include +#include #include "pios_opahrs.h" #include "stopwatch.h" #include "op_dfu.h" @@ -216,7 +217,9 @@ int main() { } void jump_to_app() { - if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ + const struct pios_board_info * bdinfo = &pios_board_info_blob; + + if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ FLASH_Lock(); RCC_APB2PeriphResetCmd(0xffffffff, ENABLE); RCC_APB1PeriphResetCmd(0xffffffff, ENABLE); @@ -225,10 +228,10 @@ void jump_to_app() { _SetCNTR(0); // clear interrupt mask _SetISTR(0); // clear all requests - JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4); + JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) START_OF_USER_CODE); + __set_MSP(*(__IO uint32_t*) bdinfo->fw_base); Jump_To_Application(); } else { DeviceState = failed_jump; diff --git a/flight/Bootloaders/OpenPilot/op_dfu.c b/flight/Bootloaders/OpenPilot/op_dfu.c index 77b4c2c59..bc62fff6c 100644 --- a/flight/Bootloaders/OpenPilot/op_dfu.c +++ b/flight/Bootloaders/OpenPilot/op_dfu.c @@ -30,6 +30,7 @@ #include "pios.h" #include "op_dfu.h" #include "pios_bl_helper.h" +#include #include "pios_opahrs.h" #include "ssp.h" /* Private typedef -----------------------------------------------------------*/ @@ -447,16 +448,18 @@ void processComand(uint8_t *xReceive_Buffer) { return; } void OPDfuIni(uint8_t discover) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; Device dev; + dev.programmingType = Self_flash; - dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1)); - dev.startOfUserCode = START_OF_USER_CODE; - dev.sizeOfCode = SIZE_OF_CODE; - dev.sizeOfDescription = SIZE_OF_DESCRIPTION; - dev.BL_Version = BOOTLOADER_VERSION; + dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1)); + dev.startOfUserCode = bdinfo->fw_base; + dev.sizeOfCode = bdinfo->fw_size; + dev.sizeOfDescription = bdinfo->desc_size; + dev.BL_Version = bdinfo->bl_rev; dev.FW_Crc = CalcFirmCRC(); - dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION; - dev.devType = HW_TYPE; + dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev); + dev.devType = bdinfo->hw_type; numberOfDevices = 1; devicesTable[0] = dev; if (discover) { diff --git a/flight/Bootloaders/PipXtreme/Makefile b/flight/Bootloaders/PipXtreme/Makefile index 00fa37f81..dbf537bab 100644 --- a/flight/Bootloaders/PipXtreme/Makefile +++ b/flight/Bootloaders/PipXtreme/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := bl_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -48,21 +55,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_PIPXTREME -MODEL = MD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/bl_pipxtreme - -# Target file name (without extension). -TARGET = PipXtreme_BL - # Paths OPSYSTEM = . OPSYSTEMINC = $(OPSYSTEM)/inc @@ -180,7 +172,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -259,6 +251,17 @@ ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif +# Provide (only) the bootloader with board-specific defines +BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE) +BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION) +BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE) +BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION) +BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE) +BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE) +BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE) +BLONLY_CDEFS += -DEE_BANK_BASE=$(EE_BANK_BASE) +BLONLY_CDEFS += -DEE_BANK_SIZE=$(EE_BANK_SIZE) + # Place project-specific -D and/or -U options for # Assembler with preprocessor here. #ADEFS = -DUSE_IRQ_ASM_WRAPPER @@ -294,8 +297,9 @@ ifeq ($(DEBUG),NO) CFLAGS += -ffunction-sections endif -CFLAGS += -mcpu=$(MCU) -mthumb +CFLAGS += -mcpu=$(MCU) CFLAGS += $(CDEFS) +CFLAGS += $(BLONLY_CDEFS) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. CFLAGS += -mapcs-frame @@ -315,7 +319,7 @@ CONLYFLAGS += $(CSTANDARD) # Assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlns: create listing -ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp +ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) @@ -340,20 +344,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -393,14 +385,6 @@ ${OUTDIR}/InitMods.c: Makefile @echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c @echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -430,6 +414,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE))) + .PHONY: elf lss sym hex bin bino elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss @@ -440,8 +427,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: @@ -494,4 +479,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/Bootloaders/PipXtreme/main.c b/flight/Bootloaders/PipXtreme/main.c index a8eb5bcc6..d1568d163 100644 --- a/flight/Bootloaders/PipXtreme/main.c +++ b/flight/Bootloaders/PipXtreme/main.c @@ -27,6 +27,7 @@ */ /* Bootloader Includes */ #include +#include #include "stopwatch.h" #include "op_dfu.h" #include "usb_lib.h" @@ -170,7 +171,9 @@ int main() { } void jump_to_app() { - if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ + const struct pios_board_info * bdinfo = &pios_board_info_blob; + + if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ FLASH_Lock(); RCC_APB2PeriphResetCmd(0xffffffff, ENABLE); RCC_APB1PeriphResetCmd(0xffffffff, ENABLE); @@ -179,10 +182,10 @@ void jump_to_app() { _SetCNTR(0); // clear interrupt mask _SetISTR(0); // clear all requests - JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4); + JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) START_OF_USER_CODE); + __set_MSP(*(__IO uint32_t*) bdinfo->fw_base); Jump_To_Application(); } else { DeviceState = failed_jump; diff --git a/flight/Bootloaders/PipXtreme/op_dfu.c b/flight/Bootloaders/PipXtreme/op_dfu.c index c413c31ba..770ce8237 100644 --- a/flight/Bootloaders/PipXtreme/op_dfu.c +++ b/flight/Bootloaders/PipXtreme/op_dfu.c @@ -30,6 +30,7 @@ #include "pios.h" #include "op_dfu.h" #include "pios_bl_helper.h" +#include /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ @@ -414,16 +415,18 @@ void processComand(uint8_t *xReceive_Buffer) { return; } void OPDfuIni(uint8_t discover) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; Device dev; + dev.programmingType = Self_flash; - dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1)); - dev.startOfUserCode = START_OF_USER_CODE; - dev.sizeOfCode = SIZE_OF_CODE; - dev.sizeOfDescription = SIZE_OF_DESCRIPTION; - dev.BL_Version = BOOTLOADER_VERSION; + dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1)); + dev.startOfUserCode = bdinfo->fw_base; + dev.sizeOfCode = bdinfo->fw_size; + dev.sizeOfDescription = bdinfo->desc_size; + dev.BL_Version = bdinfo->bl_rev; dev.FW_Crc = CalcFirmCRC(); - dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION; - dev.devType = HW_TYPE; + dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev); + dev.devType = bdinfo->hw_type; numberOfDevices = 1; devicesTable[0] = dev; if (discover) { diff --git a/flight/CopterControl/Makefile b/flight/CopterControl/Makefile index 627882539..2467968cb 100644 --- a/flight/CopterControl/Makefile +++ b/flight/CopterControl/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := fw_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -57,21 +64,6 @@ FLASH_TOOL = OPENOCD # List of modules to include MODULES = Telemetry Attitude Stabilization Actuator ManualControl FirmwareIAP -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_CC_Rev1 -MODEL = MD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/coptercontrol - -# Target file name (without extension). -TARGET = CopterControl - # Paths OPSYSTEM = ./System OPSYSTEMINC = $(OPSYSTEM)/inc @@ -299,7 +291,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_CC.S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -381,7 +373,6 @@ endif ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif -CDEFS += -DUSE_BOOTLOADER ifeq ($(ERASE_FLASH), YES) CDEFS += -DERASE_FLASH endif @@ -475,21 +466,9 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08003000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08003000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f PYTHON = python -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -540,13 +519,6 @@ ${OUTDIR}/InitMods.c: Makefile # @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h # @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -576,29 +548,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin -.PHONY: elf lss sym hex bin bino +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif @@ -642,4 +618,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program gencode install +.PHONY : all build clean clean_list gencode install diff --git a/flight/INS/Makefile b/flight/INS/Makefile index 1b27d8cba..bd3bb52a9 100644 --- a/flight/INS/Makefile +++ b/flight/INS/Makefile @@ -25,11 +25,17 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := fw_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES for debugging DEBUG ?= YES -USE_BOOTLOADER ?= NO # Set to YES when using Code Sourcery toolchain CODE_SOURCERY ?= YES @@ -42,26 +48,6 @@ endif FLASH_TOOL = OPENOCD -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103RET -BOARD = STM3210E_INS -MODEL = HD -ifeq ($(USE_BOOTLOADER), YES) -BOOT_MODEL = $(MODEL)_BL -else -BOOT_MODEL = $(MODEL)_NB -endif - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/ins - -# Target file name (without extension). -TARGET = INS - # Paths INS = ./ INSINC = $(INS)/inc @@ -168,7 +154,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -231,9 +217,7 @@ CDEFS = -DSTM32F10X_$(MODEL) CDEFS += -DUSE_STDPERIPH_DRIVER CDEFS += -DUSE_$(BOARD) CDEFS += -DIN_INS -ifeq ($(USE_BOOTLOADER), YES) -CDEFS += -DUSE_BOOTLOADER -endif + # Place project-specific -D and/or -U options for # Assembler with preprocessor here. #ADEFS = -DUSE_IRQ_ASM_WRAPPER @@ -311,22 +295,11 @@ LDFLAGS += $(MATH_LIB) LDFLAGS += -lc -lgcc # Set linker-script name depending on selected submodel name -LDFLAGS +=-T$(LINKERSCRIPTPATH)/link_$(BOARD)_$(BOOT_MODEL).ld - -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).elf -# Program -OOCD_CL+=-c "flash write_image $(OOCD_LOADFILE)" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE)" -# reset target -OOCD_CL+=-c "reset run" -# # terminate OOCD after programming -OOCD_CL+=-c shutdown +LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld +LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -358,21 +331,6 @@ endif endif endif -# Program the device. -ifeq ($(USE_BOOTLOADER), YES) -# Program the device with OP Upload Tool". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OP Upload Tool${quote} - ../../ground/src/experimental/upload-build-desktop/debug/OPUploadTool -d 1 -p $(OUTDIR)/$(TARGET).bin -else -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).elf - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -400,28 +358,35 @@ $(eval $(call PARTIAL_COMPILE_TEMPLATE, SRC)) # Compile: create assembler files from C source files. ARM only $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) -.PHONY: elf lss sym hex bin +$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin + +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin +bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif @@ -461,4 +426,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/flight/Modules/FirmwareIAP/firmwareiap.c b/flight/Modules/FirmwareIAP/firmwareiap.c index 11e8721fd..395ed960f 100644 --- a/flight/Modules/FirmwareIAP/firmwareiap.c +++ b/flight/Modules/FirmwareIAP/firmwareiap.c @@ -27,6 +27,7 @@ #include #include "pios.h" +#include #include "openpilot.h" #include "firmwareiap.h" #include "firmwareiapobj.h" @@ -90,10 +91,12 @@ static void resetTask(UAVObjEvent *); int32_t FirmwareIAPInitialize() { - data.BoardType= BOARD_TYPE; + const struct pios_board_info * bdinfo = &pios_board_info_blob; + + data.BoardType= bdinfo->board_type; PIOS_BL_HELPER_FLASH_Read_Description(data.Description,FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM); PIOS_SYS_SerialNumberGetBinary(data.CPUSerial); - data.BoardRevision= BOARD_REVISION; + data.BoardRevision= bdinfo->board_rev; data.ArmReset=0; data.crc = 0; FirmwareIAPObjSet( &data ); @@ -112,6 +115,7 @@ int32_t FirmwareIAPInitialize() static uint8_t iap_state = IAP_STATE_READY; static void FirmwareIAPCallback(UAVObjEvent* ev) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; static uint32_t last_time = 0; uint32_t this_time; uint32_t delta; @@ -125,11 +129,11 @@ static void FirmwareIAPCallback(UAVObjEvent* ev) this_time = get_time(); delta = this_time - last_time; last_time = this_time; - if((data.BoardType==BOARD_TYPE)&&(data.crc != PIOS_BL_HELPER_CRC_Memory_Calc())) + if((data.BoardType==bdinfo->board_type)&&(data.crc != PIOS_BL_HELPER_CRC_Memory_Calc())) { PIOS_BL_HELPER_FLASH_Read_Description(data.Description,FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM); PIOS_SYS_SerialNumberGetBinary(data.CPUSerial); - data.BoardRevision=BOARD_REVISION; + data.BoardRevision=bdinfo->board_rev; data.crc = PIOS_BL_HELPER_CRC_Memory_Calc(); FirmwareIAPObjSet( &data ); } diff --git a/flight/OpenPilot/Makefile b/flight/OpenPilot/Makefile index add129e41..a2a8e667b 100644 --- a/flight/OpenPilot/Makefile +++ b/flight/OpenPilot/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := fw_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Set developer code and compile options # Set to YES to compile for debugging @@ -59,21 +66,6 @@ PYMODULES = FlightPlan #MODULES = Telemetry #MODULES += Osd/OsdEtStd -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103RET -BOARD = STM3210E_OP -MODEL = HD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/openpilot - -# Target file name (without extension). -TARGET = OpenPilot - # Paths OPSYSTEM = ./System OPSYSTEMINC = $(OPSYSTEM)/inc @@ -287,7 +279,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_OP.S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -369,7 +361,6 @@ endif ifeq ($(ENABLE_AUX_UART), YES) CDEFS += -DPIOS_ENABLE_AUX_UART endif -CDEFS += -DUSE_BOOTLOADER ifeq ($(USE_SPEKTRUM), YES) CDEFS += -DUSE_SPEKTRUM @@ -451,22 +442,9 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08005000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08005000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f PYTHON = python -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -519,14 +497,6 @@ ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/p @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -556,29 +526,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin -.PHONY: elf lss sym hex bin bino +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif @@ -622,4 +596,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program gencode install +.PHONY : all build clean clean_list gencode install diff --git a/flight/PiOS/Boards/STM32103CB_AHRS.h b/flight/PiOS/Boards/STM32103CB_AHRS.h index 8262f9730..b407c0f42 100644 --- a/flight/PiOS/Boards/STM32103CB_AHRS.h +++ b/flight/PiOS/Boards/STM32103CB_AHRS.h @@ -64,25 +64,8 @@ TIM8 | | | | //------------------------ // BOOTLOADER_SETTINGS //------------------------ -//#define FUNC_ID 2 -//#define HW_VERSION 69 - -#define BOOTLOADER_VERSION 0 -#define BOARD_TYPE 0x02 -#define BOARD_REVISION 0x01 -//#define HW_VERSION (BOARD_TYPE << 8) | BOARD_REVISION - -#define MEM_SIZE 0x20000 //128K -#define SIZE_OF_DESCRIPTION 100 -#define START_OF_USER_CODE (uint32_t)0x08002000 -#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION) -#ifdef STM32F10X_HD - #define HW_TYPE 0 //0=high_density 1=medium_density; -#elif STM32F10X_MD - #define HW_TYPE 1 //0=high_density 1=medium_density; -#endif #define BOARD_READABLE TRUE -#define BOARD_WRITABLA TRUE +#define BOARD_WRITABLE TRUE #define MAX_DEL_RETRYS 3 //------------------------ @@ -107,11 +90,6 @@ TIM8 | | | | //------------------------- #define PIOS_MASTER_CLOCK 72000000 #define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2) -#if defined(USE_BOOTLOADER) -#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE) -#else -#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) -#endif //------------------------- // Interrupt Priorities diff --git a/flight/PiOS/Boards/STM32103CB_CC_Rev1.h b/flight/PiOS/Boards/STM32103CB_CC_Rev1.h index 09405bfa3..16e58b5c2 100644 --- a/flight/PiOS/Boards/STM32103CB_CC_Rev1.h +++ b/flight/PiOS/Boards/STM32103CB_CC_Rev1.h @@ -60,23 +60,8 @@ TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1 //------------------------ // BOOTLOADER_SETTINGS //------------------------ -//#define FUNC_ID 2 -//#define HW_VERSION 69 - -#define BOOTLOADER_VERSION 0 -#define BOARD_TYPE 0x04 -#define BOARD_REVISION 0x01 -#define MEM_SIZE 0x20000 //128K -#define SIZE_OF_DESCRIPTION 100 -#define START_OF_USER_CODE (uint32_t)0x08003000 -#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION) -#ifdef STM32F10X_HD - #define HW_TYPE 0 //0=high_density 1=medium_density; -#elif STM32F10X_MD - #define HW_TYPE 1 //0=high_density 1=medium_density; -#endif #define BOARD_READABLE TRUE -#define BOARD_WRITABLA TRUE +#define BOARD_WRITABLE TRUE #define MAX_DEL_RETRYS 3 @@ -117,11 +102,6 @@ TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1 //------------------------- #define PIOS_MASTER_CLOCK 72000000 #define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2) -#if defined(USE_BOOTLOADER) -#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE) -#else -#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) -#endif //------------------------- // Interrupt Priorities diff --git a/flight/PiOS/Boards/STM32103CB_PIPXTREME_Rev1.h b/flight/PiOS/Boards/STM32103CB_PIPXTREME_Rev1.h index a4792a717..a8eead4bd 100644 --- a/flight/PiOS/Boards/STM32103CB_PIPXTREME_Rev1.h +++ b/flight/PiOS/Boards/STM32103CB_PIPXTREME_Rev1.h @@ -58,20 +58,8 @@ TIM4 | STOPWATCH | //------------------------ // BOOTLOADER_SETTINGS //------------------------ -#define BOOTLOADER_VERSION 0 -#define BOARD_TYPE 0x03 -#define BOARD_REVISION 0x01 -#define MEM_SIZE (0x20000 - 0x00400) // 128K - 1K (reserved for config data) -#define SIZE_OF_DESCRIPTION 100 -#define START_OF_USER_CODE (uint32_t)0x08003000 -#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION) -#ifdef STM32F10X_HD - #define HW_TYPE 0 //0=high_density 1=medium_density; -#elif STM32F10X_MD - #define HW_TYPE 1 //0=high_density 1=medium_density; -#endif #define BOARD_READABLE TRUE -#define BOARD_WRITABLA TRUE +#define BOARD_WRITABLE TRUE #define MAX_DEL_RETRYS 3 @@ -81,12 +69,6 @@ TIM4 | STOPWATCH | #define PIOS_MASTER_CLOCK 72000000ul #define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2) -#if defined(USE_BOOTLOADER) - #define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE) -#else - #define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) -#endif - // ***************************************************************** // Interrupt Priorities diff --git a/flight/PiOS/Boards/STM3210E_INS.h b/flight/PiOS/Boards/STM3210E_INS.h index 22c94837b..d0c988b21 100644 --- a/flight/PiOS/Boards/STM3210E_INS.h +++ b/flight/PiOS/Boards/STM3210E_INS.h @@ -69,27 +69,8 @@ TIM8 | | | | //------------------------ // BOOTLOADER_SETTINGS //------------------------ - -//#define FUNC_ID 1 -//#define HW_VERSION 01 - -#define BOOTLOADER_VERSION 0 -#define BOARD_TYPE 0x05 // INS board -#define BOARD_REVISION 0x01 // Beta version -//#define HW_VERSION (BOARD_TYPE << 8) | BOARD_REVISION - -#define MEM_SIZE 524288 //512K -#define SIZE_OF_DESCRIPTION (uint8_t) 100 -#define START_OF_USER_CODE (uint32_t)0x08005000//REMEMBER SET ALSO IN link_stm32f10x_HD_BL.ld -#define SIZE_OF_CODE (uint32_t) (MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION) - -#ifdef STM32F10X_HD - #define HW_TYPE 0 //0=high_density 1=medium_density; -#elif STM32F10X_MD - #define HW_TYPE 1 //0=high_density 1=medium_density; -#endif #define BOARD_READABLE TRUE -#define BOARD_WRITABLA TRUE +#define BOARD_WRITABLE TRUE #define MAX_DEL_RETRYS 3 //------------------------ @@ -176,11 +157,6 @@ extern uint32_t pios_com_aux_id; //------------------------- #define PIOS_MASTER_CLOCK 72000000 #define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2) -#if defined(USE_BOOTLOADER) -#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE) -#else -#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) -#endif //------------------------- // Interrupt Priorities diff --git a/flight/PiOS/Boards/STM3210E_OP.h b/flight/PiOS/Boards/STM3210E_OP.h index 48653179c..c042184ea 100644 --- a/flight/PiOS/Boards/STM3210E_OP.h +++ b/flight/PiOS/Boards/STM3210E_OP.h @@ -68,27 +68,8 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8 //------------------------ // BOOTLOADER_SETTINGS //------------------------ - -//#define FUNC_ID 1 -//#define HW_VERSION 01 - -#define BOOTLOADER_VERSION 0 -#define BOARD_TYPE 0x01 // OpenPilot board -#define BOARD_REVISION 0x01 // Beta version -//#define HW_VERSION (BOARD_TYPE << 8) | BOARD_REVISION - -#define MEM_SIZE 524288 //512K -#define SIZE_OF_DESCRIPTION (uint8_t) 100 -#define START_OF_USER_CODE (uint32_t)0x08005000//REMEMBER SET ALSO IN link_stm32f10x_HD_BL.ld -#define SIZE_OF_CODE (uint32_t) (MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION) - -#ifdef STM32F10X_HD - #define HW_TYPE 0 //0=high_density 1=medium_density; -#elif STM32F10X_MD - #define HW_TYPE 1 //0=high_density 1=medium_density; -#endif #define BOARD_READABLE TRUE -#define BOARD_WRITABLA TRUE +#define BOARD_WRITABLE TRUE #define MAX_DEL_RETRYS 3 //------------------------ @@ -203,11 +184,6 @@ extern uint32_t pios_com_spektrum_id; //------------------------- #define PIOS_MASTER_CLOCK 72000000 #define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2) -#if defined(USE_BOOTLOADER) -#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE) -#else -#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000) -#endif //------------------------- // Interrupt Priorities diff --git a/flight/PiOS/Common/pios_bl_helper.c b/flight/PiOS/Common/pios_bl_helper.c index 545a008c6..967c3c7e6 100644 --- a/flight/PiOS/Common/pios_bl_helper.c +++ b/flight/PiOS/Common/pios_bl_helper.c @@ -31,6 +31,7 @@ /* Project Includes */ #include "pios.h" #if defined(PIOS_INCLUDE_BL_HELPER) +#include #include "stm32f10x_flash.h" uint8_t *PIOS_BL_HELPER_FLASH_If_Read(uint32_t SectorAddress) @@ -47,10 +48,10 @@ uint8_t PIOS_BL_HELPER_FLASH_Ini() uint8_t PIOS_BL_HELPER_FLASH_Start() { - uint32_t pageAdress; - pageAdress = START_OF_USER_CODE; + const struct pios_board_info * bdinfo = &pios_board_info_blob; + uint32_t pageAdress = bdinfo->fw_base; uint8_t fail = FALSE; - while ((pageAdress < START_OF_USER_CODE + SIZE_OF_CODE + SIZE_OF_DESCRIPTION) + while ((pageAdress < (bdinfo->fw_base + bdinfo->fw_size + bdinfo->desc_size)) || (fail == TRUE)) { for (int retry = 0; retry < MAX_DEL_RETRYS; ++retry) { if (FLASH_ErasePage(pageAdress) == FLASH_COMPLETE) { @@ -75,17 +76,20 @@ uint8_t PIOS_BL_HELPER_FLASH_Start() uint32_t PIOS_BL_HELPER_CRC_Memory_Calc() { + const struct pios_board_info * bdinfo = &pios_board_info_blob; + PIOS_BL_HELPER_CRC_Ini(); CRC_ResetDR(); - CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2); + CRC_CalcBlockCRC((uint32_t *) bdinfo->fw_base, (bdinfo->fw_size) >> 2); return CRC_GetCRC(); } void PIOS_BL_HELPER_FLASH_Read_Description(uint8_t * array, uint8_t size) { + const struct pios_board_info * bdinfo = &pios_board_info_blob; uint8_t x = 0; - if (size>SIZE_OF_DESCRIPTION) size = SIZE_OF_DESCRIPTION; - for (uint32_t i = START_OF_USER_CODE + SIZE_OF_CODE; i < START_OF_USER_CODE + SIZE_OF_CODE + size; ++i) { + if (size > bdinfo->desc_size) size = bdinfo->desc_size; + for (uint32_t i = bdinfo->fw_base + bdinfo->fw_size; i < bdinfo->fw_base + bdinfo->fw_size + size; ++i) { array[x] = *PIOS_BL_HELPER_FLASH_If_Read(i); ++x; } diff --git a/flight/PiOS/Common/pios_board_info.c b/flight/PiOS/Common/pios_board_info.c index db9e72f9e..8905a5c08 100644 --- a/flight/PiOS/Common/pios_board_info.c +++ b/flight/PiOS/Common/pios_board_info.c @@ -9,8 +9,12 @@ const struct pios_board_info __attribute__((__used__)) __attribute__((__section_ .board_rev = BOARD_REVISION, .bl_rev = BOOTLOADER_VERSION, .hw_type = HW_TYPE, - .fw_base = START_OF_USER_CODE, - .fw_size = SIZE_OF_CODE, - .desc_base = START_OF_USER_CODE + SIZE_OF_CODE, - .desc_size = SIZE_OF_DESCRIPTION, + .fw_base = FW_BANK_BASE, + .fw_size = FW_BANK_SIZE - FW_DESC_SIZE, + .desc_base = FW_BANK_BASE + FW_BANK_SIZE - FW_DESC_SIZE, + .desc_size = FW_DESC_SIZE, +#ifdef EE_BANK_BASE + .ee_base = EE_BANK_BASE, + .ee_size = EE_BANK_SIZE, +#endif }; diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_BL_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_BL_sections.ld index 4f3c77d4c..d411c3e4f 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_BL_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_BL_sections.ld @@ -5,6 +5,7 @@ SECTIONS { .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_sections.ld index 82a8ae7f4..dd814f561 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_AHRS_sections.ld @@ -1,16 +1,13 @@ +PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO)); + _estack = 0x20004FF0; /* Section Definitions */ SECTIONS { - .boardinfo : - { - . = ALIGN(4); - PROVIDE(pios_board_info_blob = .); - } > BD_INFO - .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_BL_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_BL_sections.ld index 13cd35df6..c16bd7af9 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_BL_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_BL_sections.ld @@ -10,6 +10,7 @@ SECTIONS { .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_sections.ld index 6e46c43c5..e1cb0bd0f 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_CC_Rev1_sections.ld @@ -3,19 +3,16 @@ PROVIDE ( vPortSVCHandler = 0 ) ; PROVIDE ( xPortPendSVHandler = 0 ) ; PROVIDE ( xPortSysTickHandler = 0 ) ; +PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO)); + _estack = 0x20004FF0; /* Section Definitions */ SECTIONS { - .boardinfo : - { - . = ALIGN(4); - PROVIDE(pios_board_info_blob = .); - } > BD_INFO - .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_BL_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_BL_sections.ld index 4b35cd71b..69eaadb8c 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_BL_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_BL_sections.ld @@ -10,6 +10,7 @@ SECTIONS { .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_memory.ld b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_memory.ld index fd36c31ba..04aa69ccb 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_memory.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_memory.ld @@ -2,6 +2,7 @@ MEMORY { BL_FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 0x03000 - 0x00080 BD_INFO (r) : ORIGIN = 0x08003000 - 0x80, LENGTH = 0x00080 - FLASH (rx) : ORIGIN = 0x08003000, LENGTH = 0x20000 - 0x03000 + FLASH (rx) : ORIGIN = 0x08003000, LENGTH = 0x20000 - 0x03000 - 0x00400 + EE_FLASH (rw) : ORIGIN = 0x0801FC00, LENGTH = 0x00400 SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x05000 } diff --git a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_sections.ld b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_sections.ld index dc09e6f1c..badf5f986 100644 --- a/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM32103CB_PIPXTREME_sections.ld @@ -3,19 +3,16 @@ PROVIDE ( vPortSVCHandler = 0 ) ; PROVIDE ( xPortPendSVHandler = 0 ) ; PROVIDE ( xPortSysTickHandler = 0 ) ; +PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO)); + _estack = 0x20004FF0; /* Section Definitions */ SECTIONS { - .boardinfo : - { - . = ALIGN(4); - PROVIDE(pios_board_info_blob = .); - } > BD_INFO - .text : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) diff --git a/flight/PiOS/STM32F10x/link_STM3210E_INS_HD_BL.ld b/flight/PiOS/STM32F10x/link_STM3210E_INS_BL_sections.ld similarity index 92% rename from flight/PiOS/STM32F10x/link_STM3210E_INS_HD_BL.ld rename to flight/PiOS/STM32F10x/link_STM3210E_INS_BL_sections.ld index ab897621c..1b3c11e34 100644 --- a/flight/PiOS/STM32F10x/link_STM3210E_INS_HD_BL.ld +++ b/flight/PiOS/STM32F10x/link_STM3210E_INS_BL_sections.ld @@ -1,9 +1,9 @@ /** ****************************************************************************** * - * @file link_STM3210E_INS_HD_BL.ld + * @file link_STM3210E_INS_HD_NB.ld * @author David "Buzz" Carlson (buzz@chebuzz.com) - * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2011. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2011. * @brief PiOS linker for the OpenPilot INS board * @see The GNU Public License (GPL) Version 3 * @@ -24,26 +24,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Memory Spaces Definitions */ -MEMORY -{ - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08005000, LENGTH = 492K - FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 -} - -_estack = 0x20004FF0; - /* This is the size of the stack for early init and for all FreeRTOS IRQs */ _irq_stack_size = 0x400; /* Check valid alignment for VTOR */ -ASSERT(ORIGIN(FLASH) == ALIGN(ORIGIN(FLASH), 0x80), "Start of memory region flash not aligned for startup vector table"); +ASSERT(ORIGIN(BL_FLASH) == ALIGN(ORIGIN(BL_FLASH), 0x80), "Start of memory region flash not aligned for startup vector table"); /* this sends all unreferenced IRQHandlers to reset @@ -208,9 +193,10 @@ SECTIONS /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ .isr_vector : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); - } >FLASH + } > BL_FLASH /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */ .flashtext : @@ -218,7 +204,7 @@ SECTIONS . = ALIGN(4); *(.flashtext) /* Startup code */ . = ALIGN(4); - } >FLASH + } > BL_FLASH /* init sections */ @@ -229,7 +215,7 @@ SECTIONS KEEP(*(.initcalluavobj.init)) . = ALIGN(4); __uavobj_initcall_end = .; - } >FLASH + } > BL_FLASH /* the program code is stored in the .text section, which goes to Flash */ .text : @@ -247,7 +233,7 @@ SECTIONS _etext = .; /* This is used by the startup in order to initialize the .data secion */ _sidata = _etext; - } >FLASH + } > BL_FLASH /* @@ -354,6 +340,13 @@ SECTIONS __exidx_start = .; __exidx_end = .; + .boardinfo : + { + . = ALIGN(4); + KEEP(*(.boardinfo)) + . = ALIGN(4); + } > BD_INFO + /* after that it's only debugging information. */ /* remove the debugging information from the standard libraries */ diff --git a/flight/PiOS/STM32F10x/link_STM3210E_INS_memory.ld b/flight/PiOS/STM32F10x/link_STM3210E_INS_memory.ld new file mode 100644 index 000000000..7ecb0f65d --- /dev/null +++ b/flight/PiOS/STM32F10x/link_STM3210E_INS_memory.ld @@ -0,0 +1,13 @@ +/* Memory Spaces Definitions */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 0x10000 + BL_FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 0x05000 - 0x00080 + BD_INFO (r) : ORIGIN = 0x08005000 - 0x80, LENGTH = 0x00080 + FLASH (rx) : ORIGIN = 0x08005000, LENGTH = 0x80000 - 0x05000 + FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 + EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 +} diff --git a/flight/PiOS/STM32F10x/link_STM3210E_INS_HD_NB.ld b/flight/PiOS/STM32F10x/link_STM3210E_INS_sections.ld similarity index 93% rename from flight/PiOS/STM32F10x/link_STM3210E_INS_HD_NB.ld rename to flight/PiOS/STM32F10x/link_STM3210E_INS_sections.ld index 99a82b1e4..31e35b305 100644 --- a/flight/PiOS/STM32F10x/link_STM3210E_INS_HD_NB.ld +++ b/flight/PiOS/STM32F10x/link_STM3210E_INS_sections.ld @@ -24,21 +24,6 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Memory Spaces Definitions */ -MEMORY -{ - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K - FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0 - EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0 -} - -_estack = 0x20004FF0; - /* This is the size of the stack for early init and for all FreeRTOS IRQs */ _irq_stack_size = 0x400; @@ -62,10 +47,10 @@ PROVIDE ( HardFault_Handler = 0 ) ; PROVIDE ( MemManage_Handler = 0 ) ; PROVIDE ( BusFault_Handler = 0 ) ; PROVIDE ( UsageFault_Handler = 0 ) ; -PROVIDE ( SVC_Handler = 0 ) ; +PROVIDE ( vPortSVCHandler = 0 ) ; PROVIDE ( DebugMon_Handler = 0 ) ; -PROVIDE ( PendSV_Handler = 0 ) ; -PROVIDE ( SysTick_Handler = 0 ) ; +PROVIDE ( xPortPendSVHandler = 0 ) ; +PROVIDE ( xPortSysTickHandler = 0 ) ; PROVIDE ( WWDG_IRQHandler = 0 ) ; PROVIDE ( PVD_IRQHandler = 0 ) ; @@ -199,18 +184,19 @@ PROVIDE ( SysTick = (SCS_BASE + 0x0010) ) ; PROVIDE ( NVIC = (SCS_BASE + 0x0100) ) ; PROVIDE ( SCB = (SCS_BASE + 0x0D00) ) ; +PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO)); /* Sections Definitions */ SECTIONS { - /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ .isr_vector : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); - } >FLASH + } > FLASH /* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */ .flashtext : @@ -218,7 +204,7 @@ SECTIONS . = ALIGN(4); *(.flashtext) /* Startup code */ . = ALIGN(4); - } >FLASH + } > FLASH /* init sections */ @@ -229,7 +215,7 @@ SECTIONS KEEP(*(.initcalluavobj.init)) . = ALIGN(4); __uavobj_initcall_end = .; - } >FLASH + } > FLASH /* the program code is stored in the .text section, which goes to Flash */ .text : @@ -247,7 +233,7 @@ SECTIONS _etext = .; /* This is used by the startup in order to initialize the .data secion */ _sidata = _etext; - } >FLASH + } > FLASH /* diff --git a/flight/PiOS/STM32F10x/link_STM3210E_OP_BL_sections.ld b/flight/PiOS/STM32F10x/link_STM3210E_OP_BL_sections.ld index 3add614d6..fa01b6c41 100644 --- a/flight/PiOS/STM32F10x/link_STM3210E_OP_BL_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM3210E_OP_BL_sections.ld @@ -2,7 +2,7 @@ _irq_stack_size = 0x400; /* Check valid alignment for VTOR */ -ASSERT(ORIGIN(FLASH) == ALIGN(ORIGIN(FLASH), 0x80), "Start of memory region flash not aligned for startup vector table"); +ASSERT(ORIGIN(BL_FLASH) == ALIGN(ORIGIN(BL_FLASH), 0x80), "Start of memory region flash not aligned for startup vector table"); /* this sends all unreferenced IRQHandlers to reset @@ -166,6 +166,7 @@ SECTIONS /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ .isr_vector : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); } > BL_FLASH diff --git a/flight/PiOS/STM32F10x/link_STM3210E_OP_sections.ld b/flight/PiOS/STM32F10x/link_STM3210E_OP_sections.ld index 2292a40e2..94aafbd78 100644 --- a/flight/PiOS/STM32F10x/link_STM3210E_OP_sections.ld +++ b/flight/PiOS/STM32F10x/link_STM3210E_OP_sections.ld @@ -158,20 +158,16 @@ PROVIDE ( SysTick = (SCS_BASE + 0x0010) ) ; PROVIDE ( NVIC = (SCS_BASE + 0x0100) ) ; PROVIDE ( SCB = (SCS_BASE + 0x0D00) ) ; +PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO)); /* Sections Definitions */ SECTIONS { - .boardinfo : - { - . = ALIGN(4); - PROVIDE(pios_board_info_blob = .); - } > BD_INFO - /* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */ .isr_vector : { + PROVIDE (pios_isr_vector_table_base = .); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); } >FLASH diff --git a/flight/PiOS/STM32F10x/pios_sys.c b/flight/PiOS/STM32F10x/pios_sys.c index 2170c7811..26e748171 100644 --- a/flight/PiOS/STM32F10x/pios_sys.c +++ b/flight/PiOS/STM32F10x/pios_sys.c @@ -186,7 +186,8 @@ int32_t PIOS_SYS_SerialNumberGet(char *str) void NVIC_Configuration(void) { /* Set the Vector Table base address as specified in .ld file */ - NVIC_SetVectorTable(PIOS_NVIC_VECTTAB_FLASH, 0x0); + extern void pios_isr_vector_table_base; + NVIC_SetVectorTable((uint32_t)&pios_isr_vector_table_base, 0x0); /* 4 bits for Interrupt priorities so no sub priorities */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); diff --git a/flight/PiOS/inc/pios_board_info.h b/flight/PiOS/inc/pios_board_info.h index 579a3ec2b..f2ff58fb4 100644 --- a/flight/PiOS/inc/pios_board_info.h +++ b/flight/PiOS/inc/pios_board_info.h @@ -10,6 +10,8 @@ struct pios_board_info { uint32_t fw_size; uint32_t desc_base; uint32_t desc_size; + uint32_t ee_base; + uint32_t ee_size; } __attribute__((packed)); extern const struct pios_board_info pios_board_info_blob; diff --git a/flight/PipXtreme/Makefile b/flight/PipXtreme/Makefile index 3955d1929..9a70ac417 100644 --- a/flight/PipXtreme/Makefile +++ b/flight/PipXtreme/Makefile @@ -25,6 +25,13 @@ WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST))) TOP := $(realpath $(WHEREAMI)/../../) include $(TOP)/make/firmware-defs.mk +include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk + +# Target file name (without extension). +TARGET := fw_$(BOARD_NAME) + +# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) +OUTDIR := $(TOP)/build/$(TARGET) # Debugging (YES/NO) ? DEBUG ?= NO @@ -43,23 +50,6 @@ FLASH_TOOL = OPENOCD # Include the USB files (YES/NO) ? USE_USB = YES -# MCU name, submodel and board -# - MCU used for compiler-option (-mcpu) -# - MODEL used for linker-script name (-T) and passed as define -# - BOARD just passed as define (optional) -MCU = cortex-m3 -CHIP = STM32F103CBT -BOARD = STM32103CB_PIPXTREME -#CHIP = STM32F103C8T -#BOARD = STM32103C8_PIPXTREME -MODEL = MD - -# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.) -OUTDIR = $(TOP)/build/pipxtreme - -# Target file name (without extension). -TARGET = PipXtreme - # Paths HOME_DIR = ./ HOME_DIR_INC = $(HOME_DIR)/inc @@ -192,7 +182,7 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S +ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S # List Assembler source files here which must be assembled in ARM-Mode.. ASRCARM = @@ -257,7 +247,6 @@ DEBUGF = dwarf-2 CDEFS = -DSTM32F10X_$(MODEL) CDEFS += -DUSE_STDPERIPH_DRIVER CDEFS += -DUSE_$(BOARD) -CDEFS += -DUSE_BOOTLOADER # Place project-specific -D and/or -U options for # Assembler with preprocessor here. @@ -340,20 +329,8 @@ LDFLAGS += -lc -lgcc LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld -OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin -# Program -OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08003000 bin" -# Verify -OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08003000 bin" -# reset target -OOCD_CL+=-c "reset run" -# terminate OOCD after programming -OOCD_CL+=-c shutdown - # Define programs and commands. REMOVE = $(REMOVE_CMD) -f -###SHELL = sh -###COPY = cp # List of all source files. ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) @@ -385,14 +362,6 @@ endif endif endif -# Program the device. -ifeq ($(FLASH_TOOL),OPENOCD) -# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script". -program: $(OUTDIR)/$(TARGET).bin - @echo ${quote}Programming with OPENOCD${quote} - $(OOCD_EXE) $(OOCD_CL) -endif - # Link: create ELF output file from object files. $(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) @@ -422,29 +391,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) $(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin -.PHONY: elf lss sym hex bin bino +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE))) + +.PHONY: elf lss sym hex bin bino opfw elf: $(OUTDIR)/$(TARGET).elf lss: $(OUTDIR)/$(TARGET).lss sym: $(OUTDIR)/$(TARGET).sym hex: $(OUTDIR)/$(TARGET).hex bin: $(OUTDIR)/$(TARGET).bin bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw # Display sizes of sections. $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) -.PHONY: size -size: $(OUTDIR)/$(TARGET).elf_size # Generate Doxygen documents docs: doxygen $(DOXYGENDIR)/doxygen.cfg # Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin +install: $(OUTDIR)/$(TARGET).opfw ifneq ($(INSTALL_DIR),) @echo $(MSG_INSTALLING) $(call toprel, $<) $(V1) mkdir -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin + $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw else $(error INSTALL_DIR must be specified for $@) endif @@ -486,4 +459,4 @@ else endif # Listing of phony targets. -.PHONY : all build clean clean_list program install +.PHONY : all build clean clean_list install diff --git a/make/boards/ahrs/board-info.mk b/make/boards/ahrs/board-info.mk new file mode 100644 index 000000000..2103357ba --- /dev/null +++ b/make/boards/ahrs/board-info.mk @@ -0,0 +1,18 @@ +BOARD_TYPE := 0x02 +BOARD_REVISION := 0x01 +BOOTLOADER_VERSION := 0x00 +HW_TYPE := 0x00 + +MCU := cortex-m3 +CHIP := STM32F103CBT +BOARD := STM32103CB_AHRS +MODEL := MD +MODEL_SUFFIX := + +# Note: These must match the values in link_$(BOARD)_memory.ld +BL_BANK_BASE := 0x08000000 # Start of bootloader flash +BL_BANK_SIZE := 0x00002000 # Should include BD_INFO region +FW_BANK_BASE := 0x08002000 # Start of firmware flash +FW_BANK_SIZE := 0x0001E000 # Should include FW_DESC_SIZE + +FW_DESC_SIZE := 0x00000064 diff --git a/make/boards/coptercontrol/board-info.mk b/make/boards/coptercontrol/board-info.mk new file mode 100644 index 000000000..8d3f5d196 --- /dev/null +++ b/make/boards/coptercontrol/board-info.mk @@ -0,0 +1,18 @@ +BOARD_TYPE := 0x04 +BOARD_REVISION := 0x01 +BOOTLOADER_VERSION := 0x00 +HW_TYPE := 0x01 + +MCU := cortex-m3 +CHIP := STM32F103CBT +BOARD := STM32103CB_CC_Rev1 +MODEL := MD +MODEL_SUFFIX := _CC + +# Note: These must match the values in link_$(BOARD)_memory.ld +BL_BANK_BASE := 0x08000000 # Start of bootloader flash +BL_BANK_SIZE := 0x00003000 # Should include BD_INFO region +FW_BANK_BASE := 0x08003000 # Start of firmware flash +FW_BANK_SIZE := 0x0001D000 # Should include FW_DESC_SIZE + +FW_DESC_SIZE := 0x00000064 diff --git a/make/boards/ins/board-info.mk b/make/boards/ins/board-info.mk new file mode 100644 index 000000000..8a57661bf --- /dev/null +++ b/make/boards/ins/board-info.mk @@ -0,0 +1,18 @@ +BOARD_TYPE := 0x05 +BOARD_REVISION := 0x01 +BOOTLOADER_VERSION := 0x00 +HW_TYPE := 0x00 + +MCU := cortex-m3 +CHIP := STM32F103RET +BOARD := STM3210E_INS +MODEL := HD +MODEL_SUFFIX := _OP + +# Note: These must match the values in link_$(BOARD)_memory.ld +BL_BANK_BASE := 0x08000000 # Start of bootloader flash +BL_BANK_SIZE := 0x00002000 # Should include BD_INFO region +FW_BANK_BASE := 0x08002000 # Start of firmware flash +FW_BANK_SIZE := 0x0001E000 # Should include FW_DESC_SIZE + +FW_DESC_SIZE := 0x00000064 diff --git a/make/boards/openpilot/board-info.mk b/make/boards/openpilot/board-info.mk new file mode 100644 index 000000000..f1e35505c --- /dev/null +++ b/make/boards/openpilot/board-info.mk @@ -0,0 +1,18 @@ +BOARD_TYPE := 0x01 +BOARD_REVISION := 0x01 +BOOTLOADER_VERSION := 0x00 +HW_TYPE := 0x00 + +MCU := cortex-m3 +CHIP := STM32F103RET +BOARD := STM3210E_OP +MODEL := HD +MODEL_SUFFIX := _OP + +# Note: These must match the values in link_$(BOARD)_memory.ld +BL_BANK_BASE := 0x08000000 # Start of bootloader flash +BL_BANK_SIZE := 0x00005000 # Should include BD_INFO region +FW_BANK_BASE := 0x08005000 # Start of firmware flash +FW_BANK_SIZE := 0x0007B000 # Should include FW_DESC_SIZE + +FW_DESC_SIZE := 0x00000064 diff --git a/make/boards/pipxtreme/board-info.mk b/make/boards/pipxtreme/board-info.mk new file mode 100644 index 000000000..f9635109e --- /dev/null +++ b/make/boards/pipxtreme/board-info.mk @@ -0,0 +1,20 @@ +BOARD_TYPE := 0x03 +BOARD_REVISION := 0x01 +BOOTLOADER_VERSION := 0x00 +HW_TYPE := 0x01 + +MCU := cortex-m3 +CHIP := STM32F103CBT +BOARD := STM32103CB_PIPXTREME +MODEL := MD +MODEL_SUFFIX := + +# Note: These must match the values in link_$(BOARD)_memory.ld +BL_BANK_BASE := 0x08000000 # Start of bootloader flash +BL_BANK_SIZE := 0x00003000 # Should include BD_INFO region +FW_BANK_BASE := 0x08003000 # Start of firmware flash +FW_BANK_SIZE := 0x0001CC00 # Should include FW_DESC_SIZE +EE_BANK_BASE := 0x0801FC00 # EEPROM storage area +EE_BANK_SIZE := 0x00000400 # Size of EEPROM storage area + +FW_DESC_SIZE := 0x00000064 diff --git a/make/firmware-defs.mk b/make/firmware-defs.mk index eee2d6e9c..901a6c454 100644 --- a/make/firmware-defs.mk +++ b/make/firmware-defs.mk @@ -45,6 +45,10 @@ MSG_ASMFROMC := ${quote} AS(C) ${quote} MSG_ASMFROMC_ARM := ${quote} AS(C)-ARM ${quote} MSG_PYMITEINIT := ${quote} PY ${quote} MSG_INSTALLING := ${quote} INSTALL ${quote} +MSG_OPFIRMWARE := ${quote} OPFW ${quote} +MSG_FWINFO := ${quote} FWINFO ${quote} +MSG_JTAG_PROGRAM := ${quote} JTAG-PGM ${quote} +MSG_JTAG_WIPE := ${quote} JTAG-WIPE ${quote} toprel = $(subst $(realpath $(TOP))/,,$(abspath $(1))) @@ -68,6 +72,10 @@ gccversion : @echo $(MSG_LOAD_FILE) $(call toprel, $@) $(V1) $(OBJCOPY) -O binary $< $@ +%.bin: %.o + @echo $(MSG_LOAD_FILE) $(call toprel, $@) + $(V1) $(OBJCOPY) -O binary $< $@ + %.bin.o: %.bin @echo $(MSG_BIN_OBJ) $(call toprel, $@) $(V1) $(OBJCOPY) -I binary -O elf32-littlearm --binary-architecture arm \ @@ -90,12 +98,39 @@ gccversion : $(V1) $(NM) -n $< > $@ define SIZE_TEMPLATE +.PHONY: size +size: $(1)_size + .PHONY: $(1)_size $(1)_size: $(1) @echo $(MSG_SIZE) $$(call toprel, $$<) $(V1) $(SIZE) -A $$< endef +# OpenPilot firmware image template +# $(1) = path to bin file +# $(2) = boardtype in hex +# $(3) = board revision in hex +define OPFW_TEMPLATE +FORCE: + +$(1).firmwareinfo.c: $(1) $(TOP)/make/templates/firmwareinfotemplate.c FORCE + @echo $(MSG_FWINFO) $$(call toprel, $$@) + $(V1) python $(TOP)/make/scripts/version-info.py \ + --path=$(TOP) \ + --template=$(TOP)/make/templates/firmwareinfotemplate.c \ + --outfile=$$@ \ + --image=$(1) \ + --type=$(2) \ + --revision=$(3) + +$(eval $(call COMPILE_C_TEMPLATE, $(1).firmwareinfo.c)) + +$(OUTDIR)/$(notdir $(basename $(1))).opfw : $(1) $(1).firmwareinfo.bin + @echo $(MSG_OPFIRMWARE) $$(call toprel, $$@) + $(V1) cat $(1) $(1).firmwareinfo.bin > $$@ +endef + # Assemble: create object files from assembler source files. define ASSEMBLE_TEMPLATE $(OUTDIR)/$(notdir $(basename $(1))).o : $(1) @@ -163,21 +198,48 @@ $($(1):.c=.s) : %.s : %.c $(V1) $(CC) -S $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@ endef +# $(1) = Name of binary image to write +# $(2) = Base of flash region to write/wipe +# $(3) = Size of flash region to write/wipe +define JTAG_TEMPLATE # --------------------------------------------------------------------------- # Options for OpenOCD flash-programming # see openocd.pdf/openocd.texi for further information # if OpenOCD is in the $PATH just set OPENOCDEXE=openocd -OOCD_EXE=openocd +OOCD_EXE ?= openocd + # debug level -OOCD_CL=-d0 +OOCD_JTAG_SETUP = -d0 # interface and board/target settings (using the OOCD target-library here) -OOCD_CL+=-s $(TOP)/flight/Project/OpenOCD -OOCD_CL+=-f foss-jtag.revb.cfg -f stm32.cfg +OOCD_JTAG_SETUP += -s $(TOP)/flight/Project/OpenOCD +OOCD_JTAG_SETUP += -f foss-jtag.revb.cfg -f stm32.cfg # initialize -OOCD_CL+=-c init +OOCD_BOARD_RESET = -c init # show the targets -OOCD_CL+=-c targets +#OOCD_BOARD_RESET += -c targets # commands to prepare flash-write -OOCD_CL+= -c "reset halt" +OOCD_BOARD_RESET += -c "reset halt" + +.PHONY: program +program: $(1) + @echo $(MSG_JTAG_PROGRAM) $$(call toprel, $$<) + $(V1) $(OOCD_EXE) \ + $$(OOCD_JTAG_SETUP) \ + $$(OOCD_BOARD_RESET) \ + -c "flash write_image erase $$< $(2) bin" \ + -c "verify_image $$< $(2) bin" \ + -c "reset run" \ + -c "shutdown" + +.PHONY: wipe +wipe: + @echo $(MSG_JTAG_WIPE) wiping $(3) bytes starting from $(2) + $(V1) $(OOCD_EXE) \ + $$(OOCD_JTAG_SETUP) \ + $$(OOCD_BOARD_RESET) \ + -c "flash erase_address pad $(2) $(3)" \ + -c "reset run" \ + -c "shutdown" +endef \ No newline at end of file diff --git a/make/scripts/version-info.py b/make/scripts/version-info.py index 5022cbd73..8c4fe901e 100644 --- a/make/scripts/version-info.py +++ b/make/scripts/version-info.py @@ -69,7 +69,7 @@ class Repo: def _get_tag(self): """Get and store git tag for the HEAD commit""" self._tag = None - self._exec('describe --exact-match HEAD') + self._exec('describe --tags --exact-match HEAD') if self._rc == 0: self._tag = self._out.strip(' \t\n\r') @@ -235,6 +235,21 @@ def sha1(file): hex_stream = lambda s:",".join(['0x'+hex(ord(c))[2:].zfill(2) for c in s]) return hex_stream(sha1.digest()) +def xtrim(string, suffix, length): + """Return string+suffix concatenated and trimmed up to length characters + + This function appends suffix to the end of string and returns the result + up to length characters. If it does not fit then the string will be + truncated and the '+' will be put between it and the suffix. + """ + + if len(string) + len(suffix) <= length: + return ''.join([string, suffix]) + else: + n = length-1-len(suffix) + assert n > 0, "length of truncated string+suffix exceeds maximum length" + return ''.join([string[:n], '+', suffix]) + def main(): """This utility uses git repository in the current working directory or from the given path to extract some info about it and HEAD commit. @@ -306,6 +321,7 @@ dependent targets. TAG_OR_BRANCH = r.tag(r.branch('unreleased')), TAG_OR_HASH8 = r.tag(r.hash(8, 'untagged')), DIRTY = r.dirty(), + FWTAG = xtrim(r.tag(r.branch('unreleased')), r.dirty(), 25), UNIXTIME = r.time(), DATE = r.time('%Y%m%d'), DATETIME = r.time('%Y%m%d %H:%M'), diff --git a/make/templates/firmwareinfotemplate.c b/make/templates/firmwareinfotemplate.c index 3f3829cc6..b9297273e 100644 --- a/make/templates/firmwareinfotemplate.c +++ b/make/templates/firmwareinfotemplate.c @@ -62,7 +62,7 @@ const struct fw_version_info fw_version_blob __attribute__((used)) __attribute__ .timestamp = ${UNIXTIME}, .board_type = ${BOARD_TYPE}, .board_revision = ${BOARD_REVISION}, - .commit_tag_name = "${TAG_OR_BRANCH}${DIRTY}", + .commit_tag_name = "${FWTAG}", .sha1sum = { ${SHA1} }, }; diff --git a/release/Makefile b/release/Makefile index 8f5af3008..645a67758 100644 --- a/release/Makefile +++ b/release/Makefile @@ -18,7 +18,8 @@ RELEASE_LBL := $(shell $(VERSION_CMD) --format=\$${DATE}-\$${TAG_OR_HASH8}\$${D RELEASE_DIR := $(BUILD_DIR)/release-$(RELEASE_LBL) FW_DIR := $(RELEASE_DIR)/firmware-$(RELEASE_LBL) BL_DIR := $(FW_DIR)/bootloaders -BLUPD_DIR := $(FW_DIR)/bootloader_updaters +BU_DIR := $(FW_DIR)/bootloader-updaters +FE_DIR := $(FW_DIR)/flash-erase-tools # Clean build options (recommended for package testing only) ifeq ($(CLEAN_BUILD), NO) @@ -32,13 +33,16 @@ CLEAN_GROUND := YES CLEAN_FLIGHT := YES endif -# Setup targets -FW_TARGETS_COMMON := ahrs pipxtreme -FW_TARGETS_INPUT := coptercontrol openpilot -FW_TARGETS_TOOLS := coptercontrol -FW_TARGETS := $(FW_TARGETS_COMMON) $(FW_TARGETS_INPUT) -BL_TARGETS := $(addprefix bl_, $(FW_TARGETS)) -BLUPD_TARGETS := $(addprefix blupd_, $(FW_TARGETS)) +# Set up targets +FW_STEMS_COMMON := ahrs pipxtreme +FW_STEMS_INPUT := coptercontrol openpilot +FW_STEMS_TOOLS := coptercontrol +FW_STEMS_ALL := $(FW_STEMS_COMMON) $(FW_STEMS_INPUT) +FW_TARGETS_COMMON := $(addprefix fw_, $(FW_STEMS_COMMON)) +FW_TARGETS_INPUT := $(addprefix fw_, $(FW_STEMS_INPUT)) +FW_TARGETS_TOOLS := $(addprefix fw_, $(FW_STEMS_TOOLS)) +BL_TARGETS := $(addprefix bl_, $(FW_STEMS_ALL)) +BU_TARGETS := $(addprefix bu_, $(FW_STEMS_ALL)) help: @echo @@ -102,17 +106,14 @@ $(eval $(call INSTALL_TEMPLATE,fw_pwm,uavobjects,$(FW_DIR),,-pwm-$(RELEASE_LBL), $(eval $(call INSTALL_TEMPLATE,fw_spektrum,uavobjects,$(FW_DIR),,-spektrum-$(RELEASE_LBL),USE_SPEKTRUM=YES,clean,$(FW_TARGETS_INPUT),install)) $(eval $(call INSTALL_TEMPLATE,fw_ppm,uavobjects,$(FW_DIR),,-ppm-$(RELEASE_LBL),USE_PPM=YES,clean,$(FW_TARGETS_INPUT),install)) -# Bootloaders (change 'bin' to 'install' to install bootloaders too) -$(eval $(call INSTALL_TEMPLATE,all_bl,uavobjects,$(BL_DIR),,-$(RELEASE_LBL),,,$(BL_TARGETS),bin)) +# Bootloaders (change 'install' to 'bin' if you don't want to install bootloaders) +$(eval $(call INSTALL_TEMPLATE,all_bl,uavobjects,$(BL_DIR),,-$(RELEASE_LBL),,,$(BL_TARGETS),install)) -# Bootloader Updaters -$(eval $(call INSTALL_TEMPLATE,blupd_coptercontrol,all_bl,$(BLUPD_DIR),CopterControl_,-$(RELEASE_LBL),,,blupd_coptercontrol,install)) -$(eval $(call INSTALL_TEMPLATE,blupd_ahrs,all_bl,$(BLUPD_DIR),AHRS_,-$(RELEASE_LBL),,,blupd_ahrs,install)) -$(eval $(call INSTALL_TEMPLATE,blupd_openpilot,all_bl,$(BLUPD_DIR),OpenPilot_,-$(RELEASE_LBL),,,blupd_openpilot,install)) -$(eval $(call INSTALL_TEMPLATE,blupd_pipxtreme,all_bl,$(BLUPD_DIR),PipXtreme_,-$(RELEASE_LBL),,,blupd_pipxtreme,install)) +# Bootloader updaters +$(eval $(call INSTALL_TEMPLATE,all_bu,all_bl,$(BU_DIR),,-$(RELEASE_LBL),,,$(BU_TARGETS),install)) # CopterControl flash eraser tool -$(eval $(call INSTALL_TEMPLATE,fw_tools,uavobjects,$(BLUPD_DIR),,-FlashEraser-$(RELEASE_LBL),ERASE_FLASH=YES,clean,$(FW_TARGETS_TOOLS),install)) +$(eval $(call INSTALL_TEMPLATE,fw_tools,uavobjects,$(FE_DIR),,-flash-erase-$(RELEASE_LBL),ERASE_FLASH=YES,clean,$(FW_TARGETS_TOOLS),install)) # Order-only dependencies # They are bit complicated to support parallel (-j) builds and to create @@ -128,15 +129,15 @@ fw_tools: | fw_spektrum # ordered build, replace fw_spektrum by fw_ppm if uncomm release_fw: | fw_common fw_pwm fw_spektrum # fw_ppm -release_blupd: | $(BLUPD_TARGETS) +release_bu: | all_bu -release_flight: | release_fw release_blupd fw_tools +release_flight: | release_fw release_bu fw_tools release_ground: | ground_package release: | release_flight release_ground -.PHONY: help uavobjects all_clean release release_flight release_fw release_blupd release_ground +.PHONY: help uavobjects all_clean release release_flight release_fw release_bu release_ground # Decide on a verbosity level based on the V= parameter export AT := @