Blueprint

LPG

A high efficiency ULP SIP GMSS, NBIoT & LTE-M nRF91 STO LTS for IOT with minimal BOM, ultra-low Iq and dedicated STO PHY (IP). It operates with an advanced LP PSM paired with an low iDRX interval RRC idle to optimize RX dBm gain using cDRX variations and variable iDRX PDCCH. With 40s TTFF and 2s TTSF, and 400+ dB SV attenuation, together using Async Rust for ULP functioning of 1 week.

Created by chengyin.yao chengyin.yao 🚀

Tier 1

81 views

0 followers

m0.hid m0.hid âš¡ approved LPG ago

Tickets awarded: 1005 tickets

Tier: 1

Awesome project!!

chengyin.yao chengyin.yao 🚀 submitted LPG for ship review ago

m0.hid m0.hid âš¡ requested changes for LPG ago

Nice work on this project!!

Tier: 1

chengyin.yao chengyin.yao 🚀 submitted LPG for ship review ago

chengyin.yao chengyin.yao 🚀 added to the journal ago

Finished firmware and ran tests

image

So I finally finished rev 0.1 of the firmware; wrote a ~457 line rust file.

It has the "basic" features, but still needs a bit more work until it's prod ready.

I half-implemented the uart-debug bridging, and the PVT aquizition is done.

This was hella hard. Had to learn rust (I hate the goddamn pedantic compiler, I know there is a memeory leak and I want it like that okay)

Also had to debug the modem again. the GNSS wasn't fixing but it was tracking a ton of SVs. Turns out a/ The nrf modem rust binding only works with a specific modem version, had to flash tons of different versions to figure it out. b/ There was an impedance mismatch on the antenna trace, but it's kinda smaller than 1/4*lambda so prob shouldn't matter much, but fixed it. c/ The 10M resistor on the Power Path line was too weak so it introduced UB. d/ The damn metal bar near my testing position acted as a shield, blocking off the gnss signals... e/ flash was asleep and reset didn't awake it so i banged my head against it for a while

image

Also found a few bugs in the modem firmware where it doesn't return elevation etc. .-.

But then I finally got a fix!

image

TTFF is 30s and TTSF is 2s! Very not bad.

Oh also figured out how to use the pi pico as an RTT master, erased the device a few times but meh. The orph pico is too broken to act as one, which wasted yet a lot of time...

Then I implemented my own Flash rw algorithm, since there was like no existing libs. Had to manually erase, write and read like a dozen of times, thank god for the rust cargo system.

Oh also found bugs in embassy, like there was this huge version incompatibility between the lib for flash I was using and the current branch of embassy hal, but there was no errors (where did the pedantic go). Ended up forking and writing my own lib.

After all that I finally started testing:

image

Over a week I've been constantly a/ measuring voltage b/ plugging my laptop in and checking debug logs, to check running status that printed once every 5 minutes xD c/ using more tape to tape it down

image

Current battery estimation is 1.2 weeks! (more without debug logs)

This is thanks to all the async stuff I wrote in the firmware, proud of it.

Currently the firmware won't be openly released because of FCC...

DISCLAIMER: This is only a test device okay FCC. Under your 5 units limit.

chengyin.yao chengyin.yao 🚀 added to the journal ago

Figured out damn spi flash. I hate rust's incomplete lib

image

Figured out how to use flash over the last 2 days!! I goddamn hate decapitated libs.

Rust is so new there are so few libs... ended up writing my own lib for the w32. The ones available are either incomplete, decapitated or just don't work.

Spent hours trying to find a perfect lib to perform load averaging n stuff, but ended up making my own architecture.

Also implemented the start of a uart bridge on ftdi :3

image

Claude also became a catgirl uwu
image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Finally got the goddamn accel to work

image

Take that fucking zephyr

Had to mess with all kinds of rust stuff, and learn rust.

Rust is quite safe tbh

First spun a TWI implementation by hand with bare metal hal, but then switched to a lib.

Also got interrupts working!

By the way, got gnss sat connections after a lot of reverse engineering.

image

The feature isn't even documented on rust ugh... had to go through source code to see everything.

But at least figured out how to count sats. Next step is to get the long and lat.

Also made a git repo!

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Rust on nrf91!

image

So I spent some time today to setup the rust embassy toolchain.

Was so much better than zephyr tbh.

But had to learn a bit of rust and setup my nvim, toolchains etc. took a tad of time.

Oh also read of ton of docs. Learnt about async, HAL etc.

