Skip to content

About

A place where I summarize all the stuff related to the miyoo flip in a form that both AI and humans can read

Topics

Resources

Stars

22 stars

Watchers

0 watching

Forks

Repository files navigation

Miyoo Flip — Device Wiki & Reference

This repository is the hardware, firmware, and reverse-engineering wiki for the Miyoo Flip (my355, Rockchip RK3566). It is not the manual for one Linux distribution. A different operating system should still be able to use the hardware facts.

How statements are classified: Documentation model.

Project status

Role Where
Active implementation Zlyme — status page
Historical implementation Miyoo Flip ROCKNIX fork — Zetarancio/distribution, archived — status page
External upstream reference ROCKNIX/distribution

Archiving the fork does not retire its measurements. The last wiki stamp of that flip branch is d249b09bd9 (2026-09-02), RK3566 kernel Linux 7.0.2. Provenance for the upper-port OHCI clock, RTL8733BU patches, and related fixes stays on the historical page.

This main branch is the wiki, reference dumps, and small helper tools. Legacy local build scripts live on branch buildroot.


Stock + SD at once, without opening the device

Write a Zlyme card and boot stock once so the included installer can repair this unit's preloader. No card then boots stock. A bootable card in the right-hand slot boots that OS. The standalone helpers are preloader tools. The 2026-10-08 measurements of those helpers are on that page. They are not extra install steps. The /pinctrl repair, provenance, and the older manual app are SD multiboot.

Observed on that repaired preloader: stock, the archived ROCKNIX fork, SpruceOS, and apommel's MinUI base. Zlyme was observed the same way on 2026-10-07 from a development card. Official firmware updates do not rewrite the preloader. Method by apommel.

Physical MASKROM plus xrock is the last resort: Flashing.


Hardware

Component Detail
SoC Rockchip RK3566 (quad Cortex-A55 @ 1.8 GHz)
GPU Mali-G52 2EE (Bifrost)
RAM LPDDR4
Storage SPI NAND 128 MB + 2x MicroSD
Display LMY35120-20p (marking 2503x). Confirmed: 640×480 MIPI DSI, 2-lane, RGB888 video mode (stock DTS). Presumed: FT8006M COG — details
WiFi/BT RTL8733BU (USB)
Audio RK817 codec + speaker amplifier
PMIC RK817 (main) + VDD_CPU (RK8600 @ 0x40; see I2C0 note below)
Battery Miyoo 755060, 3.7 V nominal, 3000 mAh, 11.1 Wh (typical pack marking)
UART ttyS2 @ 1,500,000 baud (3.3V)
USB Two USB-C: upper (top) = host; lower (bottom) = charge + gadget. Board DTS — USB

VDD_CPU / I2C0: Retail units populate RK8600 @ 0x40 only. TCS4525 @ 0x1c was removed from the board DTS (1f129e89df on the archived ROCKNIX fork) after Miyoo officially confirmed there is no second CPU-regulator hardware variant. 2025 stock DTS still lists both addresses for BSP comparison — not evidence of two production SKUs.


Documentation

Full index → docs/README.md

Topic Front page Subpages
Implementations implementations/ — Zlyme, archived ROCKNIX, stock Zlyme, ROCKNIX fork, Stock
Input hardware/input.md — UART stick, GPIO, hall, rumble —
Boot and flash boot-and-flash.md — specs, boot chain Preloader tools, SD multiboot, Flashing, Erase the preloader
RK3566 reference rk3566-reference.md — SoC overview Datasheet, TRM 1, TRM 2, Unused pins
Stock firmware stock-firmware-and-findings.md — dumps, overview BSP/DDR findings, SPI/boot chain
Drivers and DTS drivers-and-dts.md — DTS evolution, drivers Board DTS, Drivers, DTS porting, Display, WiFi power-off, Suspend
Power-off / RK817 drain miyoo-flip-power-off-investigation.md Long-form investigation; kernel patch 0007 (SYS_CAN_SD)
Troubleshooting troubleshooting.md —
Serial serial.md —

