Android 14 Release (Beta - v1.0.0) for Tachyon

Hey everyone, I hope this finds you well!

I’m proud to share that we’ve reached a milestone: the first BETA release of Android 14 for the Tachyon board (v1.0.0).

For a quick look at this running, please take a look here: https://youtu.be/xlh6otYO6cs

It is “quite” exciting to see Android running in such a solid state on our hardware to say the least :slight_smile: Big up to Eugene internally for his help on this! As you might expect from a processor family originally designed for Android, the platform is in pretty good shape and a lot of functionality works right out of the box - however, we’re continuing to refine the embedded-specific features (and feedback here on what you need for your project is highly welcome).

Want to develop a kiosk style app, run and Android app or utilize the device for some cool streaming use case? Its all yours!

But note that this is Beta and that feedback is highly welcome!

Caveats

  • Screen orientation: The default HDMI display comes up in portrait mode. If you’d like landscape, you’ll need to run an ADB command (see instructions below). The setting is persistent across reboots. This is the only display currently - DSI displays do work (see below)
  • USB keyboards/mice: Currently only USB1 keyboards and mice are usable. Because USB2 isn’t working yet as the power is not enabled, you’ll need to connect them through a USB-C hub on USB1 or via your USB-C monitor’s downstream ports.
  • 40-pin header: Not yet accessible from Android user space. Work in progress.
  • CSI/DSI cameras and displays: Drivers are functional but limited to internal development modules. Arducam camera and display compatibility will require additional porting.
  • Google Play: No Play Services or Play Store are bundled. You can sideload APKs via ADB. The distribution includes only unencumbered, licensable components.
  • Display Lock: By default the screen locks every 1 min and you have to unlock using ‘space’ on a keyboard. Change in the settings to disable!

Feature Checklist

Core & System

  • :white_check_mark: Boot/reboot/shutdown stable
  • :white_check_mark: A/B slots enabled for OTA
  • :warning: Verified boot not supported at the moment (needs additional tooling)
  • :white_check_mark: SELinux enforcing
  • :warning: OTA sideload not yet supported (tooling ongoing)
  • :white_check_mark: Time sync & RTC persistence

Display & Input

  • :white_check_mark: HDMI / USB-C DisplayPort at 1080p
  • :white_check_mark: OPEN GLES 3.0/2.0 etc…
  • :warning: No boot logo on USB-C
  • :warning: Portrait mode default (ADB command to rotate)
  • :white_check_mark: USB HID keyboard/mouse tested
  • :white_check_mark: Touch input works!
  • :warning: Brightness control not functional on HDMI

Audio

  • :white_check_mark: USB audio, Bluetooth A2DP
  • :warning: Analog Speaker/headset/mic paths untested (but audio plays here)
  • :warning: Telephony audio untested but feature appears to work (I made a call!)

Connectivity

  • :white_check_mark: Wi-Fi (all Wi-Fi 6E features)
  • :white_check_mark: Hotspot & tethering
  • :white_check_mark: Bluetooth (classic + BLE)
  • :white_check_mark: Cellular (data with manual APN configuration)
  • :white_check_mark: VPN works

Location

  • :white_check_mark: GNSS: cold/warm start, AGNSS, accuracy validated

USB-C & I/O

  • :white_check_mark: USB1 host/device functions
    • :white_check_mark: PD negotiation stable
    • :white_check_mark: Role swap works
  • USB2 doesn’t work (power is not getting turned on) but it does appear to prevent the device from sleeping when connected
  • :warning: 40-pin header not yet accessible
  • :warning: PCIe not tested

Storage

  • :white_check_mark: UFS storage (good performance)
  • :white_check_mark: SD card
  • :white_check_mark: USB mass storage

Power & Thermal

  • :white_check_mark: Suspend/Doze
  • :white_check_mark: LED indicators (off, booting, booted, Wi-Fi connected, charging)
  • :white_check_mark: Thermal management & throttling

