summaryrefslogtreecommitdiff
path: root/doc/board/st/stm32_MCU.rst
blob: 61650bc80117ea7f9c4a74192caa1c30fd1fe5cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
.. sectionauthor:: Patrice Chotard <patrice.chotardy@foss.st.com>

STM32 MCU boards
================

This is a quick instruction for setup STM32 MCU boards.

Supported devices
-----------------

U-Boot supports the following STMP32 MCU SoCs:

 - STM32F429
 - STM32F469
 - STM32F746
 - STM32F769
 - STM32H743
 - STM32H750

SoCs information:
-----------------
STM32F4 series are Cortex-M4 MCU.
STM32F7 and STM32H7 series are Cortex-M7 MCU.

 + STM32F4 series: https://www.st.com/en/microcontrollers-microprocessors/stm32f4-series.html
 + STM32F7 series: https://www.st.com/en/microcontrollers-microprocessors/stm32f7-series.html
 + STM32H7 series: https://www.st.com/en/microcontrollers-microprocessors/stm32h7-series.html

Currently the following boards are supported:

 + stm32f429-discovery
 + stm32f469-discovery
 + stm32746g-evaluation
 + stm32f746-discovery
 + stm32f769-discovery
 + stm32h743i-discovery
 + stm32h743i-evaluation
 + stm32h750i-art-pi

Boot Sequences
--------------

For STM32F7 series, 2 boot configurations are supported with and without SPL

+------------------------+-------------------------+--------------+
| **FSBL**               | **SSBL**                | **OS**       |
+------------------------+-------------------------+--------------+
| First Stage Bootloader | Second Stage Bootloader | Linux Kernel |
+------------------------+-------------------------+--------------+
| embedded Flash         | DDR                                    |
+------------------------+-------------------------+--------------+

The boot chain with SPL
```````````````````````

defconfig_file :
   + **stm32746g-eval_spl_defconfig**
   + **stm32f746-disco_spl_defconfig**
   + **stm32f769-disco_spl_defconfig**

+------------+------------+-------+
| FSBL       | SSBL       | OS    |
+------------+------------+-------+
|U-Boot SPL  | U-Boot     | Linux |
+------------+------------+-------+

The boot chain without SPL
``````````````````````````

defconfig_file :
   + **stm32f429-discovery_defconfig**
   + **stm32f429-evaluation_defconfig**
   + **stm32f469-discovery_defconfig**
   + **stm32746g-eval_defconfig**
   + **stm32f746-disco_defconfig**
   + **stm32f769-disco_defconfig**
   + **stm32h743-disco_defconfig**
   + **stm32h743-eval_defconfig**
   + **stm32h750-art-pi_defconfig**

+-----------+-------+
| FSBL      | OS    |
+-----------+-------+
|U-Boot     | Linux |
+-----------+-------+

Build Procedure
---------------

1. Install the required tools for U-Boot

   * install package needed in U-Boot makefile
     (libssl-dev, swig, libpython-dev...)

   * install ARMv7 toolchain for 32bit Cortex-A (from Linaro,
     from SDK for STM32MP15x, or any crosstoolchains from your distribution)
     (you can use any gcc cross compiler compatible with U-Boot)

2. Set the cross compiler::

   # export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-

3. Select the output directory (optional)::

   # export KBUILD_OUTPUT=/path/to/output

   for example: use one output directory for each configuration::

   # export KBUILD_OUTPUT=stm32f4
   # export KBUILD_OUTPUT=stm32f7
   # export KBUILD_OUTPUT=stm32h7

   you can build outside of code directory::

   # export KBUILD_OUTPUT=../build/stm32f4

4. Configure U-Boot::

   # make <defconfig_file>

   For example with <defconfig_file>:

   - For **stm32f429 discovery** board : **stm32f429-discovery_defconfig**
   - For **stm32f769 discovery** board with SPL: **stm32f769-disco_spl_defconfig**
   - For **stm32f769 discovery** board without SPL: **stm32f769-disco_defconfig**

5. Configure the device-tree and build the U-Boot image::

   # make DEVICE_TREE=<name> all

   Examples:

  a) boot with SPL on stm32f746 discovery board::

     # export KBUILD_OUTPUT=stm32f746-disco
     # make stm32f746-disco_spl_defconfig
     # make all

  b) boot without SPL on stm32f746 discovery board::

     # export KBUILD_OUTPUT=stm32f746-disco
     # make stm32f746-disco_defconfig
     # make all

  c) boot on stm32h743 discovery board::

     # export KBUILD_OUTPUT=stm32h743-disco
     # make stm32h743-disco_defconfig
     # make all

  d) boot on stm32h743 evaluation board::

     # export KBUILD_OUTPUT=stm32h743-disco
     # make stm32h743-eval_defconfig
     # make all

6. U-Boot Output files

   So in the output directory (selected by KBUILD_OUTPUT),
   you can found the needed U-Boot files, for example::

     - stm32f746-disco_defconfig = **u-boot-dtb.bin** and **u-boot.dtb**

       - FSBL = u-boot-dtb.bin

     - stm32f746-disco_spl_defconfig = **u-boot-dtb.bin**, **u-boot.dtb** and **u-boot-with-spl.bin**

       - FSBL + SSBL = u-boot-with-spl.bin
       - SSBL = u-boot-dtb.bin

7. Flash U-Boot files

Plug STM32 MCUs board using the USB ST-Link connector, hence it will expose
the flash area as a mass-storage. In this mass-storage you will find the
following files:

- DETAILS.TXT: give the bootrom version and build
- MBED.HTM: shortcul to the hardware board description web page from st.com.

Copy/paste the u-boot.bin or u-boot-with-spl.bin (in case of bootchain with SPL)
to this mass-storage. The "COM" LED will blink alternatively red and green during
the flash process. When done the board will reboot automatically.

In case of boot with SPL, by default SPL will try to load either a Linux
kernel (falcon mode) or, if the key "c" is maintained pressed, the main U-Boot.