Reference boot logs in logs/: logs/boot_log_ROCKNIX.txt (mainline; DMC after resume, power-down reaches reboot: Power down); logs/boot_log_STOCK_INCLUDE_SLEEP_POWEROFF_AND_DEBUG.txt (stock with DDR/sleep debug); logs/boot_log_STOCK_INCLUDE_SLEEP_POWEROFF.txt (stock, sleep/poweroff).

Note: logs/boot_log_ROCKNIX.txt is a historical capture from the archived ROCKNIX fork. It is proof of a working mainline boot (DMC after resume, power-down), not a live log of Zlyme.


Device capability

What the hardware does on mainline, and where it was demonstrated. “Demonstrated” means observed on the archived ROCKNIX fork unless the note says stock, Zlyme (with a revision), or a hardware fact. A fork observation does not mean Zlyme ships that configuration. Zlyme status: implementations/zlyme.md.

Subsystem On mainline Notes
Boot (U-Boot + kernel) Demonstrated SPI NAND or SD. Archived fork: mainline 7.0.2 at stamp d249b09bd9 (older captures used 6.18+).
Display (DSI panel) Demonstrated 640×480. Panel controller identity is presumed — Display.
Backlight Demonstrated PWM4
Audio (RK817) Demonstrated Codec works. PipeWire idle 60s and 099-audio_prime were archived ROCKNIX policy (79453c8, 32fa5f3).
WiFi (RTL8733BU) Demonstrated USB combo. Enable GPIO is separate from the radio driver — WiFi/BT power-off. Driver patches 001–006 are the archived fork’s tree.
Bluetooth Demonstrated Same combo chip. Agent loop and sleep power sequencing below are archived-fork userspace/driver history (86de663, 47fb725).
USB (upper / top) Hardware fact Host: usb_host0_ehci + usb_host0_ohci, PHY usb2phy1_otg, VBUS vcc5v0_host. OHCI needs the PHY 480 MHz clock or suspend hangs. Proven on the archived fork (54d8b02).
USB (lower / bottom) Hardware fact Charge + gadget (usb_host0_xhci, dr_mode = "otg"). No VBUS for a bus-powered device.
GPU (Mali-G52) Demonstrated mali_kbase + libmali, 200–800 MHz, on the archived fork
Storage Demonstrated SPI NAND MTD, both SD slots. Slots share vqmmc.
HDMI Demonstrated when the DTS node is enabled Video and audio
DMC (DDR devfreq) Demonstrated out of tree V2 SIP mechanism. The archived fork carried it as patch 1012. Zlyme zlyme44 (337ccbce) ships it as the external module rk3568_dmc.ko — Zlyme. BSP and DDR
VPU / RGA Demonstrated hantro-vpu, rockchip-rga
IEP Not on mainline BSP-only (MPP)
Suspend Standard and deep suspend demonstrated Deep suspend is a separate BL31 mode and was left off on the archived fork. Zlyme zlyme44 (337ccbce) enables it with vdd_logic off in mem suspend; hardware acceptance ran on Zlyme b709719a — Zlyme. Suspend
Input Hardware fact GPIO buttons, UART1 stick, PWM5 rumble, hall on GPIO0_PC6. Input

Key Discoveries

