The latest development version of this page may be more current than this released 4.2.0 version.

VMU RT1170

Overview

The VMU RT1170 features an i.MX RT1176 dual core MCU with the Cortex-M7 core at 1 GHz and a Cortex-M4 at 400 MHz. The i.MX RT1176 MCU offers support over a wide temperature range and is qualified for consumer, industrial and automotive markets. The VMU RT1170 is the default VMU for CogniPilot’s Cerebri, a Zephyr RTOS based Autopilot.

Hardware

  • MIMXRT1176DVMAA MCU

    • 1GHz Cortex-M7 & 400Mhz Cortex-M4

    • 2MB SRAM with 512KB of TCM for Cortex-M7 and 256KB of TCM for Cortex-M4

  • Memory

    • 512 Mbit Octal Flash

    • TF socket for SD card

  • Ethernet

    • 2 wire 100BASE-T1

  • USB

    • USB 2.0 connector

  • Power

    • Redundant dual picoflex power ports

  • Debug

    • 10 pin debug and shell adapter board to 20 Pin JTAG debugger and USB-C shell

  • Sensor

    • BMI088 6-axis IMU

    • BMM150 Magnetometer

    • Dual BMP388 Barometer

    • Dual ICM-42688 6-axis IMU

    • IST8310 3-axis Magnetometer

    • U-blox NEO-M8N GNSS module

  • UART JST-GH connectors

  • I2C JST-GH connectors

  • CAN bus JST-GH connectors

  • RC IN

    • RC input connector for SBUS compatible RC receivers

For more information about the MIMXRT1176 SoC and VMU RT1170 board, see these references:

Supported Features

VMU-RT1170 is a “Vehicle Management Unit” based on the general i.MX RT1170 family of processors.

The vmu_rt1170 board supports the hardware features listed below.

on-chip / on-board
Feature integrated in the SoC / present on the board.
2 / 2
Number of instances that are enabled / disabled.
Click on the label to see the first instance of this feature in the board/SoC DTS files.
vnd,foo
Compatible string for the Devicetree binding matching the feature.
Click on the link to view the binding documentation.

vmu_rt1170/mimxrt1176/cm7 target

Type

Location

Description

Compatible

CPU

on-chip

ARM Cortex-M7 CPU1

arm,cortex-m7

ADC

on-chip

LPC LPADC1 1

nxp,lpc-lpadc

ARM architecture

on-chip

MCUX XBAR (Crossbar)3

nxp,mcux-xbar

CAN

on-chip

NXP FlexCAN CANFD controller3

nxp,flexcan-fd

Clock control

on-chip

i.MX CCM Rev2 (Clock Controller Module) IP node1

nxp,imx-ccm-rev2

on-chip

Generic fixed factor clock provider1

fixed-factor-clock

on-chip

i.MX ANATOP (Analog Clock Controller Module) IP node1

nxp,imx-anatop

on-chip

Generic fixed-rate clock provider1

fixed-clock

Comparator

on-chip

NXP Kinetis ACMP (Analog CoMParator)4

nxp,kinetis-acmp

Counter

on-chip

NXP Periodic Interrupt Timer (PIT)2

nxp,pit

on-chip

Child node for the Periodic Interrupt Timer node, intended for an individual timer channel8

nxp,pit-channel

DAC

on-chip

NXP MCUX DAC121

nxp,dac12

Display

on-chip

NXP i.MX eLCDIF (Enhanced LCD Interface) controller1

nxp,imx-elcdif

DMA

on-chip

NXP MCUX EDMA controller1 1

nxp,mcux-edma

on-chip

NXP PXP 2D DMA engine1

nxp,pxp

Ethernet

on-chip

NXP ENET IP Module1

nxp,enet

on-chip

NXP ENET MAC/L2 Device1 1

nxp,enet-mac

on-chip

NXP ENET PTP (Precision Time Protocol) Clock2

nxp,enet-ptp-clock

on-chip

NXP ENET1G IP Module1

nxp,enet1g

on-board

TJA1103 PHY1

nxp,tja1103

GPIO & Headers

on-chip

i.MX GPIO15

nxp,imx-gpio

I2C

on-chip

NXP LPI2C controller4 2

nxp,lpi2c

I2S

on-chip

NXP mcux SAI-I2S controller4

nxp,mcux-i2s