Cameras & Media

  • :white_check_mark: Camera HAL works with dev modules
  • :white_check_mark: Hardware codecs (H.264/H.265/VP9/AV1 decode; H.264/H.265 encode)
  • :warning: Limited to internal camera hardware

OS & Tooling

  • :white_check_mark: Security patch level reports correctly
  • :white_check_mark: ADB over USB and Wi-Fi
  • :cross_mark: Haptics not present so no support

Platform

  • :cross_mark: No Device Management is enabled at the moment
  • :warning: Connectivity Management works, but eSIM profile manipulation is not enabled in this build

Getting Started

Download!

Download the ZIP files from here:

NA Build: https://linux-dist.particle.io/release/tachyon-android-14-RoW-1.0.0.zip

RoW Build: https://linux-dist.particle.io/release/tachyon-android-14-NA-1.0.0.zip

Install the Android 14 Beta Image

Using the Particle CLI, you can just install the Android 14 beta release as follows:

particle flash --tachyon /Users/nicklambourne/Downloads/tachyon-android-14-NA-1.0.0.zip

(Update the path to wherever you saved the ZIP, of course :slightly_smiling_face:)

Accessing the Console

When the device boots, its console is available via:

  • UART (through the debug adapter), or
  • ADB over USB (no extra hardware required).

For ADB:

adb devices
adb shell

More info here: Debug Board Details

Window Manager Rotation Control

By default, the HDMI display comes up in portrait orientation. You can use ADB to change the reported display size, which effectively rotates the screen into landscape. This setting is persistent across reboots until you reset it.

Force Landscape

adb shell wm size 1920x1080

Force Portrait

adb shell wm size 1080x1920

Reset to Physical Size

adb shell wm size reset

Check the current status:

adb shell wm size

You should see both the Physical size and the active Override size.

Keyboard / Input Commands via ADB

For testing without touch input, you can simulate keypresses and gestures from the command line. Useful for unlocking the screen or navigating.

Wake the Screen

adb shell input keyevent 224   # KEYCODE_WAKEUP

Dismiss Lock Screen

adb shell input keyevent 82    # KEYCODE_MENU
adb shell input keyevent 3     # KEYCODE_HOME

Swipe to Unlock

(Coordinates are for a 1080p display; adjust if needed.)

adb shell input swipe 540 1600 540 800

Enter a PIN (example: 1234)

adb shell input text 1234
adb shell input keyevent 66    # KEYCODE_ENTER

General Navigation Keys

  • Home:
adb shell input keyevent 3
  • Back:
adb shell input keyevent 4
  • Menu / App Switch:
adb shell input keyevent 187
  • DPAD arrows + select (for navigating UI without touch):
adb shell input keyevent 19   # DPAD_UP
adb shell input keyevent 20   # DPAD_DOWN
adb shell input keyevent 21   # DPAD_LEFT
adb shell input keyevent 22   # DPAD_RIGHT
adb shell input keyevent 23   # DPAD_CENTER (OK/Select)

This way, you can rotate the display and interact with the device entirely over ADB, even without touch or working USB2 peripherals…. It's very tiresome after a little while however!

Let us know how you get on here and what you are building with the Particle board!

Thanks,

The Tachyon Team

2 Likes

And docs in here!

1 Like

This is brilliant, great work!

1 Like

When flashing with android I get the following error

“Cannot read properties of undefined (reading 'ui')”

Am not sure how to proceed

Edit: Never mind, I was able to proceed past this error by downloading the file manually and running the command in the post
particle flash --tachyon /Users/nicklambourne/Downloads/tachyon-android-14-NA-1.0.0.zip

I see that Android 14 is now an option in particle tachyon setup. However, when I try to flash it, I get:

? Select the OS Type to setup in your device Android 14 (beta)
Heads-up: this setup won’t provision the eSIM or connect to the Particle Cloud.
If you need to provision the SIM, set up Ubuntu 20.04 first.
See https://developer.particle.io/tachyon/software/android_14/android-14-overview for more information.



Skipping step 1: Using current variant: android
No builds found for this variant android, board formfactor_dvt and version latest