Findings that made mainline work on this device (details in the wiki).

  • VSEL register hang: The BSP DTS uses rockchip,suspend-voltage-selector but mainline fan53555 reads fcs,suspend-voltage-selector. Wrong name causes VDD_CPU to drop and the board to hang immediately after "FAN53555 Detected!" on kernels 6.4+.

  • DSI panel init in command mode: The stock driver sends init commands via a DT property. On mainline, commands must be sent during prepare() (command mode), not enable() (video mode), or they collide with the video stream on the shared FIFO.

  • PMIC dependency cycles: vcc9-supply = <&dcdc_boost> and some sleep pinctrl arrangements create circular dependencies that fw_devlink cannot resolve. The working arrangement uses <&vccsys> and a simpler RK817 pinctrl. Deep sleep still depends on a BL31 ARMOFF_LOGOFF configuration; the archived ROCKNIX fork carried that as an rk8xx/suspend patch set and then left it disabled. Zlyme zlyme44 (337ccbce) enables that configuration.

  • DDR on mainline: The BSP DMC uses Rockchip V2 SIP (shared memory + MCU/IRQ). An out-of-tree DMC devfreq driver implements that protocol. The archived ROCKNIX fork carried it as patch 1012 on Linux 7.0.2 (older captures used 6.18+). Zlyme zlyme44 (337ccbce) ships the same mechanism as an external module on Linux 7.0.2. See BSP and DDR findings and SPI and boot chain.

  • Suspend: Standard suspend was demonstrated on the archived ROCKNIX fork. Deep sleep (rk3568-suspend + vdd_logic off) stayed deferred there (.testing-disabled, CONFIG_RK3568_SUSPEND_MODE off) pending an EmulationStation fix. Zlyme zlyme44 (337ccbce) enables deep sleep with vdd_logic off in mem suspend; its hardware acceptance ran on Zlyme b709719a — Zlyme. See Suspend and vdd_logic.

  • WiFi/BT full poweroff: The 8733bu driver only does software rfkill; it does not control the power-enable GPIO. Full hardware poweroff of the combo requires a separate driver that controls the enable GPIO and integrates with rfkill. See WiFi/BT power-off.

  • Boot chain: TF-A runtime firmware is BL31. OP-TEE is BL32, not BL31. The stock SPI FIT at 0x300000 contains BL31 (atf-1 through atf-6), an OP-TEE segment labeled BL32, U-Boot, and an FDT. This repository does not record a boot that failed because OP-TEE was omitted, so that layout is the proven configuration rather than a demonstrated requirement that every U-Boot FIT include a separate OP-TEE image. Working SD boots described here also carried ATF and OP-TEE, except Zlyme: its card FIT carries BL31 v1.44 and U-Boot with no OP-TEE. Zlyme zlyme44 (337ccbce) boots that way, and the same BL31-only layout resumed from deep suspend in Zlyme’s hardware acceptance on b709719a (observed in Zlyme; no serial capture is kept in this wiki). See Boot and flash and SPI and boot chain.

  • Full power-off / off-state drain: The ~8 mA battery drain while “off” was traced to RK817 SYS_CAN_SD (charger block stays active). The archived ROCKNIX fork cleared that bit in rk817_battery_init() as kernel patch 0007 (BSP parity). The bit is battery-backed: a true POR leaves it set (0xe6 = 0xc5); neither stock SPL nor that fork’s U-Boot clears it, so a warm reboot still shows 0x40 from the previous kernel. See Power-off investigation, Troubleshooting, and 560a99c. Earlier guidance to omit system-power-controller to “fix drain” is obsolete once 0007 is applied. DTS pinctrl on that fork followed upstream-style pmic_pins (a482d5c).

  • Fuel-gauge internal resistance: Mainline rk817_charger.c never reads factory-internal-resistance-micro-ohms.

  • 2025 stock alignment: PMIC suspend/resume, battery OCV (descending table), shared SD vqmmc, DMC devfreq tuning, and DSI/panel init were refined against newer stock on the archived fork. See Stock firmware and findings and Board DTS / PMIC / DDR. Commit history: archived flip.

  • USB ports: Two USB-C, named upper (top) and lower (bottom). Upper is host (usb_host0_ehci + usb_host0_ohci, usb2phy1_otg, VBUS vcc5v0_host). Disabling usb2phy1_otg as unused is what first broke host. The OHCI companion is required for full-speed devices, and rk356x-base.dtsi omits the PHY clock it needs (480 MHz / stock "utmi"); enabling the controller without that clock hung suspend in firmware. The archived fork’s node that includes the clock is 54d8b02. Lower is charge/gadget on usb_host0_xhci and cannot raise VBUS. Board DTS — USB.

  • Power-off vs Wi-Fi panic: A board that “comes back on” after poweroff with ON_SOURCE = 0x02 was a warm reboot (8733bu cfg80211 BSS double-free), not a charger event. ON_SOURCE = 0x80 is a genuine power-off. Patches 003/004 stop the panic. The restored multiboot preloader does not change off-state drain. Power-off investigation — 2026-08-27.

  • VDD_CPU / I2C0: Retail hardware is RK8600 only. TCS4525 was dropped from the board DTS after Miyoo’s official confirmation there is no alternate CPU-regulator SKU (1f129e89df on the archived fork). Board DTS — I2C0.