Input

on-board

Futaba SBUS1

futaba,sbus

on-board

Group of GPIO-bound input keys1

gpio-keys

Interrupt controller

on-chip

ARMv7-M NVIC (Nested Vectored Interrupt Controller)1

arm,v7m-nvic

IPM

on-chip

i.MX Messaging Unit1

nxp,imx-mu

LED

on-board

Group of GPIO-controlled LEDs1

gpio-leds

on-board

Group of PWM-controlled LEDs1

pwm-leds

MDIO

on-chip

NXP ENET MDIO Features1 1

nxp,enet-mdio

Memory controller

on-chip

NXP Smart External Memory Controller (SEMC)1

nxp,imx-semc

on-chip

NXP FlexRAM on-chip RAM controller1

nxp,flexram

MIPI-DSI

on-chip

NXP MCUX MIPI DSI1

nxp,imx-mipi-dsi

Miscellaneous

on-chip

NXP FlexIO controller2

nxp,flexio

MMU / MPU

on-chip

ARMv7-M Memory Protection Unit (MPU)1

arm,armv7m-mpu

MTD

on-board

NXP FlexSPI MX25UM51345G1

nxp,imx-flexspi-mx25um51345g

on-board

Fixed partitions of a flash (or other non-volatile storage) memory1

fixed-partitions

Pin control

on-chip

This compatible binding should be applied to the device’s iomuxc DTS node1

nxp,imx-iomuxc

on-chip

The node has the ‘pinctrl’ node label set in MCUX RT SoC’s devicetree1

nxp,mcux-rt11xx-pinctrl

on-chip

The node has the ‘pinctrl’ node label set in MCUX RT SoC’s devicetree1

nxp,mcux-rt-pinctrl

on-chip

i.MX IOMUXC2

nxp,imx-gpr

PWM

on-chip

NXP QTMR PWM1 3

nxp,qtmr-pwm

on-chip

NXP eFLEX PWM module with mcux-pwm submodules4

nxp,flexpwm

on-chip

NXP MCUX PWM8 8

nxp,imx-pwm

Regulator

on-board

Fixed voltage regulators8

regulator-fixed

RNG

on-chip

IMX CAAM (Cryptographic Acceleration and Assurance Module)1

nxp,imx-caam

SDHC

on-chip

NXP imx USDHC controller1 1

nxp,imx-usdhc

Sensors

on-board

iSentek ist8310 Geomagnetic sensor1

isentek,ist8310

on-board

Bosch BMP388 pressure sensor accessed through I2C bus2

bosch,bmp388

on-board

Bosch BMM150 Geomagnetic sensor1

bosch,bmm150

on-board

ICM-42688 motion tracking device2

invensense,icm42688

on-board

BMI08X Accel inertial measurement unit1

bosch,bmi08x-accel

on-board

BMI08X Gyro inertial measurement unit1

bosch,bmi08x-gyro

on-chip

NXP MCUX QDEC4

nxp,mcux-qdec

Serial controller

on-chip

NXP LPUART8 4

nxp,lpuart

SPI

on-chip

NXP FlexSPI controller1 1

nxp,imx-flexspi

on-chip

NXP LPSPI controller4 2

nxp,lpspi

Timer

on-chip

ARMv7-M System Tick1

arm,armv7m-systick

on-chip

NXP MCUX General-Purpose HW Timer (GPT)1

nxp,gpt-hw-timer

on-chip

NXP MCUX General-Purpose Timer (GPT)4

nxp,imx-gpt

USB

on-chip

NXP EHCI USB device mode1 1

nxp,ehci

on-chip

NXP USB High Speed PHY2

nxp,usbphy

Video

on-chip

NXP MCUX CMOS sensor interface1

nxp,imx-csi

on-chip

NXP MIPI CSI-2 Rx interface1

nxp,mipi-csi2rx

Watchdog

on-chip

imxRT watchdog1

nxp,imx-wdog

Connections and I/Os

The MIMXRT1170 SoC has six pairs of pinmux/gpio controllers.

Name

Function

Usage

GPIO_AD_00

FLEXCAN2_TX

CAN2_TX

GPIO_AD_01

FLEXCAN2_RX

CAN2_RX

GPIO_AD_02

LPUART8_TXD

UART8_TX_TELEM2

GPIO_AD_03

