From a3c2a2b86c28f85211731e7ffaf2ccb0ed2850e6 Mon Sep 17 00:00:00 2001 From: Klaus Goger Date: Thu, 30 Jul 2015 21:39:18 +0200 Subject: Add Cortex M0 Firmware and linux helper tool * Firmware with fan controller, RTC and watchdog functionality * Linux shell script to reset and flash the MCU Signed-off-by: Klaus Goger --- cortex-m0/README.rst | 27 +++++++++++++++ cortex-m0/cortex-m0.bin | Bin 0 -> 20692 bytes cortex-m0/cortex-m0.sh | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 cortex-m0/README.rst create mode 100755 cortex-m0/cortex-m0.bin create mode 100755 cortex-m0/cortex-m0.sh diff --git a/cortex-m0/README.rst b/cortex-m0/README.rst new file mode 100644 index 0000000..570af2a --- /dev/null +++ b/cortex-m0/README.rst @@ -0,0 +1,27 @@ +============================================================== +Tools and Firmware for the Cortex M0 Companion Microcontroller +============================================================== + +- ``cortex-m0.bin`` - firmware for the companion mcu +- ``cortex-m0.sh`` - tool to reset and flash the companion mcu + +cortex-m0.sh +------------ + +Usage: +###### + +--reset resets the companion mcu +--dfu enables the dfu mode +--disable enables the mcu reset line to keep it in reset +--flash firmware flash the mcu with given firmware + +cortex-m0.bin +------------- + +Features: +######### + +- emulates an TI AMC6821 fan controller on I2C address 0x18 +- emulates an Interil ISL1208 RTC on I2C address 0x6f +- external watchdog form the Qseven watchdog pins diff --git a/cortex-m0/cortex-m0.bin b/cortex-m0/cortex-m0.bin new file mode 100755 index 0000000..e11f84b Binary files /dev/null and b/cortex-m0/cortex-m0.bin differ diff --git a/cortex-m0/cortex-m0.sh b/cortex-m0/cortex-m0.sh new file mode 100755 index 0000000..d85d96f --- /dev/null +++ b/cortex-m0/cortex-m0.sh @@ -0,0 +1,88 @@ +#!/bin/sh + +RESET_PIN=90 +BOOT0_PIN=67 + +SYSFSPATH=/sys/class/gpio + +die() { + echo "$*" 1>&2 + exit 1 +} + +usage() { + echo "Usage: $0 [--reset|--dfu|--disable|--flash ]" + echo " --reset - resets the Cortex M0" + echo " --dfu - enables DFU loader" + echo " --disable - keep Cortex M0 in reset" + echo " --flash - flash the given firmware" + + exit 1 +} + +gpiosetup() { + for PIN in $RESET_PIN $BOOT0_PIN + do + if [ ! -d ${SYSFSPATH}/gpio${PIN} ] ; then + echo $PIN > ${SYSFSPATH}/export + echo out > ${SYSFSPATH}/gpio${PIN}/direction + fi + done +} + +reset_stm32() { + echo 0 > ${SYSFSPATH}/gpio${RESET_PIN}/value + echo 0 > ${SYSFSPATH}/gpio${BOOT0_PIN}/value + sleep 0.1 + echo 1 > ${SYSFSPATH}/gpio${RESET_PIN}/value +} + +enable_dfu() { + gpiosetup + echo 0 > ${SYSFSPATH}/gpio${RESET_PIN}/value + echo 1 > ${SYSFSPATH}/gpio${BOOT0_PIN}/value + sleep 0.1 + echo 1 > ${SYSFSPATH}/gpio${RESET_PIN}/value +} + +case "$1" in +--reset) echo "reseting Cortex M0" + gpiosetup + reset_stm32 + ;; +--dfu) echo "enabling DFU loader" + gpiosetup + enable_dfu + ;; +--disable) echo "disabling Cortex M0" + gpiosetup + echo 0 > ${SYSFSPATH}/gpio${RESET_PIN}/value + ;; +--flash) + [ $# -eq 2 ] || usage + command -v dfu-util >/dev/null 2>&1 || die "dfu-util needed but not found" + [ -f "$2" ] || die "flash file does not exist" + echo "flashing Cortex M0" + gpiosetup + enable_dfu + echo waiting for DFU loader + if [ command -v lsusb >/dev/null 2>&1 ]; then + while ! lsusb -d 0483:df11 > /dev/null + do + sleep .1 + echo -n . + done + echo -e "\nfound" + else + sleep 5 + fi + dfu-util -d 0483:df11 -a 0 -s 0x08000000 -D $2 + reset_stm32 + ;; +--*) usage + ;; +*) usage + ;; +esac + +exit 0 -- cgit v1.2.3