boards/96boards/avenger96/doc/index.rst
.. zephyr:board:: 96b_avenger96
96Boards Avenger96 ##################
Overview
96Boards Avenger96 board is based on ST Microelectronics STM32MP157A multi-core processor, composed of a dual Cortex®-A7 and a single Cortex®-M4 core. Zephyr OS is ported to run on the Cortex®-M4 core.
Board features:
PMIC: STPMIC1A
RAM: 1024 Mbyte @ 533MHz
Storage:
Ethernet: 10/100/1000 Mbit/s, IEEE 802.3 Compliant
Wireless:
USB:
HDMI: WXGA (1366x768)@ 60 fps, HDMI 1.4
Connectors:
LEDs:
.. image:: img/96b_avenger96.jpg :align: center :alt: 96Boards Avenger96
More information about the board can be found at the
96Boards website_.
Hardware
The STM32MP157A SoC provides the following hardware capabilities:
Core:
32-bit dual-core Arm® Cortex®-A7
32-bit Arm® Cortex®-M4 with FPU/MPU
Memories:
Clock management:
General-purpose input/outputs:
Interconnect matrix
3 DMA controllers
Communication peripherals:
Graphics:
Timers:
Hardware acceleration:
Debug mode:
More information about STM32P157A can be found here:
STM32MP157A on www.st.com_STM32MP157A reference manual_.. zephyr:board-supported-hw::
96Boards Avenger96 Board schematic is available here:
Avenger96 board schematics_.
The Cortex®-M4 Core is configured to run at a 209 MHz clock speed. This value must match the configured mlhclk_ck frequency.
96Boards Avenger96 board has 3 U(S)ARTs. The Zephyr console output is assigned by default to the RAM console to be dumped by the Linux Remoteproc Framework on Cortex®-A7 core. Alternatively, Zephyr console output can be assigned to UART7 which is disabled by default. UART console can be enabled through board's devicetree and 96b_avenger96_defconfig board file (or prj.conf project files), and will disable existing RAM console output. Default UART console settings are 115200 8N1.
Programming and Debugging
The STM32MP157A doesn't have QSPI flash for the Cortex®-M4 and it needs to be started by the Cortex®-A7 core. The Cortex®-A7 core is responsible to load the Cortex®-M4 binary application into the RAM, and get the Cortex®-M4 out of reset. The Cortex®-A7 can perform these steps at bootloader level or after the Linux system has booted.
The Cortex®-M4 can use up to 2 different RAMs. The program pointer starts at address 0x00000000 (RETRAM), the vector table should be loaded at this address These are the memory mappings for Cortex®-A7 and Cortex®-M4:
+------------+-----------------------+------------------------+----------------+ | Region | Cortex®-A7 | Cortex®-M4 | Size | +============+=======================+========================+================+ | RETRAM | 0x38000000-0x3800FFFF | 0x00000000-0x0000FFFF | 64KB | +------------+-----------------------+------------------------+----------------+ | MCUSRAM | 0x10000000-0x1005FFFF | 0x10000000-0x1005FFFF | 384KB | +------------+-----------------------+------------------------+----------------+ | DDR | 0xC0000000-0xFFFFFFFF | | up to 1 GB | +------------+-----------------------+------------------------+----------------+
Refer to stm32mp157 boot Cortex-M4 firmware_ wiki page for instruction
to load and start the Cortex-M4 firmware.
You can debug an application using OpenOCD and GDB. The Solution proposed below is based on the Linux STM32MP1 SDK OpenOCD and is available only for a Linux environment. The firmware must first be loaded by the Cortex®-A7. Developer then attaches the debugger to the running Zephyr using OpenOCD.
install stm32mp1 developer package_.
start OpenOCD in a dedicated terminal
Start up the sdk environment::
source <SDK installation directory>/environment-setup-cortexa7hf-neon-vfpv4-openstlinux_weston-linux-gnueabi
Start OpenOCD::
${OECORE_NATIVE_SYSROOT}/usr/bin/openocd -s ${OECORE_NATIVE_SYSROOT}/usr/share/openocd/scripts -f board/stm32mp15x_ev1_jlink_jtag.cfg
run gdb in Zephyr environment
.. code-block:: console
cd $ZEPHYR_BASE/samples/hello_world mkdir -p build && cd build
cmake -GNinja -DBOARD=96b_avenger96 ..
ninja debug
.. _96Boards website: https://www.96boards.org/product/avenger96/
.. _STM32MP157A on www.st.com: https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-arm-cortex-mpus/stm32mp1-series/stm32mp157/stm32mp157a.html
.. _STM32MP157A reference manual: https://www.st.com/resource/en/reference_manual/DM00327659.pdf
.. _Avenger96 board schematics: https://www.96boards.org/documentation/consumer/avenger96/hardware-docs/files/avenger96-schematics.pdf
.. _stm32mp1 developer package: https://wiki.st.com/stm32mpu/index.php/STM32MP1_Developer_Package#Installing_the_SDK
.. _stm32mp157 boot Cortex-M4 firmware: https://wiki.st.com/stm32mpu/index.php/Linux_remoteproc_framework_overview#How_to_use_the_framework