LPUART8_RXD

UART8_RX_TELEM2

GPIO_AD_04

LPUART8_CTS_B

UART8_CTS_TELEM2

GPIO_AD_05

LPUART8_RTS_B

UART8_RTS_TELEM2

GPIO_AD_06

FLEXCAN1_TX

CAN1_TX

GPIO_AD_07

FLEXCAN1_RX

CAN1_RX

GPIO_AD_08

LPI2C1_SCL

I2C1_SCL_GPS1

GPIO_AD_09

LPI2C1_SDA

I2C1_SDA_GPS1

GPIO_AD_10

LPADC1_CH2A

SCALED_VDD_3V3_SENSORS1

GPIO_AD_11

LPADC1_CH2B

SCALED_VDD_3V3_SENSORS2

GPIO_AD_12

LPADC1_CH3A

SCALED_VDD_3V3_SENSORS3

GPIO_AD_13

LPADC1_CH3B

SCALED_V5

GPIO_AD_14

LPADC1_CH4A

ADC_6V6

GPIO_AD_15

LPUART10_TXD

UART10_TX_TELEM3

GPIO_AD_16

LPADC1_CH5A

ADC_3V3

GPIO_AD_17

LPADC1_CHB

SCALED_VDD_3V3_SENSORS4

GPIO_AD_18

LPI2C2_SCL

I2C2_SCL_GPS2

GPIO_AD_19

LPI2C2_SDA

I2C2_SDA_GPS2

GPIO_AD_20

GPIO3_IO19

SPI1_DRDY1_SENSOR1

GPIO_AD_21

GPIO3_IO20

SPI3_DRDY1_SENSOR3

GPIO_AD_22

LPADC2_CH2A

HW_VER_SENSE

GPIO_AD_23

LPADC2_CH2B

HW_REV_SENSE

GPIO_AD_24

LPSPI2_SCK

SPI2_SCK_SENSOR2

GPIO_AD_25

LPSPI2_PCS0

SPI2_nCS0_SENSOR2

GPIO_AD_26

LPSPI2_SOUT

SPI2_MOSI_SENSOR2

GPIO_AD_27

LPSPI2_SIN

SPI2_MISO_SENSOR2

GPIO_AD_28

LPUART5_TXD

UART5_TX_GPS2

GPIO_AD_29

LPUART5_RXD

UART5_RX_GPS2

GPIO_AD_30

LPUART3_TXD

UART3_TX_GPS1

GPIO_AD_31

LPUART3_RXD

UART3_RX_GPS1

GPIO_AD_32

USDHC1_CD_B

USDHC1_CD

GPIO_AD_33

LPUART10_RXD

UART10_RX_TELEM3

GPIO_AD_34

LPUART10_CTS_B

UART10_CTS_TELEM3

GPIO_AD_35

LPUART10_RTS_B

UART10_RTS_TELEM3

GPIO_DISP_B1_00

ENET_1G_RX_EN

ETH_CRS_DV

GPIO_DISP_B1_01

ENET_1G_RX_ER

ETH_RX_ER

GPIO_DISP_B1_02

LPUART1_TXD

UART1_TX_DEBUG

GPIO_DISP_B1_03

LPUART1_RXD

UART1_RX_DEBUG

GPIO_DISP_B1_04

LPUART4_RXD

UART4_RX_TELEM1

GPIO_DISP_B1_05

LPUART4_CTS_B

UART4_CTS_TELEM1

GPIO_DISP_B1_06

LPUART4_TXD

UART4_TX_TELEM1

GPIO_DISP_B1_07

LPUART4_RTS_B

UART4_RTS_TELEM1

GPIO_DISP_B1_08

ENET_1G_TDATA1

ETH_TXD1

GPIO_DISP_B1_09

ENET_1G_TDATA0

ETH_TXD0

GPIO_DISP_B1_10

ENET_1G_TX_EN

ETH_TX_EN

GPIO_DISP_B1_11

ENET_1G_REF_CLK

ETH_REF_CLK

GPIO_DISP_B2_00

GPIO5_IO01

nLED_RED

GPIO_DISP_B2_01

GPIO5_IO02

nLED_GREEN

GPIO_DISP_B2_02

ARM_TRACE0

TRACED0

GPIO_DISP_B2_03

ARM_TRACE1

TRACED1

