diff --git a/BootLoaders/Archives/package_multi_4in1_stm32_board_v1.0.8.tar.gz b/BootLoaders/Archives/package_multi_4in1_stm32_board_v1.0.8.tar.gz new file mode 100644 index 0000000..70477bf Binary files /dev/null and b/BootLoaders/Archives/package_multi_4in1_stm32_board_v1.0.8.tar.gz differ diff --git a/BootLoaders/Boards/stm32/boards.txt b/BootLoaders/Boards/stm32/boards.txt index ceeea1f..4faae15 100644 --- a/BootLoaders/Boards/stm32/boards.txt +++ b/BootLoaders/Boards/stm32/boards.txt @@ -16,7 +16,7 @@ multistm32f103c.pid.0=0x0004 multistm32f103c.build.variant=generic_stm32f103c multistm32f103c.build.vect=VECT_TAB_ADDR=0x8000000 multistm32f103c.build.core=maple -multistm32f103c.build.board=MULTI_STM32_FLASH_FROM_TX=104 +multistm32f103c.build.board=MULTI_STM32_FLASH_FROM_TX=108 multistm32f103c.upload.use_1200bps_touch=false multistm32f103c.upload.file_type=bin multistm32f103c.upload.auto_reset=true @@ -37,15 +37,23 @@ multistm32f103c.bootloader.tool=serial_upload #---------------------------- UPLOAD METHODS --------------------------- multistm32f103c.menu.upload_method.TxFlashMethod=Flash from Tx -multistm32f103c.menu.upload_method.TxFlashMethod.build.board=MULTI_STM32_FLASH_FROM_TX=107 +multistm32f103c.menu.upload_method.TxFlashMethod.build.board=MULTI_STM32_FLASH_FROM_TX=108 multistm32f103c.menu.upload_method.TxFlashMethod.upload.tool=tx_upload multistm32f103c.menu.upload_method.TxFlashMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER multistm32f103c.menu.upload_method.TxFlashMethod.build.vect=VECT_TAB_ADDR=0x8002000 multistm32f103c.menu.upload_method.TxFlashMethod.build.ldscript=ld/bootloader_20.ld multistm32f103c.menu.upload_method.TxFlashMethod.bootloader.file=Multi4in1/StmMulti4in1.bin +multistm32f103c.menu.upload_method.AutoFlashMethod=Auto Detect (USB or Serial) +multistm32f103c.menu.upload_method.AutoFlashMethod.build.board=MULTI_STM32_WITH_BOOT=108 +multistm32f103c.menu.upload_method.AutoFlashMethod.upload.tool=auto_upload +multistm32f103c.menu.upload_method.AutoFlashMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER +multistm32f103c.menu.upload_method.AutoFlashMethod.build.vect=VECT_TAB_ADDR=0x8002000 +multistm32f103c.menu.upload_method.AutoFlashMethod.build.ldscript=ld/bootloader_20.ld +multistm32f103c.menu.upload_method.AutoFlashMethod.bootloader.file=Multi4in1/StmMulti4in1.bin + multistm32f103c.menu.upload_method.DFUUploadMethod=Upload via USB -multistm32f103c.menu.upload_method.DFUUploadMethod.build.board=MULTI_STM32_NO_BOOT=107 +multistm32f103c.menu.upload_method.DFUUploadMethod.build.board=MULTI_STM32_NO_BOOT=108 multistm32f103c.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu multistm32f103c.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload multistm32f103c.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER @@ -56,7 +64,7 @@ multistm32f103c.menu.upload_method.DFUUploadMethod.upload.altID=2 multistm32f103c.menu.upload_method.DFUUploadMethod.bootloader.file=Multi4in1/StmMulti4in1.bin multistm32f103c.menu.upload_method.serialIncBootloaderMethod=Upload via Serial inc. Bootloader (FTDI) -multistm32f103c.menu.upload_method.serialIncBootloaderMethod.build.board=MULTI_STM32_WITH_BOOT=107 +multistm32f103c.menu.upload_method.serialIncBootloaderMethod.build.board=MULTI_STM32_WITH_BOOT=108 multistm32f103c.menu.upload_method.serialIncBootloaderMethod.upload.protocol=maple_serial multistm32f103c.menu.upload_method.serialIncBootloaderMethod.upload.tool=serial_upload_inc_bootloader multistm32f103c.menu.upload_method.serialIncBootloaderMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER @@ -68,7 +76,7 @@ multistm32f103c.menu.upload_method.serialMethod=Upload via Serial (FTDI) multistm32f103c.menu.upload_method.serialMethod.upload.protocol=maple_serial multistm32f103c.menu.upload_method.serialMethod.upload.tool=serial_upload multistm32f103c.menu.upload_method.serialMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -multistm32f103c.menu.upload_method.serialMethod.build.board=MULTI_STM32_NO_BOOT=107 +multistm32f103c.menu.upload_method.serialMethod.build.board=MULTI_STM32_NO_BOOT=108 multistm32f103c.menu.upload_method.serialMethod.bootloader.file=Multi4in1/StmMulti4in1.bin ############################################################## diff --git a/BootLoaders/Boards/stm32/platform.txt b/BootLoaders/Boards/stm32/platform.txt index f3dde44..497af9a 100644 --- a/BootLoaders/Boards/stm32/platform.txt +++ b/BootLoaders/Boards/stm32/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Multi 4-in-1 STM32 -version=1.0.7 +version=1.0.8 compiler.warning_flags=-w -DDEBUG_LEVEL=DEBUG_NONE compiler.warning_flags.none=-w -DDEBUG_LEVEL=DEBUG_NONE @@ -117,6 +117,17 @@ recipe.hooks.savehex.postsavehex.01.pattern.macosx="{runtime.platform.path}/tool # Uploader tools # ------------------- +# Automatically detect upload method (USB or serial) +tools.auto_upload.cmd=auto_upload +tools.auto_upload.cmd.windows=auto_upload.bat +tools.auto_upload.path={runtime.platform.path}/tools/win +tools.auto_upload.path.macosx={runtime.platform.path}/tools/macosx +tools.auto_upload.path.linux={runtime.platform.path}/tools/linux +tools.auto_upload.path.linux64={runtime.platform.path}/tools/linux64 +tools.auto_upload.upload.params.verbose=-d +tools.auto_upload.upload.params.quiet= +tools.auto_upload.upload.pattern="{path}/{cmd}" {serial.port.file} "{build.path}/{build.project_name}.bin" "{runtime.platform.path}/bootloaders/{bootloader.file}" + # Upload using Maple bootloader over DFU tools.maple_upload.cmd=maple_upload tools.maple_upload.cmd.windows=maple_upload.bat diff --git a/BootLoaders/Boards/stm32/tools/linux/auto_upload b/BootLoaders/Boards/stm32/tools/linux/auto_upload new file mode 100755 index 0000000..6988baf --- /dev/null +++ b/BootLoaders/Boards/stm32/tools/linux/auto_upload @@ -0,0 +1,45 @@ +#!/bin/bash +#set -e + +function leaf_status() +{ + this_leaf_status=$(lsusb |grep "1eaf" | awk '{ print $NF}') + # Find the mode of the leaf bootloader + case $this_leaf_status in + "1eaf:0003") + echo "dfu" + ;; + "1eaf:0004") + echo "ttyACMx" + ;; + *) + #echo "$this_leaf_status" + echo "unknown" + ;; + esac +} + +# Get the directory where the script is running. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Check to see if a maple compatible board is attached +LEAF_STATUS=$(leaf_status) + +# Board not found, or no boot loader on board. +if [[ $(leaf_status) = "unknown" ]] +then + # No maple board detected + echo "Maple device not found. Attempting serial upload." + SERIAL_UPLOAD=${DIR}/serial_upload_inc_bootloader + echo "${SERIAL_UPLOAD}" $1 0x8000000 $2 $3 + "${SERIAL_UPLOAD}" $1 0x8000000 $2 $3 + +else + # Maple board detected + echo "Maple device found. Attempting USB upload." + + MAPLE_UPLOAD=${DIR}/maple_upload + echo "${MAPLE_UPLOAD}" $1 2 1eaf:0003 $2 + "${MAPLE_UPLOAD}" $1 2 1eaf:0003 $2 +fi + diff --git a/BootLoaders/Boards/stm32/tools/linux/maple_upload b/BootLoaders/Boards/stm32/tools/linux/maple_upload index 8afaa65..0e3bc0e 100755 --- a/BootLoaders/Boards/stm32/tools/linux/maple_upload +++ b/BootLoaders/Boards/stm32/tools/linux/maple_upload @@ -37,6 +37,8 @@ fi "${RESET_UTIL}" ${dummy_port_fullpath} 750 +# Give the board a chance to reset to DFU mode +sleep 0.5 #DFU_UTIL=$(dirname $0)/dfu-util/dfu-util DFU_UTIL=/usr/bin/dfu-util diff --git a/BootLoaders/Boards/stm32/tools/linux64/45-maple.rules b/BootLoaders/Boards/stm32/tools/linux64/45-maple.rules index d1bda5f..e53d969 100644 --- a/BootLoaders/Boards/stm32/tools/linux64/45-maple.rules +++ b/BootLoaders/Boards/stm32/tools/linux64/45-maple.rules @@ -1,5 +1,5 @@ ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" -ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" -ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" +ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1" +ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1" diff --git a/BootLoaders/Boards/stm32/tools/macosx/auto_upload b/BootLoaders/Boards/stm32/tools/macosx/auto_upload new file mode 100755 index 0000000..f96dfda --- /dev/null +++ b/BootLoaders/Boards/stm32/tools/macosx/auto_upload @@ -0,0 +1,67 @@ +#!/bin/bash +shopt -s extglob + +function list_usb() +{ +while IFS=: read key value; do + key="${key##+( )}" + value="${value##+( )}" + case "$key" in + "Product ID") + p="${value% *}" + ;; + "Vendor ID") + v="${value%% *}" + ;; + "Manufacturer") + m="${value}" + ;; + "Location ID") + l="${value}" + printf "%s:%s %s (%s)\n" "$v" "$p" "$l" "$m" + ;; + esac +done < <( system_profiler SPUSBDataType ) +} + +function leaf_status() +{ + this_leaf_status=$(echo "$(list_usb)" | grep "1eaf" | awk '{ print $1}') + # Find the mode of the leaf bootloader + case $this_leaf_status in + "0x1eaf:0x0003") + echo "dfu" + ;; + "0x1eaf:0x0004") + echo "ttyACMx" + ;; + *) + # echo "$this_leaf_status" + echo "unknown" + ;; + esac +} + +# Get the directory where the script is running. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Check to see if a maple compatible board is attached +LEAF_STATUS=$(leaf_status) + +# Board not found, or no boot loader on board. +if [[ $(leaf_status) = "unknown" ]] +then + # No maple board detected + echo "Maple device not found. Attempting serial upload." + SERIAL_UPLOAD=${DIR}/serial_upload_inc_bootloader + echo "${SERIAL_UPLOAD}" $1 0x8000000 $2 $3 + "${SERIAL_UPLOAD}" $1 0x8000000 $2 $3 + +else + # Maple board detected + echo "Maple device found. Attempting USB upload." + + MAPLE_UPLOAD=${DIR}/maple_upload + echo "${MAPLE_UPLOAD}" $1 2 1eaf:0003 $2 + "${MAPLE_UPLOAD}" $1 2 1eaf:0003 $2 +fi diff --git a/BootLoaders/Boards/stm32/tools/macosx/maple_upload b/BootLoaders/Boards/stm32/tools/macosx/maple_upload index 3521aa1..6fa559f 100755 --- a/BootLoaders/Boards/stm32/tools/macosx/maple_upload +++ b/BootLoaders/Boards/stm32/tools/macosx/maple_upload @@ -33,6 +33,9 @@ DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) ${DIR}/upload-reset ${dummy_port_fullpath} 750 +# Give the board a chance to reset to DFU mode +sleep 0.5 + if [ $# -eq 5 ]; then dfuse_addr="--dfuse-address $5" else diff --git a/BootLoaders/Boards/stm32/tools/win/auto_upload.bat b/BootLoaders/Boards/stm32/tools/win/auto_upload.bat new file mode 100644 index 0000000..f147ec8 --- /dev/null +++ b/BootLoaders/Boards/stm32/tools/win/auto_upload.bat @@ -0,0 +1,69 @@ +@echo off +REM Script to automatically select upload method for stm32-based multi-protocol module. + +set driverLetter=%~dp0 +set driverLetter=%driverLetter:~0,2% +%driverLetter% +cd %~dp0 + +set comport=%1 + +set fwpath=%2 +set fwpath=%fwpath:/=\% + +set blpath=%3 +set blpath=%blpath:/=\% + +:MAPLE_CHECK +REM Look for a Maple USB device +ECHO. +ECHO Looking for Maple device ... +maple_find.exe +ECHO. + +if %errorlevel% equ 0 ( + GOTO USB_FLASH +) else ( + GOTO FTDI_CHECK +) + +:USB_FLASH +ECHO Attempting to flash module via Maple USB ... +ECHO java -jar maple_loader.jar %comport% 2 "1EAF:0003" "%fwpath%" +java -jar maple_loader.jar %comport% 2 "1EAF:0003" "%fwpath%" +ECHO. +ECHO Done. +ECHO. +GOTO :EOF + +:FTDI_CHECK +REM Attempt to read from the STM module via the specified serial port +ECHO Probing serial port %comport% for STM32 in BOOT0 mode ... +stm32flash.exe -b 115200 %comport% + +if %errorlevel% equ 0 ( + ECHO Found module on %comport% + GOTO FTDI_FLASH +) ELSE ( + ECHO Module in BOOT0 mode not found on %comport% + GOTO :EOF +) + +:FTDI_FLASH +ECHO. +ECHO Flashing module via FTDI adapter on %comport% +ECHO. +ECHO Erasing ... +ECHO stm32flash.exe -o -b 115200 %comport% +stm32flash.exe -o -b 115200 %comport% + +ECHO Writing bootloader ... +ECHO stm32flash.exe -v -g 0x8000000 -b 115200 -w %blpath% %comport% +stm32flash.exe -v -g 0x8000000 -b 115200 -w %blpath% %comport% + +ECHO Writing Multi firmware ... +ECHO stm32flash.exe -v -s 8 -e 0 -g 0x8002000 -b 115200 -w %fwpath% %comport% +stm32flash.exe -v -s 8 -e 0 -g 0x8002000 -b 115200 -w %fwpath% %comport% +ECHO. +ECHO Done. +GOTO :EOF diff --git a/BootLoaders/Boards/stm32/tools/win/maple_find.exe b/BootLoaders/Boards/stm32/tools/win/maple_find.exe new file mode 100644 index 0000000..29f4950 Binary files /dev/null and b/BootLoaders/Boards/stm32/tools/win/maple_find.exe differ diff --git a/BootLoaders/package_multi_4in1_board_index.json b/BootLoaders/package_multi_4in1_board_index.json index 361698a..2a7280a 100644 --- a/BootLoaders/package_multi_4in1_board_index.json +++ b/BootLoaders/package_multi_4in1_board_index.json @@ -245,6 +245,27 @@ "version": "4.8.3-2014q1" }] }, + { + "name": "Multi 4-in-1 STM32 Board", + "architecture": "STM32F1", + "version": "1.0.8", + "category": "Contributed", + "help": { + "online": "https://github.com/pascallanger/DIY-Multiprotocol-TX-Module" + }, + "url": "https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/raw/master/BootLoaders/Archives/package_multi_4in1_stm32_board_v1.0.8.tar.gz", + "archiveFileName": "package_multi_4in1_stm32_board_v1.0.8.tar.gz", + "checksum": "SHA-256:f8100272ec615074cf7962c2c8331014ebda78f3e4c17172b88b6dd3d83c4331", + "size": "10319134", + "boards": [{ + "name": "Multi 4-in-1 (STM32F103C)" + }], + "toolsDependencies": [{ + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }] + }, { "name": "Multi 4-in-1 OrangeRX Board - DEPRECATED, USE MULTI 4-IN-1 AVR BOARDS PACKAGE INSTEAD", "architecture": "orangerx",