Skip to content

Run NuttX on Renode

Renode (https://renode.io/) is and open source virtual 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 with nucleo-h743zi/nsh.