GPIO_DISP_B2_04

ARM_TRACE2

TRACED2

GPIO_DISP_B2_05

ARM_TRACE3

TRACED3

GPIO_DISP_B2_06

ARM_TRACE_CLK

TRACECLK

GPIO_DISP_B2_07

ARM_TRACE_SWO

TRACESWO

GPIO_DISP_B2_08

GPIO5_IO09

ETH_POWER_EN

GPIO_DISP_B2_09

GPIO5_IO10

ETH_PHY_nINT

GPIO_DISP_B2_10

LPI2C3_SCL

I2C3_SCL_FMU

GPIO_DISP_B2_11

LPI2C3_SDA

I2C3_SDA_FMU

GPIO_DISP_B2_12

LPSPI4_SCK

SPI4_SCK_SENSOR4

GPIO_DISP_B2_13

LPSPI4_SIN

SPI4_MISO_SENSOR4

GPIO_DISP_B2_14

LPSPI4_SOUT

SPI4_MOSI_SENSOR4

GPIO_DISP_B2_15

LPSPI4_PCS0

SPI4_nCS0_SENSOR4

GPIO_EMC_B1_00

FLEXPWM4_PWM0_A + FLEXIO1_IO00

FMU_CH11

GPIO_EMC_B1_01

GPIO1_IO01

VDD_3V3_SD_CARD_EN

GPIO_EMC_B1_02

FLEXPWM4_PWM1_A + FLEXIO1_IO02

FMU_CH12

GPIO_EMC_B1_03

GPIO1_IO03

FMU_nSAFETY_SWITCH_LED_OUT

GPIO_EMC_B1_04

GPIO1_IO04

NFC_GPIO

GPIO_EMC_B1_05

GPIO1_IO05

SPI6_DRDY1_EXTERNAL1

GPIO_EMC_B1_06

FLEXPWM2_PWM0_A + FLEXIO1_IO06

FMU_CH4

GPIO_EMC_B1_07

GPIO1_IO07

SPI6_DRDY2_EXTERNAL1

GPIO_EMC_B1_08

FLEXPWM2_PWM1_A + FLEXIO1_IO08

FMU_CH5

GPIO_EMC_B1_09

GPT5_CAPTURE1

FMU_PPM_INPUT

GPIO_EMC_B1_10

FLEXPWM2_PWM2_A + FLEXIO1_IO10

FMU_CH6

GPIO_EMC_B1_11

GPIO1_IO11

SPI6_nRESET_EXTERNAL1

GPIO_EMC_B1_12

GPIO1_IO12

VDD_5V_HIPOWER_nOC

GPIO_EMC_B1_13

GPIO1_IO13

nLED_BLUE

GPIO_EMC_B1_14

GPIO1_IO14

VDD_3V3_SENSORS3_EN

GPIO_EMC_B1_15

GPIO1_IO15

VDD_5V_PERIPH_nOC

GPIO_EMC_B1_16

GPIO1_IO16

SPI4_DRDY1_SENSOR4

GPIO_EMC_B1_17

GPIO1_IO17

nARMED

GPIO_EMC_B1_18

TMR2_TIMER0

SPIX_SYNC

GPIO_EMC_B1_19

FLEXPWM2_PWM3_A + FLEXIO1_IO19

FMU_CH7

GPIO_EMC_B1_20

TMR4_TIMER0

FMU_CAP1

GPIO_EMC_B1_21

FLEXPWM3_PWM3_A + FLEXIO1_IO21

FMU_CH10

GPIO_EMC_B1_22

GPIO1_IO22

VDD_3V3_SENSORS2_EN

GPIO_EMC_B1_23

FLEXPWM1_PWM0_A

FMU_CH1

GPIO_EMC_B1_24

GPIO1_IO24

FMU_SAFETY_SWITCH_IN

GPIO_EMC_B1_25

FLEXPWM1_PWM1_A + FLEXIO1_IO25

FMU_CH2

GPIO_EMC_B1_26

GPIO1_IO26

HW_VER_REV_DRIVE

GPIO_EMC_B1_27

FLEXPWM1_PWM2_A + FLEXIO1_IO27

FMU_CH3

GPIO_EMC_B1_28

GPIO1_IO28

nPOWER_IN_A

GPIO_EMC_B1_29

