Difference between revisions of "PineCone"
(Add article "NuttX Touch Panel Driver for PineDio Stack BL604") |
m (Removes lupyuens reverse engineering blog post, as it contains tainted code.) |
||
(23 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
The '''PineCone''' is a BL602 evaluation board, which was developed with the goal to challenge the open source community to achieve blob-free and free and open source WiFi and Bluetooth, see the [https://www.pine64.org/2020/10/28/nutcracker-challenge-blob-free-wifi-ble/ Nutcracker Challenge]. | The '''PineCone''' is a BL602 evaluation board, which was developed with the goal to challenge the open source community to achieve blob-free and free and open source WiFi and Bluetooth, see the [https://www.pine64.org/2020/10/28/nutcracker-challenge-blob-free-wifi-ble/ Nutcracker Challenge]. | ||
== Challenge == | |||
The goal of the challenge is to achieve a blob-free BL602 for the open source community to achieve a blob-free FOSS Bluetooth and WiFi on PINE64 devices, see [https://www.pine64.org/2020/10/28/nutcracker-challenge-blob-free-wifi-ble/ Nutcracker Challenge: Blob-Free WiFi & BLE]. | |||
== BL602 Specifications == | == BL602 Specifications == | ||
[[File:BL602_Block_Diagram.jpg| | [[File:BL602_Block_Diagram.jpg|thumb|right]] | ||
CPU: | |||
* 32-bit RV32IMAFC RISC-V “SiFive E24 Core” | |||
* [https://www.sifive.com/cores/e24 SiFive E24 Core information] | |||
Memory: | |||
* 128KB ROM | |||
* 276KB SRAM | |||
* 1Kb eFuse | |||
* 2MB Embedded Flash | |||
Security: | |||
* Secure boot | |||
* Secure debug | |||
* AES 128/192/256 | |||
* SHA-1/224/256 | |||
* TRNG (True Random Number Generator) | |||
* PKA (Public Key Accelerator) | |||
Wireless: | |||
* Wi-Fi 802.11 b/g/n | |||
* Bluetooth® Low Energy 5.0 | |||
* Wi-Fi Fast connection with BLE assistance | |||
* Wi-Fi and BLE coexistence | |||
* Wi-Fi Security WPS/WEP/WPA/WPA2/WPA3 | |||
* STA, SoftAP and sniffer modes | |||
* Multi-Cloud connectivity | |||
* 2.4 GHz RF transceiver | |||
* Integrated RF balun, PA/LNA | |||
Package Type: | |||
* 32 pin QFN 4mm x 4mm | |||
JTAG support: | |||
* See below for BL602 impact | |||
== JTAG == | == JTAG == | ||
{| class="wikitable floatright" | {| class="wikitable floatright" | ||
| | !colspan="2" | Default JTAG pins | ||
|- | |- | ||
| GPIO Pin || JTAG Pin | | GPIO Pin || JTAG Pin | ||
Line 59: | Line 77: | ||
== Pine64 USB JTAG Adapter information and schematics == | == Pine64 USB JTAG Adapter information and schematics == | ||
* [https://files.pine64.org/doc/Pinenut/PINE64%20USB%20JTAG%20Adapter%20Schematic-20201215.pdf PINE64 USB JTAG Adapter | * [https://files.pine64.org/doc/Pinenut/PINE64%20USB%20JTAG%20Adapter%20Schematic-20201215.pdf PINE64 USB JTAG Adapter Schematic-20201215.pdf (pine64_ft232hl_board-2020-12-14)] | ||
* [[:File:PINE64_USB_JTAG_Adapter_Schematic_ver_1.0a-20210109.pdf|PINE64 USB JTAG Adapter schematic 20210109 1.0a]] | * [[:File:PINE64_USB_JTAG_Adapter_Schematic_ver_1.0a-20210109.pdf|PINE64 USB JTAG Adapter schematic 20210109 1.0a]] | ||
== PineCone BL602 EVB information and schematics == | == PineCone BL602 EVB information and schematics == | ||
[[File:PADI-II_EVB.png|thumb|right|120px|The board layout]] | |||
[[File:PADI-II_EVB.png]] | |||
The approximate dimensions are 26mm x 43mm. | |||
Schematics: [https://files.pine64.org/doc/Pinenut/Pine64%20BL602%20EVB%20Schematic%20ver%201.1.pdf PineCone BL602 EVB schematic ver 1.1] | |||
Note: In the PineCone revision 1.1 ("BL62B_EVB V1.1" silkscreened on back of board), CC1 and CC2 share one 5.1KΩ resistor. This means the board will fail to power when you use an e-marked USB-C cable like the one that comes with Apple chargers. See [https://medium.com/@leung.benson/how-to-design-a-proper-usb-c-power-sink-hint-not-the-way-raspberry-pi-4-did-it-f470d7a5910 this article] for details of why this happens. The next schematic design will give each line its own 5.1KΩ resistor as per the USB-C specification. | |||
The board uses a CH340 Serial/USB adapter. This chip is commonly used in Arduino-class development boards. It is a full speed (12Mbps) USB interface and has vendor ID 0x1a86 with product ID 0x7523. | |||
The GPIO pins (11, 12, 14, 17) plus the nearby RESET, POWER, and GND pins are all located on one side of the board, on J1 to provide JTAG connection. | |||
== Pinenut-01S Module information and schematics == | == Pinenut-01S Module information and schematics == | ||
<gallery> | |||
File:Pinenut-01S_PCB-Front.png|200px|The PCB front | |||
File:Pinenut-01S_PCB-Back.png|200px|The PCB back | |||
</gallery> | |||
Schematics and GPIO definitions: | |||
* [https://files.pine64.org/doc/Pinenut/Pinenut-01S%20V1.01%20SCH.pdf Pinenut-01S schematic ver 1.01] | * [https://files.pine64.org/doc/Pinenut/Pinenut-01S%20V1.01%20SCH.pdf Pinenut-01S schematic ver 1.01] | ||
* [https://wiki.pine64.org/images/6/6b/PineNut-01S_v1.01_KiCad.zip PineNut-01S KiCad schematic ver 1.01] | * [https://wiki.pine64.org/images/6/6b/PineNut-01S_v1.01_KiCad.zip PineNut-01S KiCad schematic ver 1.01] | ||
* [https://files.pine64.org/doc/Pinenut/NUT-01S%20GPIO%20Definition%20ver%201.0.pdf Pinenut-01S GPIO Definition ver 1.0] | * [https://files.pine64.org/doc/Pinenut/NUT-01S%20GPIO%20Definition%20ver%201.0.pdf Pinenut-01S GPIO Definition ver 1.0] | ||
* [https://files.pine64.org/doc/Pinenut/USB%20Adapter%20for%20Pinenut-01S%20Schematic%20V1.0.pdf USB Programmer adapter for Pinenut-01S schematic ver 1.0] | * [https://files.pine64.org/doc/Pinenut/USB%20Adapter%20for%20Pinenut-01S%20Schematic%20V1.0.pdf USB Programmer adapter for Pinenut-01S schematic ver 1.0] | ||
The default firmware runs the UART at 2000000 bps. It will accept input whilst regularly outputting: | |||
proc_hellow_entry: RISC-V rv32imafc | |||
cur key status:1 | |||
== Pinenut-12S Module information == | == Pinenut-12S Module information == | ||
<gallery> | |||
File:NUT-12S_module-front.jpg|200px|The Pinenut-12S Module front | |||
File:NUT-12S_module-back.jpg|200px|The Pinenut-12S Module back | |||
</gallery> | |||
GPIO definition: [https://files.pine64.org/doc/Pinenut/NUT-12S%20GPIO%20Definition%20ver%201.0.pdf Pinenut-12S GPIO Definition ver 1.0] | |||
The onboard LED is connected to IO0 | |||
== Datasheets for components and peripherals == | == Datasheets for components and peripherals == | ||
Bouffalo BL-602 SoC information: | |||
* [https://github.com/bouffalolab/bl_docs Bouffalo Lab's official bl_docs repository]: should always contain the latest SoC documentation available, in PDF, HTML, and reStructuredText source forms. | |||
* [https://github.com/pine64/bl602-docs/tree/main/mirrored PINE64's bl602-docs repository]: contains an archive of all historical datasheets and reference manual PDFs but may lag behind Bouffalo's official repository. If you notice that it is, please submit a pull request! | |||
USB/Serial adapter: | |||
* [https://cdn.sparkfun.com/datasheets/Dev/Arduino/Other/CH340DS1.PDF CH340 serial converter] | |||
== Misc notes == | == Misc notes == | ||
Planned to be available in at least three form factors: | Planned to be available in at least three form factors: | ||
* NUT-01S -> ESP-01S | * NUT-01S -> ESP-01S | ||
Line 98: | Line 143: | ||
== Loading code == | == Loading code == | ||
To load code, you must move the jumper to the position closest to the edge, press reset, load the code, move the jumper back toward the center of the board, and press reset again. | To load code, you must move the jumper to the position closest to the edge, press reset, load the code, move the jumper back toward the center of the board, and press reset again. | ||
There are currently a number of loaders in progress, each with differing degrees of completeness and success on various operating systems. | There are currently a number of loaders in progress, each with differing degrees of completeness and success on various operating systems. | ||
* In the build tree, there is BLFlashCube for Windows, which is a proprietary GUI for flashing images. Linux and macOS binaries are available via [https://dev.bouffalolab.com/download Bouffalo Lab's developer portal]. | * In the build tree, there is BLFlashCube for Windows, which is a proprietary GUI for flashing images. Linux and macOS binaries are available via [https://dev.bouffalolab.com/download Bouffalo Lab's developer portal]. | ||
* [https://github.com/stschake/bl60x-flash bl60x-flash] is in Python and has been reported successful on MacOS catalina (10.15.6) by Punnerud and madushan1000. | * [https://github.com/stschake/bl60x-flash bl60x-flash] is in Python and has been reported successful on MacOS catalina (10.15.6) by Punnerud and madushan1000. | ||
* [https://github.com/bouffalolab/BLOpenFlasher BLOpenFlasher] is a WIP, written in go, by Bouffalo Labs to provide source for a flash utility. | * [https://github.com/bouffalolab/BLOpenFlasher BLOpenFlasher] is a WIP, written in go, by Bouffalo Labs to provide source for a flash utility. | ||
* [https://github.com/renzenicolai/bl602tool bl602tool] is a Python utility in development. | * [https://github.com/renzenicolai/bl602tool bl602tool] is a Python utility in development. | ||
* [https://pypi.org/project/bflb-mcu-tool/ Bouffalo's MCU tool] (Mar 2021) Python image tool replaced both of the above. Now combined with eflash loader, deals with partitions, DTS, signing, fuses etc. | * [https://pypi.org/project/bflb-mcu-tool/ Bouffalo's MCU tool] (Mar 2021) Python image tool replaced both of the above. Now combined with eflash loader, deals with partitions, DTS, signing, fuses etc. | ||
* [https://github.com/spacemeowx2/blflash blflash serial flasher] BL602 serial flasher, inspired by BLOpenFlasher | * [https://github.com/spacemeowx2/blflash blflash serial flasher] BL602 serial flasher, inspired by BLOpenFlasher | ||
== Development efforts == | == Development efforts == | ||
* [https://github.com/pine64/bl_iot_sdk PineCone BL602 GitHub Page (PINE64 fork)] has compilers, linkers, and all the code to build on Windows, Linux (x86_64), and MacOS. | * [https://github.com/pine64/bl_iot_sdk PineCone BL602 GitHub Page (PINE64 fork)] has compilers, linkers, and all the code to build on Windows, Linux (x86_64), and MacOS. | ||
* [https://github.com/bouffalolab/bl_iot_sdk Bouffalo Lab GitHub Page] | * [https://github.com/bouffalolab/bl_iot_sdk Bouffalo Lab GitHub Page] | ||
Line 123: | Line 169: | ||
== Articles and Blogs == | == Articles and Blogs == | ||
* [https://lupyuen.github.io/articles/pinecone Quick Peek of PineCone BL602 RISC-V Evaluation Board by Lup Yuen] | * [https://lupyuen.github.io/articles/pinecone Quick Peek of PineCone BL602 RISC-V Evaluation Board by Lup Yuen] | ||
* [https://maero.dk/bl602-firmware-image-format/ Documenting the BouffaloLab BL602 firmware image format by MK] | * [https://maero.dk/bl602-firmware-image-format/ Documenting the BouffaloLab BL602 firmware image format by MK] | ||
Line 145: | Line 192: | ||
* [https://lupyuen.github.io/articles/boot BL602 Bootloader by Lup Yuen] | * [https://lupyuen.github.io/articles/boot BL602 Bootloader by Lup Yuen] | ||
* [https://lupyuen.github.io/articles/tflite Machine Learning on RISC-V BL602 with TensorFlow Lite by Lup Yuen] | * [https://lupyuen.github.io/articles/tflite Machine Learning on RISC-V BL602 with TensorFlow Lite by Lup Yuen] | ||
* [https://lupyuen.github.io/articles/adc Rust on RISC-V BL602: Is It Sunny? by Lup Yuen] | * [https://lupyuen.github.io/articles/adc Rust on RISC-V BL602: Is It Sunny? by Lup Yuen] | ||
* [https://lupyuen.github.io/articles/rustsim Rust on RISC-V BL602: Simulated with WebAssembly by Lup Yuen] | * [https://lupyuen.github.io/articles/rustsim Rust on RISC-V BL602: Simulated with WebAssembly by Lup Yuen] | ||
Line 170: | Line 216: | ||
* [https://lupyuen.github.io/articles/pinedio2 PineDio Stack BL604 runs Apache NuttX RTOS by Lup Yuen] | * [https://lupyuen.github.io/articles/pinedio2 PineDio Stack BL604 runs Apache NuttX RTOS by Lup Yuen] | ||
* [https://lupyuen.github.io/articles/touch NuttX Touch Panel Driver for PineDio Stack BL604 by Lup Yuen] | * [https://lupyuen.github.io/articles/touch NuttX Touch Panel Driver for PineDio Stack BL604 by Lup Yuen] | ||
* [https://www.robertlipe.com/buttons-on-bl602-nuttx/ Buttons on BL602 NuttX] | |||
* [https://lupyuen.github.io/articles/expander NuttX GPIO Expander for PineDio Stack BL604 by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/auto2 (Mostly) Automated Testing of Apache NuttX RTOS on PineDio Stack BL604 RISC-V Board by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/zig Zig on RISC-V BL602: Quick Peek with Apache NuttX RTOS by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/iot Build an IoT App with Zig and LoRaWAN by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/lvgl Build an LVGL Touchscreen App with Zig by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/sensor Read NuttX Sensor Data with Zig by Lup Yuen] | |||
* [https://lupyuen.github.io/articles/visual Visual Programming with Zig and NuttX Sensors by Lup Yuen] | |||
* [https://youtu.be/1O5Eb8bKxXA Visual Programming with Zig and Apache NuttX Sensors (Video)] | |||
[[Category: | [[Category:PineCone]] |
Latest revision as of 00:59, 11 May 2023
The PineCone is a BL602 evaluation board, which was developed with the goal to challenge the open source community to achieve blob-free and free and open source WiFi and Bluetooth, see the Nutcracker Challenge.
Challenge
The goal of the challenge is to achieve a blob-free BL602 for the open source community to achieve a blob-free FOSS Bluetooth and WiFi on PINE64 devices, see Nutcracker Challenge: Blob-Free WiFi & BLE.
BL602 Specifications
CPU:
- 32-bit RV32IMAFC RISC-V “SiFive E24 Core”
- SiFive E24 Core information
Memory:
- 128KB ROM
- 276KB SRAM
- 1Kb eFuse
- 2MB Embedded Flash
Security:
- Secure boot
- Secure debug
- AES 128/192/256
- SHA-1/224/256
- TRNG (True Random Number Generator)
- PKA (Public Key Accelerator)
Wireless:
- Wi-Fi 802.11 b/g/n
- Bluetooth® Low Energy 5.0
- Wi-Fi Fast connection with BLE assistance
- Wi-Fi and BLE coexistence
- Wi-Fi Security WPS/WEP/WPA/WPA2/WPA3
- STA, SoftAP and sniffer modes
- Multi-Cloud connectivity
- 2.4 GHz RF transceiver
- Integrated RF balun, PA/LNA
Package Type:
- 32 pin QFN 4mm x 4mm
JTAG support:
- See below for BL602 impact
JTAG
Default JTAG pins | |
---|---|
GPIO Pin | JTAG Pin |
GPIO17 | TDI |
GPIO11 | TDO |
GPIO12 | TMS |
GPIO14 | TCK |
BL602 multiplexes four GPIO pins to provide the familiar JTAG lines. See the accompanying table for the default pin mappings.
These are the default JTAG pins in use after a cold boot. However, many pieces of software, including the demo that's installed by default on new PineCones, remap these pins to other functions. You cannot use the default wiring for JTAG while such software is running. This issue is especially prevalent on the PineCone because three of the default JTAG pins are connected to the onboard RGB LED. Nothing about the LED itself interferes with JTAG, but any program that uses the LED will necessarily remap some of the default JTAG pins to be GPIO.
The MaskROM download mode that the BL602 enters when you tie GPIO8 high does not remap the default JTAG pins, and so you can and should use that mode while checking basic functionality of your JTAG adapter.
Note that, just as software can remap the default JTAG pins to be something else, it can also remap other pins to be JTAG. Control over this is quite granular, with 5-6 candidate pins for each individual JTAG signal that can be mapped independently of one another. LEE Lup Yuen has written some sample code showing how to remap the JTAG pins so that your software can use the LED without giving up support for debugging.
Pine64 USB JTAG Adapter information and schematics
- PINE64 USB JTAG Adapter Schematic-20201215.pdf (pine64_ft232hl_board-2020-12-14)
- PINE64 USB JTAG Adapter schematic 20210109 1.0a
PineCone BL602 EVB information and schematics
The approximate dimensions are 26mm x 43mm.
Schematics: PineCone BL602 EVB schematic ver 1.1
Note: In the PineCone revision 1.1 ("BL62B_EVB V1.1" silkscreened on back of board), CC1 and CC2 share one 5.1KΩ resistor. This means the board will fail to power when you use an e-marked USB-C cable like the one that comes with Apple chargers. See this article for details of why this happens. The next schematic design will give each line its own 5.1KΩ resistor as per the USB-C specification.
The board uses a CH340 Serial/USB adapter. This chip is commonly used in Arduino-class development boards. It is a full speed (12Mbps) USB interface and has vendor ID 0x1a86 with product ID 0x7523.
The GPIO pins (11, 12, 14, 17) plus the nearby RESET, POWER, and GND pins are all located on one side of the board, on J1 to provide JTAG connection.
Pinenut-01S Module information and schematics
Schematics and GPIO definitions:
- Pinenut-01S schematic ver 1.01
- PineNut-01S KiCad schematic ver 1.01
- Pinenut-01S GPIO Definition ver 1.0
- USB Programmer adapter for Pinenut-01S schematic ver 1.0
The default firmware runs the UART at 2000000 bps. It will accept input whilst regularly outputting:
proc_hellow_entry: RISC-V rv32imafc cur key status:1
Pinenut-12S Module information
GPIO definition: Pinenut-12S GPIO Definition ver 1.0
The onboard LED is connected to IO0
Datasheets for components and peripherals
Bouffalo BL-602 SoC information:
- Bouffalo Lab's official bl_docs repository: should always contain the latest SoC documentation available, in PDF, HTML, and reStructuredText source forms.
- PINE64's bl602-docs repository: contains an archive of all historical datasheets and reference manual PDFs but may lag behind Bouffalo's official repository. If you notice that it is, please submit a pull request!
USB/Serial adapter:
Misc notes
Planned to be available in at least three form factors:
- NUT-01S -> ESP-01S
- NUT-12S -> ESP-12S
- NUT-15 -> RTL8723/AMPAK
Loading code
To load code, you must move the jumper to the position closest to the edge, press reset, load the code, move the jumper back toward the center of the board, and press reset again.
There are currently a number of loaders in progress, each with differing degrees of completeness and success on various operating systems.
- In the build tree, there is BLFlashCube for Windows, which is a proprietary GUI for flashing images. Linux and macOS binaries are available via Bouffalo Lab's developer portal.
- bl60x-flash is in Python and has been reported successful on MacOS catalina (10.15.6) by Punnerud and madushan1000.
- BLOpenFlasher is a WIP, written in go, by Bouffalo Labs to provide source for a flash utility.
- bl602tool is a Python utility in development.
- Bouffalo's MCU tool (Mar 2021) Python image tool replaced both of the above. Now combined with eflash loader, deals with partitions, DTS, signing, fuses etc.
- blflash serial flasher BL602 serial flasher, inspired by BLOpenFlasher
Development efforts
- PineCone BL602 GitHub Page (PINE64 fork) has compilers, linkers, and all the code to build on Windows, Linux (x86_64), and MacOS.
- Bouffalo Lab GitHub Page
- BL602 Developer organize documentation GitHub Page
- BL602 Developer organize tool GitHub Page
- Programming tool for Bouffalo Labs BL602/BL604 chips
- BL602 reverse engineering working group
- Linux kernel module
- BL602 Documentation
- BL602 serial flasher
- Awesome Bouffalo
Articles and Blogs
- Quick Peek of PineCone BL602 RISC-V Evaluation Board by Lup Yuen
- Documenting the BouffaloLab BL602 firmware image format by MK
- Connect PineCone BL602 to OpenOCD by Lup Yuen
- Debug Rust on PineCone BL602 with VSCode and GDB by Lup Yuen
- Porting Mynewt to PineCone BL602 by Lup Yuen
- Flashing Firmware to PineCone BL602 by Lup Yuen
- Control PineCone BL602 RGB LED with GPIO and PWM by Lup Yuen
- Mynewt GPIO ported to PineCone BL602 RISC-V Board by Lup Yuen
- PineCone BL602 talks to I2C Sensors by Lup Yuen
- PineCone BL602 talks SPI too! by Lup Yuen
- PineCone BL602 Blasting Pixels to ST7789 Display with LVGL Library by Lup Yuen
- PineCone BL602 Talks UART to Grove E-Ink Display by Lup Yuen
- The RISC-V BL602 Book by Lup Yuen
- Connect PineCone BL602 to LoRa Transceiver by Lup Yuen
- RAKwireless WisBlock talks LoRa with PineCone BL602 RISC-V Board by Lup Yuen
- PineCone BL602 RISC-V Board Receives LoRa Packets by Lup Yuen
- Run Rust RISC-V Firmware with BL602 IoT SDK by Lup Yuen
- PineCone BL602 Talks LoRaWAN by Lup Yuen
- uLisp and Blockly on PineCone BL602 RISC-V Board by Lup Yuen
- Simulate RISC-V BL602 with WebAssembly, uLisp and Blockly by Lup Yuen
- BL602 Bootloader by Lup Yuen
- Machine Learning on RISC-V BL602 with TensorFlow Lite by Lup Yuen
- Rust on RISC-V BL602: Is It Sunny? by Lup Yuen
- Rust on RISC-V BL602: Simulated with WebAssembly by Lup Yuen
- PineDio Stack BL604 RISC-V Board: Testing The Prototype by Lup Yuen
- Rust on RISC-V BL602: Rhai Scripting by Lup Yuen
- LoRaWAN on PineDio Stack BL604 RISC-V Board by Lup Yuen
- The Things Network on PineDio Stack BL604 RISC-V Board by Lup Yuen
- Encode Sensor Data with CBOR on BL602 by Lup Yuen
- IoT Digital Twin with Roblox and The Things Network by Lup Yuen
- Internal Temperature Sensor on BL602 by Lup Yuen
- CBOR Payload Formatter for The Things Network by Lup Yuen
- Monitor IoT Devices in The Things Network with Prometheus and Grafana by Lup Yuen
- Apache NuttX OS on RISC-V BL602 and BL604 by Lup Yuen
- SPI on Apache NuttX OS by Lup Yuen
- LoRa SX1262 on Apache NuttX OS by Lup Yuen
- LoRaWAN on Apache NuttX OS by Lup Yuen
- Rust on Apache NuttX OS by Lup Yuen
- Auto Flash and Test NuttX on RISC-V BL602 by Lup Yuen
- BL602 EFlash Loader: Reverse Engineered with Ghidra by Lup Yuen
- Connect IKEA Air Quality Sensor to Apache NuttX OS by Lup Yuen
- Apache NuttX Driver for BME280 Sensor: Ported from Zephyr OS by Lup Yuen
- Rust talks I2C on Apache NuttX RTOS by Lup Yuen
- ST7789 Display with LVGL Graphics on Apache NuttX RTOS by Lup Yuen
- PineDio Stack BL604 runs Apache NuttX RTOS by Lup Yuen
- NuttX Touch Panel Driver for PineDio Stack BL604 by Lup Yuen
- Buttons on BL602 NuttX
- NuttX GPIO Expander for PineDio Stack BL604 by Lup Yuen
- (Mostly) Automated Testing of Apache NuttX RTOS on PineDio Stack BL604 RISC-V Board by Lup Yuen
- Zig on RISC-V BL602: Quick Peek with Apache NuttX RTOS by Lup Yuen
- Build an IoT App with Zig and LoRaWAN by Lup Yuen
- Build an LVGL Touchscreen App with Zig by Lup Yuen
- Read NuttX Sensor Data with Zig by Lup Yuen
- Visual Programming with Zig and NuttX Sensors by Lup Yuen
- Visual Programming with Zig and Apache NuttX Sensors (Video)