I can still flash it by downloading the zip and manually running the flash command.

Hi @pzhine. I did not see the same issue when I tried just now. Is your particle-cli on version 3.44.1? You can update it with particle update-cli if it is not.

Hello can someone help me? @support I can’t flash it always fails in the same place i already did a particle tachyon factory-restore i’m getting always:
[██████████████████████░░░] 89% | Flashed rtice
Step 5 failed with the following error: Unable to complete device flashing. See logs for further details.

Log details:
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=14592
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=14848
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=15104
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=15360
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=15616
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=15872
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=16128
status=Flashing module, module=dsp_b, sectors_total=16384, sectors_done=16384
flashed "dsp_b" successfully at 65536kB/s
status=Start flashing module, module=devinfo, sectors_total=1, sectors_done=0
status=Flashing module, module=devinfo, sectors_total=1, sectors_done=1
flashed "devinfo" successfully
status=Start flashing module, module=rtice, sectors_total=66, sectors_done=0
status=Flashing module, module=rtice, sectors_total=66, sectors_done=66
[ERROR] flashing of rtice failed
[ERROR] firehose_run failed
Unable to complete device flashing. See logs for further details.error: [2025-12-23T20:45:25.376Z] Error occurred during step: flashOSAndConfigStep: Step 5 failed with the following error: Unable to complete device flashing. See logs for further details.
info: [2025-12-23T20:45:25.376Z] Step flashOSAndConfigStep completed

Hi @DC25. I am unable to recreate your issue. Android flashed with no issue here. Could you try a different USB port? Also, confirm that you are using a high quality USB-C to USB-C cable (capable of USB 3.0 speeds). Users have reported issues with USB-C cables of unknown quality.

Step 3:

Downloading OS version: 1.0.0

[█████████████████████████] 100% | Downloading tachyon-android-14-NA-1.0.0.zip ...


Operating system information:
Tachyon Android 14 (android, NA region)
Version: 1.0.0

===================================================================================

Step 5:

Okay—last step! We're now flashing the device with the operating system
Heads up: this is a large image and flashing will take about 2 minutes to complete.

Meanwhile, you can explore the developer documentation at https://developer.particle.io

You can also view your device on the Console at https://console.particle.io/tachyon-dev-35245/devices/422a0600000000005f618c00

[█████████████████████████] 100% | Flashing complete OS

===================================================================================

I erased the lun6 ! maybe is something missing there? Are you sure that the particle factory-restore fully restore the device? All the lun’s are recriated? Yes it is a bit strange all other OS works (ubuntu…20 and 24) only android fails, i already changed usb ports and cables, if you need extra info DM @Support. I’m using ROW version! not NA.

.particle\downloads\tachyon-android-14-RoW-1.0.0\images\qcm6490\edl>edl qfil rawprogram6.xml patch6.xml . --loader=prog_firehose_ddr.elf
Qualcomm Sahara / Firehose Client V3.62 (c) B.Kerler 2018-2025.
main - Using loader prog_firehose_ddr.elf ...
main - Waiting for the device
main - Device detected 

sahara - Protocol version: 2, Version supported: 1
main - Mode detected: sahara
sahara -
Version 0x2

HWID:              (MSM_ID:,OEM_ID:0x0000,MODEL_ID:0x0000)
CPU detected:      "qcm6490"
PK_HASH:           
Serial:            

sahara - Protocol version: 2, Version supported: 1
sahara - Uploading loader prog_firehose_ddr.elf ...
sahara - 64-Bit mode detected.
sahara - Firehose mode detected, uploading...
sahara - Loader successfully uploaded.
main - Trying to connect to firehose loader ...
firehose - INFO: Binary build date: Feb 24 2025 @ 04:10:42
firehose - INFO: Binary build date: Feb 24 2025 @ 04:10:42
firehose - INFO: Chip serial num: 
firehose - INFO: Supported Functions (15):
firehose - INFO: program
firehose - INFO: read
firehose - INFO: nop
firehose - INFO: patch
firehose - INFO: configure
firehose - INFO: setbootablestoragedrive
firehose - INFO: erase
firehose - INFO: power
firehose - INFO: firmwarewrite
firehose - INFO: getstorageinfo
firehose - INFO: benchmark
firehose - INFO: emmc
firehose - INFO: ufs
firehose - INFO: fixgpt
firehose - INFO: getsha256digest
firehose - INFO: End of supported functions 15
firehose_client
firehose_client - [LIB]: ←[33mNo --memory option set, we assume "UFS" as default ..., if it fails, try using "--memory" with "UFS","NAND" or "spinor" instead !←[0m
firehose
firehose - [LIB]: ←[33mCouldn't detect MaxPayloadSizeFromTargetinBytes←[0m
firehose
firehose - [LIB]: ←[33mCouldn't detect TargetName←[0m
firehose - TargetName=Unknown
firehose - MemoryName=UFS
firehose - Version=1
firehose - Trying to read first storage sector...
firehose - Running configure...
firehose - Storage report:
firehose - total_blocks:29976576
firehose - block_size:4096
firehose - page_size:4096
firehose - num_physical:8
firehose - manufacturer_id:462
firehose - serial_num:
firehose - fw_version:700
firehose - mem_type:UFS
firehose - prod_name:KM8L9001JM-B624
firehose_client - Supported functions:

program,read,nop,patch,configure,setbootablestoragedrive,erase,power,firmwarewrite,getstorageinfo,benchmark,emmc,ufs,fixgpt,getsha256digest
firehose_client - [qfil] raw programming...
firehose_client - [qfil] programming rawprogram6.xml
firehose_client - [qfil] programming .\NON-HLOS.bin to partition(6)@sector(6)...
firehose -
Writing to physical partition 6, sector 6, sectors 48191
modules
modules - [LIB]: ←[31m'Logger' object has no attribute 'loglevel'←[0m
Progress: |██████████| 100.0% Write (Sector 0xBC3F of 0xBC3F, ) 82.03 MB/s
firehose_client - [qfil] programming .\NON-HLOS.bin to partition(6)@sector(56326)...
firehose -
Writing to physical partition 6, sector 56326, sectors 48191
Progress: |██████████| 100.0% Write (Sector 0xBC3F of 0xBC3F, ) 82.02 MB/s
firehose_client - [qfil] programming .\dspso.bin to partition(6)@sector(121862)...
firehose -
Writing to physical partition 6, sector 121862, sectors 16384
Progress: |██████████| 100.0% Write (Sector 0x4000 of 0x4000, ) 106.29 MB/s
firehose_client - [qfil] programming .\dspso.bin to partition(6)@sector(147462)...
firehose -
Writing to physical partition 6, sector 147462, sectors 16384
Progress: |██████████| 100.0% Write (Sector 0x4000 of 0x4000, ) 70.21 MB/s
firehose_client - [qfil] programming .\devinfo to partition(6)@sector(163846)...
firehose -
Writing to physical partition 6, sector 163846, sectors 1
Progress: |██████████| 100.0% Write (Sector 0x0 of 0x0, ) 0.10 MB/s
firehose_client - [qfil] programming .\rtice.mbn to partition(6)@sector(327277)...
firehose -
Writing to physical partition 6, sector 327277, sectors 66
Progress: |██████████| 100.0% Write (Sector 0x41 of 0x41, ) 40.46 MB/s
firehose
firehose - [LIB]: ←[31mError:←[0m
firehose
firehose - [LIB]: ←[31mERROR: UFS Error -5 (3)←[0m
firehose
firehose - [LIB]: ←[31mERROR: Write Failed sector 327277, size 66 result 3←[0m
firehose_client - [qfil] programming .\apdp.mbn to partition(6)@sector(327405)...
firehose -
Writing to physical partition 6, sector 327405, sectors 4
Progress: |██████████| 100.0% Write (Sector 0x3 of 0x3, ) 11.51 MB/s
firehose
firehose - [LIB]: ←[31mError:←[0m
firehose
firehose - [LIB]: ←[31mERROR: UFS Error -5 (3)←[0m
firehose
firehose - [LIB]: ←[31mERROR: Write Failed sector 327405, size 4 result 3←[0m
firehose_client - [qfil] programming .\logfs_ufs_8mb.bin to partition(6)@sector(327469)...
firehose -
Writing to physical partition 6, sector 327469, sectors 4
Progress: |██████████| 100.0% Write (Sector 0x4 of 0x4, ) 1.13 MB/s
firehose
firehose - [LIB]: ←[31mError:←[0m
firehose
firehose - [LIB]: ←[31mERROR: UFS Error -5 (3)←[0m
firehose
firehose - [LIB]: ←[31mERROR: Write Failed sector 327469, size 4 result 3←[0m
firehose_client - [qfil] programming .\storsec.mbn to partition(6)@sector(329517)...
firehose -
Writing to physical partition 6, sector 329517, sectors 6
Progress: |██████████| 100.0% Write (Sector 0x5 of 0x5, ) 9.91 MB/s
firehose
firehose - [LIB]: ←[31mError:←[0m
firehose
firehose - [LIB]: ←[31mERROR: UFS Error -5 (3)←[0m
firehose
firehose - [LIB]: ←[31mERROR: Write Failed sector 329517, size 6 result 3←[0m
firehose_client - [qfil] programming .\boot.img to partition(6)@sector(329556)...
firehose -
Writing to physical partition 6, sector 329556, sectors 24576
Progress: |█---------|   8.3% Write (Sector 0x800 of 0x6000, 04m:16s left) 0.25 MB/s  

@support i think my ufs flash is dying? maybe a bad batch….?

Could you restore your lun 6 before flashing? Flash Ubuntu after restoring and check functionality. Then, try Android after confirming that Ubuntu works.

Hi, merry Xmas. :santa_claus: I did a particle tachyon factory-restore then installed ubuntu 20.04.

Region: RoW

OS Version: Ubuntu 20.04

USB Version: 3.0

===================================================================================

Choose an operating system to flash onto this device

? Select the OS Type to setup in your device Ubuntu 20.04 (stable), recommended

===================================================================================

Step 1:

Select the variant of the Tachyon operating system to set up.
The 'desktop' includes a GUI and is best for interacting with the device with a keyboard, mouse, and display.
The 'headless' variant is accessed only by a terminal out of the box.

? Select the OS variant: Desktop (GUI)

===================================================================================

After that i let it boot and connect to particle cloud to ensure that is all working ok, it is all working.

Then i put in edl mode and did particle tachyon setup selected Android 14 (beta) after that it fails on the following:

===================================================================================

Step 3:

Downloading OS version: 1.0.0

Using cached file: \Users\Dani.particle\downloads\tachyon-android-14-RoW-1.0.0.zip

Operating system information:
Tachyon Android 14 (android, RoW region)
Version: 1.0.0

===================================================================================

Step 5:

Okay—last step! We're now flashing the device with the operating system
Heads up: this is a large image and flashing will take about 2 minutes to complete.

Meanwhile, you can explore the developer documentation at https://developer.particle.io

You can also view your device on the Console at 


[██████████████████████░░░] 89% | Flashed rtice
Step 5 failed with the following error: Unable to complete device flashing. See logs for further details.

I’m using windows 10 Iot Entreprise LTSC. @Support

@Support it seems to be a problem in the UFS Samsung chip, how can i RMA the device ?. It seems that it has bad sectors from start_byte_hex="0x4fe6d000" start_sector="327277" to end_byte_hex="0x6dc18000" end_sector="449560", since the other OS’s (Ubuntu) never touch that sectors it works but i have a bad chip, my tachyon needs to be replaced or repaired, waiting @support for your reply.

The Particle team is out on leave until the 5th of January - when the team can discuss this and get back to you.

Thank you for your reply merry Xmas :santa_claus: :christmas_tree: and Happy new Year :fireworks: for you and the team.