You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
5.0 KiB
122 lines
5.0 KiB
.. _nrf5340bsim: |
|
|
|
NRF5340 simulated boards (BabbleSim) |
|
#################################### |
|
|
|
.. contents:: |
|
:depth: 1 |
|
:backlinks: entry |
|
:local: |
|
|
|
|
|
Overview |
|
******** |
|
|
|
To allow simulating nrf5340 SOCs two Zephyr target boards are provided: the |
|
``nrf5340bsim_nrf5340_cpuapp`` and ``nrf5340bsim_nrf5340_cpunet``. |
|
|
|
These use `BabbleSim`_ to simulate the radio activity, and the |
|
:ref:`POSIX architecture<Posix arch>` and the `native simulator`_ to |
|
run applications natively on the development system. This has the benefit of |
|
providing native code execution performance and easy debugging using |
|
native tools, but inherits :ref:`its limitations <posix_arch_limitations>`. |
|
|
|
Just like for the nrf5340dk targets, |
|
the nrf5340bsim_nrf5340_cpuapp build target provides support for the application core, |
|
and the nrf5340bsim_nrf5340_cpunet build target provides support for the network |
|
core on the simulated nRF5340 SOC. |
|
|
|
These boards include models of some of the nRF5340 SOC peripherals: |
|
|
|
* AAR (Accelerated Address Resolver) |
|
* AES CCM & AES ECB encryption HW |
|
* CLOCK (Clock control) |
|
* DPPI (Distributed Programmable Peripheral Interconnect) |
|
* EGU (Event Generator Unit) |
|
* FICR (Factory Information Configuration Registers) |
|
* IPC (Interprocessor communication) |
|
* MUTEX (Mutual exclusive peripheral) |
|
* NVMC (Non-Volatile Memory Controller / Flash) |
|
* RADIO |
|
* RNG (Random Number Generator) |
|
* RTC (Real Time Counter) |
|
* TEMP (Temperature sensor) |
|
* TIMER |
|
* UICR (User Information Configuration Registers) |
|
|
|
and will use the same drivers as the nrf5340dk targets for these. |
|
For more information on what is modelled to which level of detail, |
|
check the `HW models implementation status`_. |
|
|
|
Note that unlike a real nrf5340 device, the nrf5340bsim boards have unlimited RAM and flash for |
|
code. |
|
|
|
.. _BabbleSim: |
|
https://BabbleSim.github.io |
|
|
|
.. _native simulator: |
|
https://github.com/BabbleSim/native_simulator/blob/main/docs/README.md |
|
|
|
.. _HW models implementation status: |
|
https://github.com/BabbleSim/ext_nRF_hw_models/blob/main/docs/README_impl_status.md |
|
|
|
|
|
Building for, and using these boards |
|
************************************ |
|
|
|
If you are interested in developing on only one of the MCUs in this SOC, you |
|
can use the corresponding simulated target, nrf5340bsim_nrf5340_cpuapp or nrf5340bsim_nrf5340_cpunet |
|
following the instructions from the :ref:`nrf52_bsim board <nrf52bsim_build_and_run>`. |
|
Simply change the board/target appropriately when building. |
|
|
|
|
|
.. note:: |
|
|
|
Unlike in real HW, the net core MCU is set-up to automatically boot at start, to facilitate |
|
developing without an image in the application core. You can control |
|
this with either :kconfig:option:`CONFIG_NATIVE_SIMULATOR_AUTOSTART_MCU`, or the command line |
|
option ``--cpu1_autostart``. |
|
|
|
If an MCU is booted without any image, it will automatically set itself to sleep. |
|
|
|
|
|
Assembling both MCUs images into a single executable |
|
**************************************************** |
|
|
|
By default, when you build targeting either nrf5340bsim_nrf5340_cpuapp or |
|
nrf5340bsim_nrf5340_cpunet you will end up with a library (``zephyr/zephyr.elf``) that corresponds |
|
to that MCU code image, and an executable (``zephyr/zephyr.exe``) that includes the native simulator |
|
runner, SOC HW models, that image, and an empty image for the other MCU. |
|
|
|
If you want to assemble an executable including a previously built image for the other MCU, |
|
built with either Zephyr's build system or another native simulator compatible build system, |
|
you can provide that image to the Zephyr build of the second image using |
|
:kconfig:option:`CONFIG_NATIVE_SIMULATOR_EXTRA_IMAGE_PATHS`. |
|
|
|
You can also use :ref:`System build (sysbuild) <sysbuild>` to build your dual MCU executable. |
|
The best way to understand how, may be to look into how this is done in one of the examples |
|
in the tree. For example, for :ref:`the nrf53_sync_rtc sample <nrf53_sync_rtc_sample_build_bsim>`, |
|
:zephyr_file:`samples/boards/nrf/nrf53_sync_rtc/sysbuild.cmake`. |
|
|
|
|
|
.. note:: |
|
|
|
These libraries/images are **not** embedded images. You cannot use them for embedded devices, |
|
and cannot use an embedded image to assemble a native executable. |
|
|
|
TrustZone, TF-M and other security considerations |
|
************************************************* |
|
|
|
ARM's TrustZone is not modelled in these boards. This means that: |
|
|
|
* There is no differentiation between secure and non secure execution states or bus accesses. |
|
* All RAM, flash and peripherals are in principle accessible from all SW. Peripherals with their |
|
own interconnect master ports can, in principle, access any other peripheral or RAM area. |
|
* There is no nrf5340bsim_nrf5340_cpuapp_ns board/build target, or posibility of mixing secure |
|
and non-secure images. |
|
* Currently there is no model of the SPU, and therefore neither flash, RAM areas or peripherals |
|
can be labelled as restricted for secure or non secure access. |
|
* TF-M cannot be used. |
|
|
|
Note that the ARM cryptocell-312 peripheral is not modelled. The mbedTLS library can still be used |
|
but with a SW crypto backend instead of the cryptocell HW acceleration.
|
|
|