STM32GENERIC/tools/linux/upload_router

113 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Translates the windows Arduino IDE upload call - something like..
#
# upload_router ttyUSB0 1 1EAF:0003 /tmp/build9114565021046468906.tmp/STM32_Blink.cpp maple_dfu 0
#
# to the linux dfu-util equivalent of the form...
#
# dfu-util -D ./STM32_Blink.cpp.bin -d 1eaf:0003 --intf 0 --alt 1
#
#
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
}
DEVICE="$3"
# Lowercase the 1eaf device name, since in Windows land everybody shouts.
DEVICE=${DEVICE,,}
BINFILE="$4.bin"
INTERFACE="$6"
ALT_INTERFACE="$2"
# You will need the usb-reset code, see https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Using-a-generic-stm32-board-on-linux-with-Maple-bootloader
#
USBRESET=$(which usb-reset) || USBRESET="./usb-reset"
# Check to see if a maple compatible board is attached
LEAF_STATUS=$(leaf_status)
# Borard not found, or no boot loader on board.
if [[ $(leaf_status) = "unknown" ]]
then
echo "STM32 Maple Bootloader compatible board not found."
sleep 5
exit 1
fi
# We got this far, so we need to get the board in bootloader mode.
# After the timeout period, the board goes back in to serial mode, we need it in dfu mode, which happens for the first few seconds at power on
# so we ask the user to unplug and re-plug the board.
echo -e "\n\rSTM32 Maple board is in $LEAF_STATUS mode."
echo "Please unplug and replug the USB cable to the Maple device."
sleep 2
# On unplugging the board will be "unknown"
while [[ $(leaf_status) != "unknown" ]]
do
echo -n "."
sleep 1
done
# On re-plugging the board will be "dfu"
while [[ $(leaf_status) != "dfu" ]]
do
echo -n "."
sleep 1
done
echo -e "\n\rProgramming STM32 device with dfu-util"
until dfu-util -D "$BINFILE" -d "$DEVICE" --intf "$INTERFACE" --alt "$ALT_INTERFACE" 2>&1
do
echo -n "."
sleep 1
done
echo -e "\n\rUnplug and replug the USB cable to the STM32 board again please...."
while [[ $(leaf_status) != "unknown" ]]
do
echo -n "."
sleep 1
done
echo -e "\n\rReconnecting"
while [[ $(leaf_status) = "unknown" ]]
do
echo -n "."
sleep 1
done
echo -e "\n\rWaiting for bootloader to exit."
for i in {1..6}
do
echo -n "."
sleep 1
done
"$USBRESET" "/dev/bus/usb/$(lsusb |grep "1eaf" |awk '{print $2,$4}'|sed 's/\://g'|sed 's/ /\//g')" >/dev/null 2>&1
while [[ $(leaf_status) = "unknown" ]]
do
echo -n "."
sleep 1
done
THIS_TTY=$(find /dev/ttyACM* -cmin -2)
echo -e "\n\rSTM32 Maple board serial port re-created..."
echo -e "\n\rSerial port is $THIS_TTY Please allow 15 seconds before attempting to read from serial port."