FLEXPWM3_PWM0_A + FLEXIO1_IO29

FMU_CH8

GPIO_EMC_B1_30

GPIO1_IO30

nPOWER_IN_B

GPIO_EMC_B1_31

FLEXPWM3_PWM1_A + FLEXIO1_IO31

FMU_CH9

GPIO_EMC_B1_32

GPIO2_IO00

nPOWER_IN_C

GPIO_EMC_B1_33

GPIO2_IO01

VDD_3V3_SENSORS1_EN

GPIO_EMC_B1_34

GPIO2_IO02

VDD_5V_PERIPH_nEN

GPIO_EMC_B1_35

GPIO2_IO03

I2C2_DRDY1

GPIO_EMC_B1_36

GPIO2_IO04

VDD_3V3_SENSORS4_EN

GPIO_EMC_B1_37

GPIO2_IO05

VDD_5V_HIPOWER_nEN

GPIO_EMC_B1_38

GPIO2_IO06

VDD_3V3_SPEKTRUM_POWER_EN

GPIO_EMC_B1_39

GPIO2_IO07

SPI2_DRDY1_SENSOR2

GPIO_EMC_B1_40

LPUART6_TXD

UART6_TX_TO_IO__RC_INPUT

GPIO_EMC_B1_41

LPUART6_RXD

UART6_RX_FROM_IO__NC

GPIO_EMC_B2_00

LPSPI1_SCK

SPI1_SCK_SENSOR1

GPIO_EMC_B2_01

LPSPI1_PCS0

SPI1_nCS0_SENSOR1

GPIO_EMC_B2_02

LPSPI1_SOUT

SPI1_MOSI_SENSOR1

GPIO_EMC_B2_03

LPSPI1_SIN

SPI1_MISO_SENSOR1

GPIO_EMC_B2_04

LPSPI3_SCK

SPI3_SCK_SENSOR3

GPIO_EMC_B2_05

LPSPI3_PCS0

SPI3_nCS0_SENSOR3

GPIO_EMC_B2_06

LPSPI3_SOUT

SPI3_MOSI_SENSOR3

GPIO_EMC_B2_07

LPSPI3_SIN

SPI3_MISO_SENSOR3

GPIO_EMC_B2_08

LPSPI3_PCS1

SPI3_nCS1_SENSOR3

GPIO_EMC_B2_09

TMR1_TIMER0

BUZZER_1

GPIO_EMC_B2_10

FLEXSPI2_A_SCLK

FLEXSPI2_SCK_FRAM

GPIO_EMC_B2_11

FLEXSPI2_A_SS0_B

FLEXSPI2_nCS0_FRAM

GPIO_EMC_B2_12

GPIO2_IO22

GPIO_EMC_B2_12

GPIO_EMC_B2_13

FLEXSPI2_A_DATA0

FLEXSPI2_DATA0_FRAM

GPIO_EMC_B2_14

FLEXSPI2_A_DATA1

FLEXSPI2_DATA1_FRAM

GPIO_EMC_B2_15

ENET_1G_RDATA0

ETH_RXD0

GPIO_EMC_B2_16

ENET_1G_RDATA1

ETH_RXD1

GPIO_EMC_B2_17

TMR3_TIMER0

HEATER

GPIO_EMC_B2_18

GPIO2_IO28

SPI3_DRDY2_SENSOR3

GPIO_EMC_B2_19

ENET_1G_MDC

ETH_MDC

GPIO_EMC_B2_20

ENET_1G_MDIO

ETH_MDIO

GPIO_LPSR_00

FLEXCAN3_TX

CAN3_TX

GPIO_LPSR_01

FLEXCAN3_RX

CAN3_RX

GPIO_LPSR_02

SRC_BOOT_MODE00

BT_MODE0

GPIO_LPSR_03

SRC_BOOT_MODE01

BT_MODE1

GPIO_LPSR_04

LPUART11_TXD

UART11_TX_EXTERNAL2

GPIO_LPSR_05

LPUART11_RXD

UART11_RX_EXTERNAL2

GPIO_LPSR_06

LPI2C6_SDA

I2C6_SDA_EXTERNAL2

GPIO_LPSR_07

LPI2C6_SCL

I2C6_SCL_EXTERNAL2

GPIO_LPSR_08

LPSPI6_PCS1

SPI6_nCS1_EXTERNAL1