chengyin.yao chengyin.yao 🚀 added to the journal ago

And fuck Rust too!

image

Like fym nrf91 todo on your freaking package generator????

Why tf are you publishing a goddamn project generator if it doesn't support generating projects??? common

chengyin.yao chengyin.yao 🚀 added to the journal ago

Fuck Zephyer Rust is my new love

Go to hell Zephyr

It's inhumane.

Like tf you mean I need to install 50 different probes to flash stuff and to upgrade firmware??

And worst part is I updated em all.

Turns out my modem firmware is out of date. And I had to try 2 different flashing software, 3 different drivers and compile custom bootloaders to flash the fucking thing. Fuck Zephyr

Good news: After compiling 20 different examples and tweaking a ton of variables, I finally got the gnss to work...

image

Oh and had to try out 2 different antennas, run around the room ++.

So now I'm switching to Embassy & Rust. Let's see:

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Da matron biting off the Treana'ad of Heretic Zephyr

image

Still messing with zephyr today.

Installed 2 different versions of mcumgr.

Finally figured out how to sysbuild.

image

Compiled a (ton) dual-stage bootloaders & application images with secure signing.

Fuck Zephyr tho.

Found damn problems in the board config files.

GNSS still aint working. Some weird error 8 that aint documented.

There's also the

[00:00:11.089,843] ltelc: nrfmodematprintf failed, reported error: 65536
[00:00:11.090,301] lte_lc: Failed to configure PSM, err -14
d

damn error that no one else has a solution for.

Tryin to flash a new mfw image but hey, guess nrf connect doesn't want to work and pyocd just doesn't support it. so I have to get dfu working on mcuboot. Yet guess what, it is sparsely documented and just fml.

image

How tfg am I supposed to configure ts

chengyin.yao chengyin.yao 🚀 added to the journal ago

Fuck zephyr

image

Anyways.

Been dealing with this monstrosity called zephyr all day long. Hate it. It's the devil's making.

Fuck it.

I've spent the whole day refactoring directories, comparing yaml and dts files, staring at cmake and reading docs. And well I still lack a few config files.

And wtfg is this ns thing nordic??? Can you be normal for once. Had to re-write all my board files, and cuz of a typo was yet stuck for another hour.

And now this cmake error...

chengyin.yao chengyin.yao 🚀 added to the journal ago

Blinky

IMG_20260207_110629

So got blinky working. And I hate zephyr

WTFG is all those dts and weird kconfig files. freaking hard to learn.
Also I found out that a led was reversed, and 1M resistor wasn't enough to pull down 5u...

The examples were really cursed and the nrf dev kit... let's not mention it.

A weird colossum of files and folders that's barely hanging together.

Also stlinks don't work, had to hack together a pico script.

chengyin.yao chengyin.yao 🚀 added to the journal ago

Ordered stuff

image

Forgot to log ts.

Opted bom, ordered all the components. Had to change jst conn and also re-caclulated battery life to get the thinnest lipo possible.

Aliexpress is freaking stupid, cancelling my orders... Wasted a dozen of hours there

Tanuki Tanuki ⚡🚀 approved LPG ago

Tier approved: 1

Grant approved: $313.00

Sick PCB! I guess im a cool person lol

chengyin.yao chengyin.yao 🚀 submitted LPG for ship review ago

chengyin.yao chengyin.yao 🚀 added to the journal ago

Finished project

image

Made da repo, da bom and all other stuff. found GMSS ANT that I needed to use to be compliant with FCC, CE and other regulations.

Did a final pass on the PCB.

chengyin.yao chengyin.yao 🚀 added to the journal ago

Finalized PCB

image

Final product ^^

Projected ULP duration is 2 months in normal mode.

More in STO and RRC idle mode.

Signals are now all integral and return loops optimized.

chengyin.yao chengyin.yao 🚀 added to the journal ago

Compacted board

Made board a lot more compact. Picked specific parts to opt pc and iq, while minimizing surface area.

Rerouted a lot of stuff, reworked bat charge cycle.

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Continued to route

Routed the stuff.

Kept everything compact and LP. Paid attention to DRX dBm gain and minimized GMSS derivation.

Used techniques to conserve cap polarization for ULT functioning.

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Continued to route the PCB

image

Made more progress, sparing the technical details. It's just routing with ULP in consideration with EMC optimizations. I hope to get low noise on all the rails fuck this word count

chengyin.yao chengyin.yao 🚀 added to the journal ago

Started to rotue the PCB

Started to route out the PCB. Not much to say. (Well there's a ton of technical aspects but I am not in a mood to yap, I just want to remove this char counter)

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Found more components

Picked out the converter from the freaking hundreds of different converters from TI, NXP and Micro. Found this integrated inductor boost conv that has only ~300n of Iq.

Also drew other low power stuff

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Guess what, more drawing

Drew custom symbols, figured out 2nd antenna. added all kinds of modules

Calculated polarizing capacitance to optimize battery life etc.. also found new parts

image

chengyin.yao chengyin.yao 🚀 added to the journal ago

Drew core

Drew core of the schematic

Figured out the GPS antenna tuning which was goddamn obscure

image

Not much else wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

chengyin.yao chengyin.yao 🚀 started LPG ago

1/11/2026 2 PM - Drew core

Drew core of the schematic

Figured out the GPS antenna tuning which was goddamn obscure

image

Not much else wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

1/11/2026 8 PM - Guess what, more drawing

Drew custom symbols, figured out 2nd antenna. added all kinds of modules

Calculated polarizing capacitance to optimize battery life etc.. also found new parts

image

1/12/2026 7 PM - Found more components

Picked out the converter from the freaking hundreds of different converters from TI, NXP and Micro. Found this integrated inductor boost conv that has only ~300n of Iq.

Also drew other low power stuff

image

1/12/2026 10 PM - Started to rotue the PCB

Started to route out the PCB. Not much to say. (Well there's a ton of technical aspects but I am not in a mood to yap, I just want to remove this char counter)

image

1/13/2026 - Continued to route the PCB

image

Made more progress, sparing the technical details. It's just routing with ULP in consideration with EMC optimizations. I hope to get low noise on all the rails fuck this word count

1/14/2026 - Continued to route

Routed the stuff.

Kept everything compact and LP. Paid attention to DRX dBm gain and minimized GMSS derivation.

Used techniques to conserve cap polarization for ULT functioning.

image

1/15/2026 - Compacted board

Made board a lot more compact. Picked specific parts to opt pc and iq, while minimizing surface area.

Rerouted a lot of stuff, reworked bat charge cycle.

image

1/16/2026 4 PM - Finalized PCB

image

Final product ^^

Projected ULP duration is 2 months in normal mode.

More in STO and RRC idle mode.

Signals are now all integral and return loops optimized.

1/16/2026 5 PM - Finished project

image

Made da repo, da bom and all other stuff. found GMSS ANT that I needed to use to be compliant with FCC, CE and other regulations.

Did a final pass on the PCB.

2/5/2026 - Ordered stuff

image

Forgot to log ts.

Opted bom, ordered all the components. Had to change jst conn and also re-caclulated battery life to get the thinnest lipo possible.

Aliexpress is freaking stupid, cancelling my orders... Wasted a dozen of hours there

2/7/2026 - Blinky

IMG_20260207_110629

So got blinky working. And I hate zephyr

WTFG is all those dts and weird kconfig files. freaking hard to learn.
Also I found out that a led was reversed, and 1M resistor wasn't enough to pull down 5u...

The examples were really cursed and the nrf dev kit... let's not mention it.

A weird colossum of files and folders that's barely hanging together.

Also stlinks don't work, had to hack together a pico script.

2/8/2026 - Fuck zephyr

image

Anyways.

Been dealing with this monstrosity called zephyr all day long. Hate it. It's the devil's making.

Fuck it.

I've spent the whole day refactoring directories, comparing yaml and dts files, staring at cmake and reading docs. And well I still lack a few config files.

And wtfg is this ns thing nordic??? Can you be normal for once. Had to re-write all my board files, and cuz of a typo was yet stuck for another hour.

And now this cmake error...

2/14/2026 - Da matron biting off the Treana'ad of Heretic Zephyr

image

Still messing with zephyr today.

Installed 2 different versions of mcumgr.

Finally figured out how to sysbuild.

image

Compiled a (ton) dual-stage bootloaders & application images with secure signing.

Fuck Zephyr tho.

Found damn problems in the board config files.

GNSS still aint working. Some weird error 8 that aint documented.

There's also the

[00:00:11.089,843] ltelc: nrfmodematprintf failed, reported error: 65536
[00:00:11.090,301] lte_lc: Failed to configure PSM, err -14
d

damn error that no one else has a solution for.

Tryin to flash a new mfw image but hey, guess nrf connect doesn't want to work and pyocd just doesn't support it. so I have to get dfu working on mcuboot. Yet guess what, it is sparsely documented and just fml.

image

How tfg am I supposed to configure ts

2/15/2026 10:15 PM - Fuck Zephyer Rust is my new love

Go to hell Zephyr

It's inhumane.

Like tf you mean I need to install 50 different probes to flash stuff and to upgrade firmware??

And worst part is I updated em all.

Turns out my modem firmware is out of date. And I had to try 2 different flashing software, 3 different drivers and compile custom bootloaders to flash the fucking thing. Fuck Zephyr

Good news: After compiling 20 different examples and tweaking a ton of variables, I finally got the gnss to work...

image

Oh and had to try out 2 different antennas, run around the room ++.

So now I'm switching to Embassy & Rust. Let's see:

image

2/15/2026 10:18 PM - And fuck Rust too!

image

Like fym nrf91 todo on your freaking package generator????

Why tf are you publishing a goddamn project generator if it doesn't support generating projects??? common

2/16/2026 - Rust on nrf91!

image

So I spent some time today to setup the rust embassy toolchain.

Was so much better than zephyr tbh.

But had to learn a bit of rust and setup my nvim, toolchains etc. took a tad of time.

Oh also read of ton of docs. Learnt about async, HAL etc.

2/17/2026 - Finally got the goddamn accel to work

image

Take that fucking zephyr

Had to mess with all kinds of rust stuff, and learn rust.

Rust is quite safe tbh

First spun a TWI implementation by hand with bare metal hal, but then switched to a lib.

Also got interrupts working!

By the way, got gnss sat connections after a lot of reverse engineering.

image

The feature isn't even documented on rust ugh... had to go through source code to see everything.

But at least figured out how to count sats. Next step is to get the long and lat.

Also made a git repo!

image

2/19/2026 - Figured out damn spi flash. I hate rust's incomplete lib

image

Figured out how to use flash over the last 2 days!! I goddamn hate decapitated libs.

Rust is so new there are so few libs... ended up writing my own lib for the w32. The ones available are either incomplete, decapitated or just don't work.

Spent hours trying to find a perfect lib to perform load averaging n stuff, but ended up making my own architecture.

Also implemented the start of a uart bridge on ftdi :3

image

Claude also became a catgirl uwu
image

2/25/2026 - Finished firmware and ran tests

image

So I finally finished rev 0.1 of the firmware; wrote a ~457 line rust file.

It has the "basic" features, but still needs a bit more work until it's prod ready.

I half-implemented the uart-debug bridging, and the PVT aquizition is done.

This was hella hard. Had to learn rust (I hate the goddamn pedantic compiler, I know there is a memeory leak and I want it like that okay)

Also had to debug the modem again. the GNSS wasn't fixing but it was tracking a ton of SVs. Turns out a/ The nrf modem rust binding only works with a specific modem version, had to flash tons of different versions to figure it out. b/ There was an impedance mismatch on the antenna trace, but it's kinda smaller than 1/4*lambda so prob shouldn't matter much, but fixed it. c/ The 10M resistor on the Power Path line was too weak so it introduced UB. d/ The damn metal bar near my testing position acted as a shield, blocking off the gnss signals... e/ flash was asleep and reset didn't awake it so i banged my head against it for a while

image

Also found a few bugs in the modem firmware where it doesn't return elevation etc. .-.

But then I finally got a fix!

image

TTFF is 30s and TTSF is 2s! Very not bad.

Oh also figured out how to use the pi pico as an RTT master, erased the device a few times but meh. The orph pico is too broken to act as one, which wasted yet a lot of time...

Then I implemented my own Flash rw algorithm, since there was like no existing libs. Had to manually erase, write and read like a dozen of times, thank god for the rust cargo system.

Oh also found bugs in embassy, like there was this huge version incompatibility between the lib for flash I was using and the current branch of embassy hal, but there was no errors (where did the pedantic go). Ended up forking and writing my own lib.

After all that I finally started testing:

image

Over a week I've been constantly a/ measuring voltage b/ plugging my laptop in and checking debug logs, to check running status that printed once every 5 minutes xD c/ using more tape to tape it down

image

Current battery estimation is 1.2 weeks! (more without debug logs)

This is thanks to all the async stuff I wrote in the firmware, proud of it.

Currently the firmware won't be openly released because of FCC...

DISCLAIMER: This is only a test device okay FCC. Under your 5 units limit.