Skip to content
Snippets Groups Projects
Commit 2ea9abc0 authored by ARUL DEVARAJAN's avatar ARUL DEVARAJAN Committed by Gururaj Shetty
Browse files

Avenger and Nitrogen boards in Document Repository

parent b46249a5
No related branches found
No related tags found
No related merge requests found
.. include:: ../definitions.rst
96Boards Avenger96
##################
Overview
********
Avenger96 is a STM32MP157xx (Cortex-A7 + Cortex-M4) development board
designed by the 96Boards initiative. Due to presence of the application
processors and the microcontroller, Avenger96 can simultaneously run
Linux and Zephyr kernels. The application processor is responsible for
powering up and programming the microcontroller with the appropriate
image. Linux provides interfaces to communicate with the program running
on the microcontroller.
Hardware
========
Detailed specification can be found on the `Avenger96 product page on
the 96Boards website <https://www.96boards.org/product/avenger96/>`__.
Hardware user manual can be found in the `96Boards GitHub documentation
repository <https://github.com/96boards/documentation/blob/master/consumer/avenger96/hardware-docs/files/avenger96-hardware-user-manual.pdf>`__.
Hardware schematics can be found in the `96Boards GitHub documentation
repository <https://github.com/96boards/documentation/blob/master/consumer/avenger96/hardware-docs/files/avenger96-schematics.pdf>`__.
+-----------------------+-----------------------------------------------+
| Component | Description |
+=======================+===============================================+
| SoC | STM32MP157AAC: 2x Cortex-A7 @ 650 MHZ + 2x |
| | Cortex-M4 @ 200 MHz |
+-----------------------+-----------------------------------------------+
| GPU | Vivante @ 533 MHz, OpenGL ES 2.0 |
+-----------------------+-----------------------------------------------+
| RAM | 1024 MB @ 533 MHz |
+-----------------------+-----------------------------------------------+
| Storage | 8 GB eMMC, QSPI flash 2 MB, EEPROM 128 B, |
| | microSD socket UHS-1 |
+-----------------------+-----------------------------------------------+
| Ethernet | 10/100/1000 Mbit/s IEEE 802.3 Compliant |
+-----------------------+-----------------------------------------------+
| Radio | Murata 1MW 802.11a/b/g/n/ac 2.4GHz + 5GHz + |
| | Bluetooth v4.2 BR/EDR/BLE |
+-----------------------+-----------------------------------------------+
See more on the `Avenger96 product page <https://www.96boards.org/product/avenger96/>`__.
Working with the board
**********************
Building OHOS image
===================
Clone the source code following the `general instruction <https://git.ostc-eu.org/OSTC/OHOS/meta-ohos#getting-started>`__.
Linux image
-----------
1. Source the environment with proper template settings: flavour being
``linux`` and target machine being ``stm32mp1-av96``. Pay attention
to how relative paths are constructed. The value of ``TEMPLATECONF``
is relative to the location of the build directory
``./build-linux-stm32mp1-av96``, that is going to be created after
this step:
::
$ TEMPLATECONF=../sources/meta-ohos/flavours/linux . ./sources/poky/oe-init-build-env build-ohos-linux-stm32mp1-av96
2. You will find yourself in the newly created build directory. Call
``bitbake`` to build the image. The only supported image for now is
``core-image-base``.
::
$ MACHINE=stm32mp1-av96 bitbake core-image-base
Images for eMMC on SD card need to be generated in one more step. Please
refer to the flashing section below.
Zephyr image
------------
1. Source the environment with proper template settings: flavour being
``zephyr`` and target machine being ``96b-avenger96``:
::
$ TEMPLATECONF=../sources/meta-ohos/flavours/zephyr . ./sources/poky/oe-init-build-env build-ohos-zephyr-96b-avenger96
2. You will find yourself in the newly created build directory. Call
``bitbake`` to build the image. The image name is the name of the
Zephyr application.
::
$ MACHINE=96b-avenger96 bitbake zephyr-philosophers
3. The output file will be located in the build directory, in
``./tmp-newlib/deploy/images/96b-avenger96/``.
Flashing OHOS image
*******************
For Linux, STM meta-layer provide a convenient shell script that helps
you to create a SD card image. You can also use the `STM32 Cube
Programmer <https://wiki.dh-electronics.com/index.php/Avenger96_Image_Programming>`__.
For Zephyr, there is no automation as for now. You need to copy the
image manually to the filesystem using a method of your choice: include
it in the image before flashing the card/eMMC, copy the file manually to
the card or just ``scp`` it to the board after you set up networking.
The goal is to have the ELF file in the filesystem.
.. _linux-image-1:
Linux image
===========
SD card
-------
1. After the image is build, run the following script with flash layout
TSV file provided as an argument. From the build directory created
during the environment source:
::
$ cd tmp/deploy/images/stm32mp1-av96
$ ./scripts/create_sdcard_from_flashlayout.sh ./flashlayout_core-image-base/extensible/FlashLayout_sdcard_stm32mp157a-av96-extensible.tsv
2. You will see the following output, providing commands ready to copy
and paste in the terminal for the image to be flashed to the card:
::
[WARNING]: A previous raw image are present on this directory
[WARNING]: ./flashlayout_core-image-base/extensible/../../FlashLayout_sdcard_stm32mp157a-av96-extensible.raw
[WARNING]: would you like to erase it: [Y/n]
Create Raw empty image: ./flashlayout_core-image-base/extensible/../../FlashLayout_sdcard_stm32mp157a-av96-extensible.raw of 2368MB
Create partition table:
[CREATED] part 1: fsbl1 [partition size 256.0 KiB]
[CREATED] part 2: fsbl2 [partition size 256.0 KiB]
[CREATED] part 3: ssbl [partition size 2.0 MiB]
[CREATED] part 4: boot [partition size 64.0 MiB]
[CREATED] part 5: vendorfs [partition size 16.0 MiB]
[CREATED] part 6: rootfs [partition size 2.2 GiB]
Partition table from ./flashlayout_core-image-base/extensible/../../FlashLayout_sdcard_stm32mp157a-av96-extensible.raw
Populate raw image with image content:
[ FILLED ] part 1: fsbl1, image: arm-trusted-firmware/tf-a-stm32mp157a-av96-trusted.stm32
[ FILLED ] part 2: fsbl2, image: arm-trusted-firmware/tf-a-stm32mp157a-av96-trusted.stm32
[ FILLED ] part 3: ssbl, image: bootloader/u-boot-stm32mp157a-av96-trusted.stm32
[ FILLED ] part 4: boot, image: st-image-bootfs-poky-stm32mp1-av96.ext4
[ FILLED ] part 5: vendorfs, image: st-image-vendorfs-poky-stm32mp1-av96.ext4
[ FILLED ] part 6: rootfs, image: core-image-base-stm32mp1-av96.ext4
###########################################################################
###########################################################################
RAW IMAGE generated: ./flashlayout_core-image-base/extensible/../../FlashLayout_sdcard_stm32mp157a-av96-extensible.raw
WARNING: before to use the command dd, please umount all the partitions
associated to SDCARD.
sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`
To put this raw image on sdcard:
sudo dd if=./flashlayout_core-image-base/extensible/../../FlashLayout_sdcard_stm32mp157a-av96-extensible.raw of=/dev/mmcblk0 bs=8M conv=fdatasync status=progress
(mmcblk0 can be replaced by:
sdX if it's a device dedicated to receive the raw image
(where X can be a, b, c, d, e)
###########################################################################
###########################################################################
1. Call the ``umount`` command printed by the
``create_sdcard_from_flashlayout.sh`` script, to unmount the card.
2. Call the ``dd`` command printed by the
``create_sdcard_from_flashlayout.sh`` script, to flash the image
card.
3. Put the card to the board and turn it on. Happy hacking!
STM32 Cube Programmer
---------------------
After you build the image just `follow the
instructions <https://wiki.dh-electronics.com/index.php/Avenger96_Image_Programming>`__,
pointing the program to the
``./tmp/deploy/images/stm32mp1-av96/flashlayout_core-image-base/trusted/FlashLayout_emmc_stm32mp157a-av96-trusted.tsv``
flash layout file.
.. _zephyr-image-1:
Zephyr image
============
Prerequisites: - have Linux running on the board - make sure Linux is
built with ``remoteproc`` support:
::
root@stm32mp1-av96:~# dmesg | grep remoteproc
[ 2.336231] remoteproc remoteproc0: m4 is available
1. Copy the Zephyr image to the board using a method of your choice.
2. Check what the ``remoteproc`` framework knows about the name and
location of the firmware file. The default values are presented at
follows. Empty path defaults to ``/lib/firmware``:
::
root@stm32mp1-av96:~# cat /sys/module/firmware_class/parameters/path
<empty>
root@stm32mp1-av96:~# cat /sys/class/remoteproc/remoteproc0/firmware
rproc-m4-fw
3. Configure the name and the location to suite your needs. E.g. for the
firmware located in ``/root/zephyr.elf``:
::
root@stm32mp1-av96:~# echo "/root" > /sys/module/firmware_class/parameters/path
root@stm32mp1-av96:~# echo "zephyr.elf" > /sys/class/remoteproc/remoteproc0/firmware
4. Power up the Cortex-M4 core:
::
root@stm32mp1-av96:~# echo start > /sys/class/remoteproc/remoteproc0/state
remoteproc remoteproc0: powering up m4
remoteprocroc remoteproc0: Booting fw image rproc-m4-fw, size 591544
rproc-srm-core m4@0:m4_system_resources: bound m4@0:m4_system_resources:m4_led (ops 0xc0be1210)
remoteproc remoteproc0: remote processor m4 is now
5. Firmware output can be inspected with:
::
root@stm32mp1-av96:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
Philosopher 5 [C:-2] STARVING
Philosopher 3 [P: 0] DROPPED ONE FORK
Philosopher 3 [P: 0] THINKING [ 25 ms ]
Philosopher 2 [P: 1] EATING [ 425 ms ]
Philosopher 3 [P: 0] STARVING
Philosopher 4 [C:-1] STARVING
Philosopher 4 [C:-1] HOLDING ONE FORK
Philosopher 4 [C:-1] EATING [ 800 ms ]
Philosopher 3 [P: 0] HOLDING ONE FORK
Philosopher 2 [P: 1] DROPPED ONE FORK
Philosopher 2 [P: 1] THINKING [ 725 ms ]
Philosopher 1 [P: 2] EATING [ 225 ms ]
There is no fully-featured console available in Linux yet, so typing
commands to Zephyr application is not possible.
Testing the board
*****************
Serial port
===========
See the `hardware user
manual <https://github.com/96boards/documentation/blob/master/consumer/avenger96/hardware-docs/files/avenger96-hardware-user-manual.pdf>`__
to see how to connect the serial port to USB converter to the low speed
connector. Please note that the connector is 1.8V tolerant, therefore
the the converter needs to be 1.8V tolerant as well. Specifically,
please don’t connect 5V or 3.3V tolerant devices to avoid SoC damage.
Ethernet
========
Wired connection works out of the box. You can use standard tools like
``ip``, ``ifconfig`` to configure the connection. The connection seems
to have stable 1Gb/s bandwidth.
USB Host
========
Just plug something to the USB port. The board seems to work fine with
an external 500GB USB 3.0 HDD.
::
root@stm32mp1-av96:~# lsusb
Bus 002 Device 003: ID 0930:0b1f Toshiba Corp.
Bus 002 Device 002: ID 0424:2513 Standard Microsystems Corp. 2.0 Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@stm32mp1-av96:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 2: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
root@stm32mp1-av96:~# mount | grep sda
/dev/sda1 on /home/root/sda1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
USB OTG
=======
The board supports that feature. For now it only works in DFU mode with
STM32 Cube Programmer. Using the board as USB Gadget is currently under
development.
eMMC
====
It can be used to store the firmware with STM32 Cube Programmer. It can
also be mounted under Linux booted from another medium:
::
root@stm32mp1-av96:~# mount /dev/mmcblk2p4 emmc/
[ 3006.721643] EXT4-fs (mmcblk2p4): recovery complete
[ 3006.726627] EXT4-fs (mmcblk2p4): mounted filesystem with ordered data mode. Opts: (null)
[ 3006.733931] ext4 filesystem being mounted at /home/root/emmc supports timestamps until 2038 (0x7fffffff)
root@stm32mp1-av96:~# ls -l emmc
drwxr-xr-x 2 root root 1024 Mar 9 12:34 bin
drwxr-xr-x 2 root root 1024 Mar 9 12:34 boot
drwxr-xr-x 2 root root 1024 Mar 9 12:34 dev
drwxr-xr-x 17 root root 1024 Mar 9 12:34 etc
drwxr-xr-x 3 root root 1024 Mar 9 12:34 home
drwxr-xr-x 3 root root 1024 Mar 9 12:34 lib
drwx------ 2 root root 12288 Jan 12 2021 lost+found
drwxr-xr-x 2 root root 1024 Mar 9 12:34 media
drwxr-xr-x 2 root root 1024 Mar 9 12:34 mnt
dr-xr-xr-x 2 root root 1024 Mar 9 12:34 proc
drwxr-xr-x 2 root root 1024 Jan 1 2000 run
drwxr-xr-x 2 root root 1024 Mar 9 12:34 sbin
dr-xr-xr-x 2 root root 1024 Mar 9 12:34 sys
lrwxrwxrwx 1 root root 8 Mar 9 12:34 tmp -> /var/tmp
drwxr-xr-x 10 root root 1024 Mar 9 12:34 usr
drwxr-xr-x 8 root root 1024 Mar 9 12:34 var
Radio
=====
Radio relies on proprietary BRCM firmware. It is already included in the image.
WiFi
----
WiFi WiFi can be controlled with ``wpa_supplicant``, which is a standard Linux tool. Please refer to the tool manual for the
details. Example ``wpa_suppliant`` configs look like below. Assuming the config is saved in a file named ``wpa.conf`` and the interface is named
``wlan0``, WiFi can be brought up with ``wpa_supplicant -i wlan0 -c ./wpa.conf``:
::
# Access Point mode example configuration
fast_reauth=1
update_config=1
ap_scan=2
network={
ssid="Avenger96 AP"
mode=2
frequency=2412
key_mgmt=WPA-PSK
proto=RSN
pairwise=CCMP
psk="PlaintextPasswordsAreGreat"
}
::
# Connection to an open network with broadcasted SSID
network={
ssid="0xDEADBEEF"
key_mgmt=NONE
}
Bluetooth
---------
Bluetooth is currently not stable. It can be controlled with
``bluetoothctl``, which is a standard Linux tool. Please refer to the
tool manual for the details. Devices scanning can be enabled as follows:
::
root@stm32mp1-av96:~# bluetoothctl
Agent registered
[CHG] Controller 00:9D:6B:AA:77:68 Pairable: yes
[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:9D:6B:AA:77:68 Powered: yes
[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller 00:9D:6B:AA:77:68 Discoverable: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:9D:6B:AA:77:68 Discovering: yes
[NEW] Device E2:A0:50:99:C9:61 Hue Lamp
[NEW] Device 57:2D:D5:48:8C:D0 57-2D-D5-48-8C-D0
[NEW] Device E4:04:39:65:9C:2A TomTom GPS Watch
[NEW] Device C0:28:8D:49:67:7E C0-28-8D-49-67-7E
Pairing and establishing connection is possible with ``pair`` and
``connect`` commands, but the connection is dropped instantly. This
issue is under investigation.
HDMI
====
Development in progres.
.. include:: ../definitions.rst
96Boards Nitrogen
#################
Nitrogen, a compliant IoT Edition board provides economical and compact BLE solutions for various IoT projects. This board includes the below features:
* Nordic nRF52832 microcontroller
* 64 KB of RAM
* 512 KB on-board flash storage.
Nitrogen hardware supports the Nordic Semiconductor nRF52832 ARM Cortex-M4F CPU.
See more on the `Nitrogen product page <https://www.96boards.org/product/nitrogen/>`_.
Hardware
********
Detailed specification can be found on the `Nitrogen product page on the 96Boards website <https://www.96boards.org/product/nitrogen/>`_.
Hardware user manual can be found in the `Seeed wiki <https://wiki.seeedstudio.com/BLE_Nitrogen/>`_.
Hardware schematics can be found in the `Seeed Document <https://github.com/SeeedDocument/BLE-Nitrogen/tree/master/res>`_.
Working with the board
**********************
Building an Application
=======================
Open HarmonyOS Zephyr flavour is based on Zephyr kernel.
* Source the environment with proper template settings: flavour being zephyr and target machine being 96b-nitrogen:
.. code-block:: console
$ TEMPLATECONF=../sources/meta-ohos/flavour/zephyr. ./sources/poky/oe-init-build-env build-zephyr-96b-nitrogen
* You will find yourself in the newly created build directory. Call *bitbake* to build the image. The image name is the name of the Zephyr application.
.. code-block:: console
$ MACHINE=96b-nitrogen bitbake zephyr-philosophers
* MACHINE variable can be set up in conf/local.conf file under build directory or via command line.
Flashing an Application
=======================
Prerequisites
-------------
Installing pyOCD
^^^^^^^^^^^^^^^^
pyOCD is an open source Python package for programming and debugging Arm Cortex-M microcontrollers using multiple supported types of USB debug probes. It is fully cross-platform, with support for Linux.
* The latest stable version of pyOCD can be installed via `pip <https://pip.pypa.io/en/stable/>`_ as follows:
.. code-block:: console
$ pip install --pre -U pyOCD
* To install the latest prerelease version from the HEAD of the master branch, do the following:
.. code-block:: console
$ pip install --pre -U git+https://github.com/mbedmicro/pyOCD.git
* You can also install directly from the source by cloning the git repository and running:
.. code-block:: console
$ python setup.py install
* You can then verify that your board is detected by pyOCD by running:
.. code-block:: console
$ pyOCD-flashtool -l
.. note::
Lack of permission gets reported as *ValueError: The device has no langid*, perform the instructions as suggested in
https://github.com/pyocd/pyOCD/tree/master/udev.
How to flash
^^^^^^^^^^^^
* To flash the image, call the command used to build the image with -c flash_usb appended.
For example, to flash the already built zephyr-philosophers image, do:
.. code-block:: console
$ MACHINE=96b-nitrogen bitbake zephyr-philosophers -c flash_usb
......@@ -5,7 +5,7 @@ Supported Boards
Harmony OS supports the following boards:
* `96Boards Nitrogen <https://git.ostc-eu.org/OSTC/OHOS/docs/supported-boards/-/blob/master/96b-nitrogen/README.rst>`_
* `96Boards Avenger96 <https://git.ostc-eu.org/OSTC/OHOS/docs/supported-boards/-/blob/master/stm32mp1-av96/README.md>`_
* `96Boards Nitrogen <https://git.ostc-eu.org/Arul/developer-guide/-/blob/master/documentation/source/quick-start/96b-nitrogen.rst>`_
* `96Boards Avenger96 <https://git.ostc-eu.org/Arul/developer-guide/-/blob/master/documentation/source/quick-start/96b-Avenger.rst>`_
For more information on supported boards and instructions to use them, see https://git.ostc-eu.org/OSTC/OHOS/docs/supported-boards.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment