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 🚀
Tier 1
81 views
0 followers
m0.hid âš¡
approved LPG ago
Tickets awarded: 1005 tickets
Tier: 1
Awesome project!!
chengyin.yao 🚀
submitted LPG for ship review ago
m0.hid âš¡
requested changes for LPG ago
Nice work on this project!!
Tier: 1
chengyin.yao 🚀
submitted LPG for ship review ago
chengyin.yao 🚀
added to the journal ago
Finished firmware and ran tests

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

Also found a few bugs in the modem firmware where it doesn't return elevation etc. .-.
But then I finally got a fix!

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:

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

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 🚀
added to the journal ago
Figured out damn spi flash. I hate rust's incomplete lib

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

Claude also became a catgirl uwu

chengyin.yao 🚀
added to the journal ago
Finally got the goddamn accel to work
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.

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!

chengyin.yao 🚀
added to the journal ago
Rust on nrf91!

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 🚀
added to the journal ago
And fuck Rust too!

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 🚀
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...

Oh and had to try out 2 different antennas, run around the room ++.
So now I'm switching to Embassy & Rust. Let's see:

chengyin.yao 🚀
added to the journal ago
Da matron biting off the Treana'ad of Heretic Zephyr

Still messing with zephyr today.
Installed 2 different versions of mcumgr.
Finally figured out how to sysbuild.

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.

How tfg am I supposed to configure ts
chengyin.yao 🚀
added to the journal ago
Fuck zephyr

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 🚀
added to the journal ago
Blinky

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 🚀
added to the journal ago
Ordered stuff

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 ⚡🚀
approved LPG ago
Tier approved: 1
Grant approved: $313.00
Sick PCB! I guess im a cool person lol
chengyin.yao 🚀
submitted LPG for ship review ago
chengyin.yao 🚀
added to the journal ago
Finished project

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 🚀
added to the journal ago
Finalized PCB

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 🚀
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.

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.

chengyin.yao 🚀
added to the journal ago
Continued to route the PCB

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 🚀
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)

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

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

chengyin.yao 🚀
added to the journal ago
Drew core
Drew core of the schematic
Figured out the GPS antenna tuning which was goddamn obscure

Not much else wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
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

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

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

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)

1/13/2026 - Continued to route the PCB

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.

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.

1/16/2026 4 PM - Finalized PCB

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

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

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

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

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

Still messing with zephyr today.
Installed 2 different versions of mcumgr.
Finally figured out how to sysbuild.

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.

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...

Oh and had to try out 2 different antennas, run around the room ++.
So now I'm switching to Embassy & Rust. Let's see:

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

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!

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
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.

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!

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

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

Claude also became a catgirl uwu

2/25/2026 - Finished firmware and ran tests

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

Also found a few bugs in the modem firmware where it doesn't return elevation etc. .-.
But then I finally got a fix!

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:

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

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.