I do not think there is any thrill that can go through the human heart like that felt by the inventor as he sees some creation of the brain unfolding to success
– Nikola Tesla
It’s got a 4K AMOLED display, a Cherry MX mechanical keyboard, plays Minecraft at 4K, runs +7B LLMs, surfs the web, and has ~7h battery life. All open-source.
Video
How I Made A Laptop From Scratch (YouTube.com). Demo at 22:14.
The writeup below pretty much abridges the video above.
See the progression updates from the development journey here.
Imagine a skill-chart of qualities of technology: screen, audio, performance, build, tactility, touch-interaction, efficiency, size, and so many more. At the balancing point of all these qualities is the laptop. To that end, let’s build a laptop that hits as many qualities of a modern commercial thin & light laptop—while trying to do as much from scratch as possible.
Booting and inserting magnetically attached keyboard
Epic Hypixel Bedwars gaming
Finding an electron in a cloud
I first made a mental map and transferred it into Obsidian:
Boiling it down, it landed me with a lofty list of goals:
- RK3588 SoC Motherboard
- CM3588-based
- USB-C USB3.1 Gen 1
- PCIe Wi-Fi/BT + SSD
- Powertrain
- ESP32-S3 embedded controller
- ~60Wh Li-ion battery pack
- Peripherals
- Wireless mechanical keyboard
- Glass-topped multi-touch trackpad
- 4K AMOLED 13.3” display
- Anodized aluminum CNC chassis
General system overview
Fermionic Analysis
Choosing the chip
I looked towards single-board computer SoCs, as board manufacturers commonly release schematics for reference. In many aspects, the Rockchip RK3588 is the fastest consumer-procurable chip on the market. Despite the spotty software support, the hardware documentation has lots of developer resources and reference schematics from SBC manufacturers.
Some quick specs:
- Quad core A76 and quad core A55
- Mali-G10 GPU
- 6TOPs NPU
- 8K@60FPS decoder
- I/O: 8K display, dual USB3.1, PCIe 3.0 x 4, HDMI2.1/eDP 1.4, etc.
With only a few months to work on this project, an SoM (system on module) like the Raspberry Pi CM5 presented the best option for its hardware compatibility and a high likelihood of a snug integration. Choosing an SoM also alleviates memory and other high-speed signaling concerns. Looking around for a RK3588 SoM, I came across the CM3588 by FriendlyElec. Cheap, well-documented, and easily procurable. Sounds good!
FriendlyElec CM3588 SoM
Display
I hopped on panelook.com and filtered by size and resolution. I’ve always been a sucker for high pixel density, so I went with a 4K AMOLED 13.3” display. Cross referencing stock availability on Taobao (Chinese domestic Aliexpress), the ATNA33TP11 seemed to be the one with most brand-new stock since OLED risked burn-in.
A highlight: during display evaluation, switching out a connector and shortening the board by 2mm improved signal integrity just enough for the 1.5GHz x 4 signals go pass through. Getting the display running on Linux meant finding system logs from Asus laptops that have this display, reverse-engineering the values, and tuning the power-on timings amongst other things just right. TLDR; getting a 4K AMOLED eDP display running on non-mainline Linux was a heck of a journey, so read this if you’re interested (coming soon).
ATNA33TP11 working with display evaluation board V2 short
Powertrain
The cells had to be 6mm thin and four packs lined up should take roughly half of the entire chassis volume. Chinese manufacturers don’t stock batteries readily, and shipping them to the US would be a pain. Thus, I looked on the American side. I stumbled upon with these batteries from AA Portable Power Corp. or batteryspace.com. or Powerizer. Doing the power calculations, we get: 4.250Ah 3.7V 4S = 62.9 Wh with max 8A (so max 134.4W discharge)! Solid.
The total voltage is 4.2V (peak) * 4S = 16.8V. The system’s designed for up to 20V USB-C (AKA 100W) and passed into the BQ25713 charging IC. The batteries are balanced with the BQ77915 to ensure safe charging, and the power is tracked with an LTC2943 to calculate a state-of-charge percentage. I popped in an ESP32-S3 module as the controller for everything, and set it to production.
After writing drivers and sitting on the undecipherable datasheets for days, I had the batteries charging. I successfully load tested it to around 5A and powered the full system. There’s still a lot of quiesce