Difference between revisions of "PineCone"

From PINE64
Jump to navigation Jump to search
(Add article "Apache NuttX OS on RISC-V BL602 and BL604")
(Add article "Build an IoT App with Zig and LoRaWAN")
 
(17 intermediate revisions by 2 users not shown)
Line 82: Line 82:
[[File:NUT-12S_module-front.jpg|200px]][[File:NUT-12S_module-back.jpg|200px]]
[[File:NUT-12S_module-front.jpg|200px]][[File:NUT-12S_module-back.jpg|200px]]
* [https://files.pine64.org/doc/Pinenut/NUT-12S%20GPIO%20Definition%20ver%201.0.pdf Pinenut-12S GPIO Definition ver 1.0]
* [https://files.pine64.org/doc/Pinenut/NUT-12S%20GPIO%20Definition%20ver%201.0.pdf Pinenut-12S GPIO Definition ver 1.0]
 
* Onboard LED is connected to IO0


== Datasheets for components and peripherals ==
== Datasheets for components and peripherals ==
Line 158: Line 158:
* [https://lupyuen.github.io/articles/prometheus Monitor IoT Devices in The Things Network with Prometheus and Grafana by Lup Yuen]
* [https://lupyuen.github.io/articles/prometheus Monitor IoT Devices in The Things Network with Prometheus and Grafana by Lup Yuen]
* [https://lupyuen.github.io/articles/nuttx Apache NuttX OS on RISC-V BL602 and BL604 by Lup Yuen]
* [https://lupyuen.github.io/articles/nuttx Apache NuttX OS on RISC-V BL602 and BL604 by Lup Yuen]
* [https://lupyuen.github.io/articles/spi2 SPI on Apache NuttX OS by Lup Yuen]
* [https://lupyuen.github.io/articles/sx1262 LoRa SX1262 on Apache NuttX OS by Lup Yuen]
* [https://lupyuen.github.io/articles/lorawan3 LoRaWAN on Apache NuttX OS by Lup Yuen]
* [https://lupyuen.github.io/articles/rust2 Rust on Apache NuttX OS by Lup Yuen]
* [https://lupyuen.github.io/articles/auto Auto Flash and Test NuttX on RISC-V BL602 by Lup Yuen]
* [https://lupyuen.github.io/articles/loader BL602 EFlash Loader: Reverse Engineered with Ghidra by Lup Yuen]
* [https://lupyuen.github.io/articles/ikea Connect IKEA Air Quality Sensor to Apache NuttX OS by Lup Yuen]
* [https://lupyuen.github.io/articles/bme280 Apache NuttX Driver for BME280 Sensor: Ported from Zephyr OS by Lup Yuen]
* [https://lupyuen.github.io/articles/rusti2c Rust talks I2C on Apache NuttX RTOS by Lup Yuen]
* [https://lupyuen.github.io/articles/st7789 ST7789 Display with LVGL Graphics on 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://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]


[[Category:Nutcracker]]
[[Category:Nutcracker]]

Latest revision as of 05:13, 14 June 2022

PineCone BL602 EVB (Evaluation Board)

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.

BL602 Specifications

  • CPU: 32-bit RV32IMAFC RISC-V “SiFive E24 Core”
  • 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)

BL602 Block Diagram.jpg

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

PineCone BL602 EVB information and schematics

  • Approximate dimensions: 26mm x 43mm
  • Board layout:

PADI-II EVB.png

  • PineCone BL602 EVB schematic ver 1.1
    • Note: In 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

Pinenut-01S PCB-Front.pngPinenut-01S PCB-Back.png

Pinenut-12S Module information

NUT-12S module-front.jpgNUT-12S module-back.jpg

Datasheets for components and peripherals

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 Python Flash Loader is a new (Dec 20) flash loader by the makers of the chip.
  • Bouffalo's image build smooshes code and adds headers for downloads.
  • 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

Articles and Blogs