Project structure

docs/                          Documentation wiki (maintained)
miyoo355_fw_20250527/          Official May 2025 card-flash unpack (DTS, rootfs; raw `miyoo355_fw.img` not kept in git — see docs/stock-firmware-and-findings.md)
spi_20241119160817/            Unpacked 2024 SPI dump (DTS, rootfs, joystick study used to improve the rocknix driver) — see docs/stock-firmware-and-findings.md
bl31_v1.44_stock_disasm/       BL31 v1.44 disassembly + ELF (stock rkbin snapshot) — see docs/stock-firmware-and-findings.md
bl31_v1.45_rocknix_disasm/     BL31 v1.45 disassembly + ELF (ROCKNIX rk3566)
bl31_v1.44_vs_v1.45_diff.patch Diff of disassembly exports (v1.44 vs v1.45)
logs/                          Boot logs + PMIC/debugfs dumps (reference)
test-scripts/                  `miyoo-flip-power-dump.sh` — optional on-device capture
preloader-stock-rocknix/       Two SD-card apps: apommel-multiboot (repair the preloader → multiboot, and restore it) and PreloaderEraser (historical erase tool; erasing does not guarantee USB MASKROM when another loader can boot) — see docs/boot-and-flash/sd-multiboot-apommel.md

Wiki: The docs/ tree is the device wiki and is maintained.

Boot logs: Under logs/ — historical mainline and stock captures. They are not a Zlyme runtime log.

Active OS: Zlyme. The archived ROCKNIX fork remains at Zetarancio/distribution as evidence. Legacy local build scripts live on branch buildroot. Flashing steps are in docs/boot-and-flash/flashing.md.


Quick start

For the maintained Miyoo Flip OS, use Zlyme. Zlyme stable releases publish zlyme.img, a raw SD-card image. zlyme44 is the first stable release. The current published release is zlyme44.2 (2026-10-11).

  1. Write zlyme.img with the Zlyme Installer (download it from its Releases page) or a raw-image writer. Either way the whole card is erased.
  2. Put it in the right-hand slot.
  3. On an unprepared Flip, boot stock once and let the included miyoo355_fw.img finish.
  4. Boot Zlyme.
  5. Later updates are Settings → Update.

Standalone and advanced preloader jobs are Preloader tools. Do not erase the preloader as part of this install.

Details: Where to get images and Zlyme’s install guide.

Historical ROCKNIX card images from the archived fork are described in Where to get images. Those Actions artifacts are not a maintained download channel.

For legacy local build scripts, see branch buildroot.

For flashing and SD boot on this wiki, see Boot and flash.


External references

Datasheets & TRM (Rockchip)

Document URL
RK3566 Datasheet V1.2 FriendlyElec wiki
RK3568 TRM Part 1 Radxa
RK3568 TRM Part 2 Radxa

steward-fu’s Miyoo Flip pages

Topic URL
UART miyoo_flip_uart.htm
Specs miyoo_flip_spec.htm
Pin mapping miyoo_flip_pin.htm
MTD miyoo_flip_mtd.htm

Related projects

Other reference


License

Documentation and scripts: GNU GPL v2. DTS/patches follow kernel GPL v2. Third-party components have their own licenses.


Thanks

Thanks to apommel for baseos-my355 — the discovery that Miyoo's fdtgrep run left /pinctrl empty in the SPL device tree, the nine properties that repair it, and a write-up clear enough to reproduce and verify independently. SD multiboot on this device exists because of that work, and it keeps stock intact precisely because it repairs the vendor's own preloader instead of replacing it.

Thanks to steward-fu for the Miyoo Flip resource site and assets; beebono, sydarn, and the community behind SpruceOS for their work and support. This project wouldn’t be where it is without them.

About

A place where I summarize all the stuff related to the miyoo flip in a form that both AI and humans can read

Topics

Resources

Stars

22 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages