Difference between revisions of "PineCone"

From PINE64
Jump to navigation Jump to search
(71 intermediate revisions by 11 users not shown)
Line 1: Line 1:
PAGE UNDER CONSTRUCTION, INFO SUBJECT TO CHANGE
{{Note|Page under construction, information subject to change.}}
 
[[File:Pine64_BL602_EVB_photo-3-small.jpg|thumb|PineCone BL602 EVB (Evaluation Board)]]
* BL-602 EVB (Evaluation Board):
 
[[File:Pine64_BL602_EVB_photo-3-small.jpg|800px]]
 
 
[[File:Pine64_BL602_EVB_photo-1-small.jpg|800px]]
 


== BL602 Specifications ==
== BL602 Specifications ==
Line 16: Line 9:
** 276KB SRAM
** 276KB SRAM
** 1Kb eFuse
** 1Kb eFuse
** 4MB Embedded Flash
** 2MB Embedded Flash
* '''Security:'''
* '''Security:'''
** Secure boot
** Secure boot
** Secure debug
** Secure debug
** XIP QSPI On-The-Fly AES Decryption (OTFAD)
** AES 128/192/256
** AES 128/192/256
** SHA-1/224/256
** SHA-1/224/256
Line 37: Line 29:
* '''Package Type:'''
* '''Package Type:'''
** 32 pin QFN 4mm x 4mm
** 32 pin QFN 4mm x 4mm
* JTAG support (See below for BL602 impact)
[[File:BL602_Block_Diagram.jpg|600px]]
== JTAG ==
{| class="wikitable floatright"
|+ 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.


== BL602 EVB information and schematics ==
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 [https://lupyuen.github.io/articles/openocd#free-the-led-from-jtag-port sample code] showing how to remap the JTAG pins so that your software can use the LED without giving up support for debugging.


* BL602 EVB schematic:
== Pine64 USB JTAG Adapter information and schematics ==
* [https://files.pine64.org/doc/Pinenut/PINE64%20USB%20JTAG%20Adapter%20Schematic-20201215.pdf PINE64 USB JTAG Adapter schematic 20202018 1.0]
* [[: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 ==
* Approximate dimensions: 26mm x 43mm
* Board layout:
[[File:PADI-II_EVB.png]]
[[File:PADI-II_EVB.png]]
** [https://files.pine64.org/doc/padi-ii/Pine64%20BL602%20EVB%20Schematic%20ver%201.1.pdf PineCone BL602 EVB schematic ver 1.1]
* [https://files.pine64.org/doc/Pinenut/Pine64%20BL602%20EVB%20Schematic%20ver%201.1.pdf 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 [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 ==
[[File:Pinenut-01S_PCB-Front.png|225px]][[File:Pinenut-01S_PCB-Back.png|225px]]
* [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://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]
* UART is apparently at 115200 baud by default. Default firmware seems to output something, but it's not text.
 
== Pinenut-12S Module information ==
[[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]




== Datasheets for components and peripherals ==
== Datasheets for components and peripherals ==
* GigaDevice RISC-V SoC information:
* Bouffalo BL-602 SoC information:
** [https://files.pine64.org/doc/datasheet/pinecil/GD32VF103_Datasheet_Rev%201.1.pdf GigaDevice RISC-V GD32VF103TB SoC Datasheet V1.1]
** [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://files.pine64.org/doc/datasheet/pinecil/GD32VF103_User_Manual_EN_V1.2.pdf GigaDevice RISC-V GD32VF103TB SoC Usermanual V1.2]
** [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!
* Display Module information:
* USB/Serial adapter:
** [https://files.pine64.org/doc/datasheet/pinecil/1810010328_UG-Univision-Semicon-UG-9616TSWCG02_C88335.pdf QUG 9616TSWCG02 Display Module Datasheet]
** [https://cdn.sparkfun.com/datasheets/Dev/Arduino/Other/CH340DS1.PDF CH340 serial converter]
* USB Type-C PD Controller information:
** [https://files.pine64.org/doc/datasheet/pinecil/FUSB302-D.PDF ON Semiconductor FUSB302 USB Type-C PD Controller Datasheet]
* Sensor information:
** [https://files.pine64.org/doc/datasheet/pinecil/BMA223-Bosch.pdf Bosch BMA223 Acceleration Sensor Datasheet]
** [https://files.pine64.org/doc/datasheet/pinecil/si7210-datasheet.pdf Silicon Lab Si7210 Hall-Effect Magnetic Position Sensor Datasheet]
** [https://files.pine64.org/doc/datasheet/pinecil/TMP35_36_37.pdf Analog Device TMP36 Temparature Sensor Datasheet]
* Power Regulator information:
** [https://files.pine64.org/doc/datasheet/pinecil/RT7272B-05.pdf Ricktek RT7272B 3A Switching Power Regulator Datasheet - on mainboard]
** [https://files.pine64.org/doc/datasheet/pinecil/LP6498B6F.pdf LowPowerSemi LP6498B6F 1.2A Switching Power Regulator Datasheet - on breakout board]
* Power MOSFET Switch information:
** [https://files.pine64.org/doc/datasheet/pinecil/Changjiang-Electronics-Tech-CJ-CJQ7328.pdf Chang Jiang CJQ7328 8A MOSFET Datasheet]
* OP Amp information:
** [https://files.pine64.org/doc/datasheet/pinecil/SGM8557.pdf SGMicro SGM8557-1 Low Noise OP Amp Datasheet]


== 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 [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/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://pypi.org/project/bflb-eflash-loader/ Bouffalo's Python Flash Loader] is a new (Dec 20) flash loader by the makers of the chip.
* <del>[https://pypi.org/project/bflb-image-build/ Bouffalo's image build] smooshes code and adds headers for downloads.</del>
* [https://pypi.org/project/bflb-mcu-tool/ Bouffalo's MCU tool] (Mar 2021) image tool replaced 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


== 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/bouffalolab/bl_iot_sdk Bouffalo Lab GitHub Page]
* [https://github.com/renzenicolai/bl602-docs/ BL602 Developer organize documentation GitHub Page]
* [https://github.com/renzenicolai/bl602tool BL602 Developer organize tool GitHub Page]
* [https://github.com/stschake/bl60x-flash Programming tool for Bouffalo Labs BL602/BL604 chips]
* [https://github.com/pine64/bl602-re BL602 reverse engineering working group]
* [https://github.com/pine64/bl602-sdio-linux Linux kernel module]
* [https://github.com/tchebb/bl602-docs BL602 Documentation]
* [https://github.com/spacemeowx2/blflash BL602 serial flasher]
* [https://github.com/mkroman/awesome-bouffalo#feature-matrix Awesome Bouffalo]


{| class="wikitable"
== Articles and Blogs ==
!
* [https://lupyuen.github.io/articles/pinecone Quick Peek of PineCone BL602 RISC-V Evaluation Board by Lup Yuen]
! Project Homepage
* [https://maero.dk/bl602-firmware-image-format/ Documenting the BouffaloLab BL602 firmware image format by MK]
! Project Source
* [https://lupyuen.github.io/articles/openocd Connect PineCone BL602 to OpenOCD by Lup Yuen]
! Implementations
* [https://lupyuen.github.io/articles/debug Debug Rust on PineCone BL602 with VSCode and GDB by Lup Yuen]
 
* [https://lupyuen.github.io/articles/mynewt Porting Mynewt to PineCone BL602 by Lup Yuen]
|-
* [https://lupyuen.github.io/articles/flash Flashing Firmware to PineCone BL602 by Lup Yuen]
! Ralimtek
* [https://lupyuen.github.io/articles/led Control PineCone BL602 RGB LED with GPIO and PWM by Lup Yuen]
| https://ralimtek.com
* [https://lupyuen.github.io/articles/gpio Mynewt GPIO ported to PineCone BL602 RISC-V Board by Lup Yuen]
| https://www.gitmemory.com/Ralim
* [https://lupyuen.github.io/articles/i2c PineCone BL602 talks to I2C Sensors by Lup Yuen]
|}
* [https://lupyuen.github.io/articles/spi PineCone BL602 talks SPI too! by Lup Yuen]
* [https://lupyuen.github.io/articles/display PineCone BL602 Blasting Pixels to ST7789 Display with LVGL Library by Lup Yuen]
* [https://lupyuen.github.io/articles/uart PineCone BL602 Talks UART to Grove E-Ink Display by Lup Yuen]
* [https://lupyuen.github.io/articles/book The RISC-V BL602 Book by Lup Yuen]
* [https://lupyuen.github.io/articles/lora Connect PineCone BL602 to LoRa Transceiver by Lup Yuen]
* [https://lupyuen.github.io/articles/wisblock RAKwireless WisBlock talks LoRa with PineCone BL602 RISC-V Board by Lup Yuen]
* [https://lupyuen.github.io/articles/lora2 PineCone BL602 RISC-V Board Receives LoRa Packets by Lup Yuen]
* [https://lupyuen.github.io/articles/rust Run Rust RISC-V Firmware with BL602 IoT SDK by Lup Yuen]
* [https://lupyuen.github.io/articles/lorawan PineCone BL602 Talks LoRaWAN by Lup Yuen]
* [https://lupyuen.github.io/articles/lisp uLisp and Blockly on PineCone BL602 RISC-V Board by Lup Yuen]
* [https://lupyuen.github.io/articles/wasm Simulate RISC-V BL602 with WebAssembly, uLisp and Blockly by Lup Yuen]
* [https://lupyuen.github.io/articles/boot BL602 Bootloader by Lup Yuen]


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

Revision as of 19:00, 20 June 2021

Page under construction, information subject to change.
PineCone BL602 EVB (Evaluation Board)

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) image tool replaced 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