===================
Run NuttX on Renode
===================

Renode (https://renode.io/) is and open source virutal development
framework dedicated for complex embedded systems.

This page contains notes on running some of NuttX boards on Renode.

stm32f4discovery
================

Renode doesn't support CCM memory, so we have to disable it
with ``CONFIG_MM_REGIONS=1``.

Renode script::

  using sysbus
  $name?="STM32F4_Discovery"
  mach create $name
  machine LoadPlatformDescription @platforms/boards/stm32f4_discovery-kit.repl

  cpu PerformanceInMips 125

  $bin?=@nuttx

  showAnalyzer sysbus.usart2

  macro reset
  """
    sysbus LoadELF $bin
  """

  runMacro $reset


Tested with ``stm32f4discovery/nsh``.

nucleo-l073rz
=============

Doesn't work. No BASEPRI implementation for ``Cotex-M0`` in NuttX.

nrf52840-dk
===========

At default Renode uses UART with EasyDMA enabled (UARTE) which is not supported
by Nuttx yet. We can get around this by creating our own machine description
based on Renode default implementation::

  using "platforms/cpus/nrf52840.repl"

  uart0:
    easyDMA: false

Renode script::

  using sysbus

  mach create
  machine LoadPlatformDescription @nrf52840_custom.repl

  $bin?=@nuttx

  showAnalyzer uart0

  macro reset
  """
    sysbus LoadELF $bin
  """

  runMacro $reset

Tested with ``nrf52840-dk/nsh``.

Known issues:

* ``QSPI`` not implemented in Renode,

* ``PWM`` doesn't work, missing ``NRF52_PWM_EVENTS_SEQSTARTED0_OFFSET``
  implementation in Renode,

* ``ADC`` doesn't work, missing ``NRF52_SAADC_EVENTS_CALDONE_OFFSET``
  implementation in Renode,

* ``SoftDevice`` doesn't work, crash in ``mpsl_init()``

stm32f746g-disco
================

``CONFIG_ARMV7M_BASEPRI_WAR=y`` must be set.

Renode script::

  using sysbus
  $name?="STM32F746"
  mach create $name
  machine LoadPlatformDescription @platforms/boards/stm32f7_discovery-bb.repl

  $bin ?= @nuttx

  showAnalyzer usart1
  showAnalyzer ltdc

  macro reset
  """
    sysbus LoadELF $bin
  """

  runMacro $reset

Tested with ``stm32f746g-disco/nsh``.

Known issues:

* ``stm32f746g-disco/lvgl`` - crash due to incompatible I2C our touchscreen driver

nucleo-h743zi
=============

Renode doesn't support ``PWR_CSR1_ACTVOSRDY`` bit so we have to disable
it with ``CONFIG_STM32H7_PWR_IGNORE_ACTVOSRDY=y``.

Renode script::

  using sysbus
  mach create "nucleo_h743zi"
  include @platforms/boards/nucleo_h753zi.repl

  $bin=@nuttx

  showAnalyzer sysbus.usart3

  macro reset
  """
    sysbus LoadELF $bin
  """

  runMacro $reset

Tested wtih ``nucleo-h743zi/nsh``.