# MangoPi MQ Pro Support

[![Hex version]( "Hex version")](

This is the base Nerves System configuration for the [MangoPi MQ Pro](#mangopi).

*This is a work in progress. It may change in backwards incompatible ways and the documentation might be lacking.*

To do:

- [x] Bring up WiFi
- [x] Verify Blue PWM LED
- [?] Fix MicroSD flakiness on boot (works better with 5.19, but random
  corruption sometimes?)
- [x] Verify USB host-only port (works with USB Flash drive)
- [ ] Fix USB gadget mode on OTG port
- [x] Verify SPI (spidev1.0 and spidev1.1)
- [ ] Verify I2C
- [ ] Verify all GPIO work (GPIO inputs seem to work)
- [x] Verify HW watchdog
- [x] Check that `TARGET_GCC_FLAGS` are right
- [x] Update Linux kernel to 5.18
- [x] Implement A/B firmware updates work
- [x] Use SID for serial number
- [ ] Reduce prints and shorten boot time
- [ ] Verify HDMI

![MangoPi MQ Pro](assets/images/mq-pro-pink-t.png)
<br><sup>[Image credit](#mangopi)</sup>

| Feature              | Description                     |
| -------------------- | ------------------------------- |
| CPU                  | 1 GHz 64 bit RISC-V             |
| Memory               | 512 MB or 1 GB DRAM             |
| Storage              | MicroSD                         |
| Linux kernel         | 5.19 w/ patches                 |
| IEx terminal         | UART `ttyS0`                    |
| GPIO, I2C, SPI       | Yes - [Elixir Circuits]( |
| Display              | Yes, but not supported yet      |
| ADC                  | Yes                             |
| PWM                  | Yes, but no Elixir support      |
| UART                 | ttyS0                           |
| Camera               | None                            |
| Ethernet             | No                              |
| WiFi                 | Onboard WiFi                    |
| RTC                  | No                              |
| HW Watchdog          | Yes                             |

## Using

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

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

## Example use

This example assumes some familiarity with Nerves. To use this system, you'll
need OTP 25. Follow the [Nerves installation
for additional system dependencies.

Creating a new hello world application:

mix hello_mango
cd hello_mango

Open up your `mix.exs` and add `:mangopi_mq_pro` to the `@all_targets` list at
the top. It's ok to delete targets that you don't plan on using.

Then add the `:nerves_system_mango_mq_pro` dependency to the `deps` function:

    {:nerves_system_mangopi_mq_pro, "~> 0.1", runtime: false, targets: :mangopi_mq_pro},

This will load the latest released version. To use the latest code on the `main`
branch here, add the following line:

    {:nerves_system_mangopi_mq_pro, runtime: false, targets: :mangopi_mq_pro, nerves: [compile: true], git: "", branch: "main"}

To build and write to a MicroSD card, run:

export MIX_TARGET=mangopi_mq_pro
mix deps.get
mix firmware
mix burn

## Console access

The console is configured to output to the UART on pins 8 and 10 on the 40-pin
GPIO connector. This is just like the Raspberry Pi. A 3.3V FTDI cable is needed
to access the output.

## Networking

The board has two network interfaces, a WiFi module and a virtual Ethernet on
the USB C connector marked "OTG".

## Thanks

The most helpful Allwinner D1 information comes from
[]( All
of the work here wouldn't have been possible with out it. Thanks especially to
[smaeul's Allwinner D1 Linux fork](

Here are more useful links:

* ['s ARMBian post](
* [NixOS on D1](
* [YuzukiHD Buildroot](

[Image credit](#mangopi): This image is from [](