1
1
#! /bin/bash
2
2
set -o nounset # Treat unset variables as an error
3
3
# set -x
4
+
5
+ # STM32 Cube programmer variables
4
6
STM32CP_CLI=STM32_Programmer.sh
5
7
ADDRESS=0x8000000
6
8
ERASE=
7
9
MODE=
8
10
PORT=
9
11
OPTS=
10
12
13
+ # Script variables
14
+ SERPORT=
15
+ STATUS=
16
+
11
17
# ##############################################################################
12
18
# # Help function
13
19
usage ()
@@ -24,10 +30,12 @@ usage()
24
30
echo " ## Ex: 10 erase all sectors using SWD interface."
25
31
echo " ## file_path: file path name to be downloaded: (bin, hex)"
26
32
echo " ## Options:"
27
- echo " ## For SWD and DFU: no mandatory options"
28
- echo " ## For Serial: <com_port>"
33
+ echo " ## For SWD: no mandatory options"
34
+ echo " ## For DFU: no mandatory options"
35
+ echo " ## For Serial: 'serport=<com_port>'"
29
36
echo " ## com_port: serial identifier (mandatory). Ex: /dev/ttyS0"
30
37
echo " ##"
38
+ echo " ## '-serport=<com_port>' is also used to wait the serial port availability"
31
39
echo " ## Note: all trailing arguments will be passed to the $STM32CP_CLI "
32
40
echo " ## They have to be valid commands for STM32 MCU"
33
41
echo " ## Ex: -g: Run the code at the specified address"
@@ -37,7 +45,6 @@ usage()
37
45
exit $1
38
46
}
39
47
40
-
41
48
check_tool () {
42
49
command -v $STM32CP_CLI > /dev/null 2>&1
43
50
if [ $? != 0 ]; then
@@ -53,6 +60,18 @@ check_tool() {
53
60
fi
54
61
}
55
62
63
+ upload () {
64
+ count=0
65
+ STATUS=1
66
+ while [ $STATUS -ne 0 ] && (( count++ < 5 )) ; do
67
+ # echo "Try upload $count "
68
+ ${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE} -q -d ${FILEPATH} ${ADDRESS} ${OPTS}
69
+ STATUS=$?
70
+ sleep 0.5
71
+ done
72
+ }
73
+
74
+ # Main
56
75
check_tool
57
76
58
77
if [ $# -lt 2 ]; then
@@ -69,35 +88,63 @@ if [ $1 -ge 10 ]; then
69
88
ERASE=' -e all'
70
89
PROTOCOL=$(( $1 - 10 ))
71
90
fi
91
+
92
+ # Check if serial port option available
93
+ if [ $# -gt 2 ] && [[ $3 == " -serport=" * ]]; then
94
+ SERPORT=` echo $3 | cut -d' =' -f2`
95
+ if [ ! -z $SERPORT ] && [[ $SERPORT != " /dev/" * ]]; then
96
+ SERPORT=" /dev/" ${SERPORT}
97
+ fi
98
+ fi
99
+
72
100
# Protocol $1
73
101
# 0: SWD
74
102
# 1: Serial
75
103
# 2: DFU
76
104
case $PROTOCOL in
77
105
0)
78
106
PORT=' SWD'
79
- MODE=' mode=UR'
80
- shift 2;;
107
+ MODE=' mode=UR' ;;
81
108
1)
82
- if [ $# -lt 3 ]; then
109
+ if [ -z $SERPORT ]; then
110
+ echo " Missing Serial port!"
83
111
usage 3
84
- else
85
- PORT=$3
86
- shift 3
87
- fi ;;
112
+ fi
113
+ PORT=$SERPORT ;;
88
114
2)
89
- PORT=' USB1'
90
- shift 2;;
115
+ PORT=' USB1' ;;
91
116
* )
92
117
echo " Protocol unknown!"
93
118
usage 4;;
94
119
esac
95
120
121
+ if [ -z $SERPORT ]; then
122
+ shift 2
123
+ else
124
+ shift 3
125
+ fi
126
+
96
127
if [ $# -gt 0 ]; then
97
128
OPTS=" $@ "
98
129
fi
99
130
100
- ${STM32CP_CLI} -c port=${PORT} ${MODE} ${ERASE} -q -d ${FILEPATH} ${ADDRESS} ${OPTS}
131
+ upload
132
+
133
+ if [ ! -z $SERPORT ] && [ $STATUS -eq 0 ]; then
134
+ echo -n " Waiting for $SERPORT serial..."
135
+ count=0
136
+ while [ ! -c $SERPORT ] && (( count++ < 40 )) ; do
137
+ sleep 0.1
138
+ done
139
+ count=0
140
+ res=1
141
+ while [ $res -ne 0 ] && (( count++ < 20 )) ; do
142
+ stty -F $SERPORT > /dev/null 2>&1
143
+ res=$?
144
+ sleep 1
145
+ done
146
+ echo " done"
147
+ fi
101
148
102
- exit 0
149
+ exit $STATUS
103
150
0 commit comments