GPIO_LPSR_09

LPSPI6_PCS0

SPI6_nCS0

GPIO_LPSR_10

LPSPI6_SCK

SPI6_SCK_EXTERNAL1

GPIO_LPSR_11

LPSPI6_SOUT

SPI6_MOSI_EXTERNAL1

GPIO_LPSR_12

LPSPI6_SIN

SPI6_MISO_EXTERNAL1

GPIO_LPSR_13

JTAG_MOD

NC_JTAG_MOD_PD

GPIO_LPSR_14

SWD_CLK

FMU_SWCLK

GPIO_LPSR_15

SWD_DIO

FMU_SWDIO

GPIO_SD_B1_00

USDHC1_CMD

USDHC1_CMD

GPIO_SD_B1_01

USDHC1_CLK

USDHC1_CLK

GPIO_SD_B1_02

USDHC1_DATA0

USDHC1_DATA0

GPIO_SD_B1_03

USDHC1_DATA1

USDHC1_DATA1

GPIO_SD_B1_04

USDHC1_DATA2

USDHC1_DATA2

GPIO_SD_B1_05

USDHC1_DATA3

USDHC1_DATA3

GPIO_SD_B2_00

FLEXSPI1_B_DATA3

FLEXSPI1_DATA7_HYPERFLASH

GPIO_SD_B2_01

FLEXSPI1_B_DATA2

FLEXSPI1_DATA6_HYPERFLASH

GPIO_SD_B2_02

FLEXSPI1_B_DATA1

FLEXSPI1_DATA5_HYPERFLASH

GPIO_SD_B2_03

FLEXSPI1_B_DATA0

FLEXSPI1_DATA4_HYPERFLASH

GPIO_SD_B2_04

FLEXSPI1_B_SCLK

FLEXSPI1_nSCK_HYPERFLASH

GPIO_SD_B2_05

FLEXSPI1_A_DQS

FLEXSPI1_DQS_HYPERFLASH

GPIO_SD_B2_06

FLEXSPI1_A_SS0_B

FLEXSPI1_nCS0_HYPERFLASH

GPIO_SD_B2_07

FLEXSPI1_A_SCLK

FLEXSPI1_SCK_HYPERFLASH

GPIO_SD_B2_08

FLEXSPI1_A_DATA0

FLEXSPI1_DATA0_HYPERFLASH

GPIO_SD_B2_09

FLEXSPI1_A_DATA0

FLEXSPI1_DATA1_HYPERFLASH

GPIO_SD_B2_10

FLEXSPI1_A_DATA2

FLEXSPI1_DATA2_HYPERFLASH

GPIO_SD_B2_11

FLEXSPI1_A_DATA3

FLEXSPI1_DATA3_HYPERFLASH

USB1_DN

USB_OG1_DN

USB_D_N

USB1_DP

USB_OTG1_DP

USB_D_P

USB1_VBUS

USB_OTG1_VBUS

VBUS

Serial Port

The MIMXRT1170 SoC has 12 UARTs.

Programming and Debugging

The vmu_rt1170 board supports the runners and associated west commands listed below.

flash debug attach debugserver rtt
jlink ✅ (default) ✅ (default)
pyocd

Build and flash applications as usual (see Building an Application and Run an Application for more details).

Configuring a Debug Probe

A debug probe is used for both flashing and debugging the board.

Configuring a Console

Use the USB-C from the debug adapter board to access the console with the following settings for your serial terminal of choice (screen, minicom, putty, etc.):

  • Speed: 115200

  • Data: 8 bits

  • Parity: None

  • Stop bits: 1

Flashing

Here is an example for the Hello World application.

# From the root of the zephyr repository
west build -b vmu_rt1170 samples/hello_world
west flash

You should see the following message in the terminal:

***** Booting Zephyr OS v3.4.0-xxxx-xxxxxxxxxxxxx *****
Hello World! vmu_rt1170

Debugging

Here is an example for the Hello World application.

# From the root of the zephyr repository
west build -b vmu_rt1170 samples/hello_world
west debug

Open a serial terminal, step through the application in your debugger, and you should see the following message in the terminal:

***** Booting Zephyr OS v3.4.0-xxxx-xxxxxxxxxxxxx *****
Hello World! vmu_rt1170

Support Resources for Zephyr