Skip to content

b5g-ex/nerves_system_stm32mp157c_odyssey

Repository files navigation

ODYSSEY - STM32MP157C Support

This is the base Nerves System configuration for the ODYSSEY - STM32MP157C.

ODYSSEY - STM32MP157C This image is from Seeed.

Feature Description
CPU 650MHz Dual-core Arm-Cortex-A7 with Cortex-M4 integrated
Memory 512MB DDR3 RAM
Storage 4GB EMMC and MicroSD
Linux kernel 5.10 w/ RCN patches
IEx terminal UART ttySTM0
GPIO, I2C, SPI Yes - Elixir Circuits
ADC No
PWM Yes, but no Elixir support
UART ttySTM0, ttySTM2
Display MIPI DSI display interface, not supported yet
Camera DVP camera interface, not supported yet
Ethernet Yes (eth0)
WiFi Yes (wlan0)
Bluetooth Yes (hci0), not confirmed yet
Audio 3.5mm audio interface, not supported yet
RTC 3VRTC battery interface

Using

This port currently only runs off a SD card.

The most common way of using this Nerves System is create a project with mix nerves.new and add stm32mp157c_odyssey references where needed and in a similar way to the default systems like bbb, etc. Then export MIX_TARGET=stm32mp157c_odyssey. See the Getting started guide for more information.

If you need custom modifications to this system for your device, clone this repository and update as described in Making custom systems.

Networking

The board has one 1 Gbps Ethernet interface and one WiFi interface. Here's an example :vintage_net configuration that enables both of them:

For WiFi configuration, see. https://hexdocs.pm/vintage_net/cookbook.html#normal-password-protected-wifi-wpa2-psk

config :vintage_net,
  regulatory_domain: "US",
  config: [
    {"eth0", %{type: VintageNetEthernet, ipv4: %{method: :dhcp}}},
    {"wlan0", %{type: VintageNetWiFi}}
  ]

Serial

This board has one uart and two usart.

name as tty name as serial dts info dts info for what
ttySTM0 serial0 0x40010000 uart4 for debug uart besides barrel jack
ttySTM1 serial1 0x5c000000 usart1 for AP6236, so can't be used
ttySTM2 serial2 0x4000e000 usart2 for raspi compatible uart

GPIO

GPIO pins for circuits_gpio can be calculated according to the following formula,

pin number = <gpio chip name> * 16 + offset
# gpio chip name is A as 0, B as 1 ...

So pin number of below image GPIO_H12 is 124, 7 * 16 + 12.

Known limitations

eth0 MAC address changes at each boot

This is because the vendor does not provide it.

Can't read input when using circuits_gpio

See below issue.

Can't read input until after the output has been configured once when using circuits_gpio

Can't use GPIO_B2

This is because uart4 rx uses it. See below issue.

Can't use GPIO_B2