# bl_iot_sdk **Repository Path**: lupyuen/bl_iot_sdk ## Basic Information - **Project Name**: bl_iot_sdk - **Description**: BL602 / BL604 IoT SDK featured in "The RISC-V BL602 Book" - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://lupyuen.github.io/articles/book - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-21 - **Last Updated**: 2021-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: bl602, bl604, IOT ## README Pine64 BL602 IoT SDK modded for the articles... - `"PineDio LoRa Gateway: Testing The Prototype" `_ - `"Build a Linux Driver for PineDio LoRa SX1262 USB Adapter" `_ - `"Monitor IoT Devices in The Things Network with Prometheus and Grafana" `_ - `"CBOR Payload Formatter for The Things Network" `_ - `"Internal Temperature Sensor on BL602" `_ - `"Internal Temperature Sensor on BL602" `_ - `"IoT Digital Twin with Roblox and The Things Network" `_ - `"Encode Sensor Data with CBOR on BL602" `_ - `"Grafana Data Source for The Things Network" `_ - `"The Things Network on PineDio Stack BL604 RISC-V Board" `_ - `"LoRaWAN on PineDio Stack BL604 RISC-V Board" `_ - `"Rust on RISC-V BL602: Rhai Scripting" `_ - `"PineDio Stack BL604 RISC-V Board: Testing The Prototype" `_ - `"Rust on RISC-V BL602: Simulated with WebAssembly" `_ - `"Rust on RISC-V BL602: Is It Sunny?" `_ - `"Reverse Engineering WiFi on RISC-V BL602" `_ - `"Machine Learning on RISC-V BL602 with TensorFlow Lite" `_ - `"BL602 Bootloader" `_ - `"Simulate RISC-V BL602 with WebAssembly, uLisp and Blockly" `_ - `"uLisp and Blockly on PineCone BL602 RISC-V Board" `_ - `"Run Rust RISC-V Firmware with BL602 IoT SDK" `_ - `"PineCone BL602 RISC-V Board Receives LoRa Packets" `_ - `"RAKwireless WisBlock talks LoRa with PineCone BL602 RISC-V Board" `_ - `"Connect PineCone BL602 to LoRa Transceiver" `_ - `"The RISC-V BL602 Book" `_ - `"PineCone BL602 Talks UART to Grove E-Ink Display" `_ - `"PineCone BL602 Blasting Pixels to ST7789 Display with LVGL Library" `_ - `"PineCone BL602 talks SPI too!" `_ - `"PineCone BL602 talks to I2C Sensors" `_ - `"Mynewt GPIO ported to PineCone BL602 RISC-V Board" `_ - `"Control PineCone BL602 RGB LED with GPIO and PWM" `_ - `"Flashing Firmware to PineCone BL602" `_ - `"Debug Rust on PineCone BL602 with VSCode and GDB" `_ - `"Porting Mynewt to PineCone BL602" `_ - `"Connect PineCone BL602 to OpenOCD" `_ - `"Quick Peek of PineCone BL602 RISC-V Evaluation Board" `_ Changes ======= - Capture built firmware from GitHub Actions Workflow as Artifacts - "jtag" branch contains a modified Hello World app that remaps the JTAG port: `sdk_app_helloworld `_ - Modified PWM Demo Firmware that runs without Device Tree: `sdk_app_pwm `_ - "i2c" branch contains a modified I2C Demo Firmware that uses the Low Level I2C HAL: `sdk_app_i2c `_ - New SPI Firmware that uses the SPI HAL: `sdk_app_spi_demo `_ - New Firmware for ST7789 SPI Display + LVGL Graphics Library: `sdk_app_st7789 `_ - New Firmware for Grove E-Ink Display with UART Interface: `sdk_app_uart_eink `_ - New Firmware that transmits and receives LoRa packets: `sdk_app_lora `_ - New Firmware for LoRa Ping: `sdk_app_loraping `_ - New Library for NimBLE and SX1276: `nimble-porting-layer `_ and `lora-sx1276 `_ - New LoRaWAN Driver and Firmware: `lorawan `_ and `sdk_app_lorawan `_ - New Driver for LoRa SX1262: `lora-sx1262 `_ - New Rust Library and Firmware: `rust-app `_ and `sdk_app_rust `_ - New Blinky Firmware: `sdk_app_blinky `_ - New uLisp Library and Firmware: `ulisp-bl602 `_ and `sdk_app_ulisp `_ - New TensorFlow Lite Library and Firmware: `tflite-bl602 `_ and `sdk_app_tflite `_ - New ADC Firmware: `sdk_app_adc `_, `sdk_app_adc2 `_, `sdk_app_rust_adc `_ and `sdk_app_rust_gpio `_ - New PineDio Stack BL604 Blinky Firmware: `pinedio_blinky `_ - New PineDio Stack ST7789 Firmware: `pinedio_st7789 `_, `pinedio_st7789_bitbang `_ - New CBOR Firmware: `pinedio_cbor `_ - New Internal Temperature Sensor Firmware: `pinedio_tsen `_ - New PineDio Stack LoRaWAN Firmware: `pinedio_lorawan `_ BL602 SDK (Pine64 version) ========================== Join us on `Discord `_, `Telegram `_, `Matrix `_ This repository contains the Pine64 fork of Bouffalo Lab's SDK for their BL602 Wi-Fi/BLE Combo RISC-V SoC. Documentation, including upstream documentation, translations, mirrored technical documentation, and original reverse engineered documentation is at `bl602-docs `_, which is cloned as a submodule of this repository at ``docs``. Use ``git submodule update --init`` to initialize the submodule. This repository is the central focus of Pine64's `Nutcracker Challenge `_. The main task is to reverse engineer the following files: - `components/bl602/bl602_wifi/lib/libbl602_wifi.a `_ - `components/network/ble/blecontroller/lib/libblecontroller.a `_ - `components/stage/atcmd/lib/libatcmd.a `_ This is being done at `bl602-re `_. Documentation ------------ You can find a lot of documentation on `PINE64 Documentation Website `_ and `PINE64 Documentation Repository `_, where you can find Datasheets, Reference Manuals and various other documentation materials. Quick Start ----------- In order to build sample apps, you need to set a few environment variables:: export BL60X_SDK_PATH=/path/to/this/repo export CONFIG_CHIP_NAME=BL602 In order to build all sample apps simply call `make`, for example:: make To only build the sample app of interest, go to the directory of the app, then call `make`, for example:: cd customer_app/bl602_boot2 make Call ==== :: make CONFIG_TOOLPREFIX=riscv64-linux-gnu- if you wish to bypass the bundled cross-compiler and using your distribution's own cross-compiler. There is a linker script (written in python) at `image_conf/flash_build.py`. To run this, you need to specify the application and the target, for example:: python3 flash_build.py bl602_boot2 bl602 **Note:** If you decide to copy any project outside of the `customer_app` folder, you will need to define a few variables in order to compile it:: export BL60X_SDK_PATH=/path/to/this/repo export CONFIG_CHIP_NAME=bl602 Docker ==== To set up a development environment in Docker, and do a full build of all the example projects, using the bundled toolchain:: docker build -t bl602sdk -f Dockerfile.bundled docker run -t -i --rm bl602sdk # make Hardware -------- BL602 is a 32-bit RISC-V based combo chipset supporting Wi-Fi and BLE (Bluetooth Low Energy). The chip is made by `Nanjing-based Bouffalo Lab `_ for ultra-low-power applications. In terms of price range and feature set, the chip is competing against `Espressif ESP8266 `_. The RISC-V core is based on `SiFive E24 `_. At the moment there are mainly three development boards: - `PineCone `_: USB-C evaluation board by Pine64 (datasheet `here `_), RGB LED, CH340N USB-to-UART chip - `Doi.am DT-BL10 `_: micro USB - `Official BL EVB `_ (Sipeed early adopter program): mini USB, FTDI chip? Comparison with ESP8266 ----------------------- +-------------------+-----------------------------+----------------------------------+ | | Bouffalo Lab BL602 | Espressif ESP8266 | +===================+=============================+==================================+ | Architecture | 32-bit RISC-V (SiFive E24) | 32-bit Xtensa | | | | | | | @192MHz (dynamic @1-192MHz) | @80MHz (and 160MHz) | | | | | | | L1 cache | | | | | | | | FPU | | +-------------------+-----------------------------+----------------------------------+ | Memory | 276KB SRAM | 32 KiB instruction RAM | | | | | | | 128KB ROM | 32 KiB instruction cache RAM | | | | | | | 1 Kb eFuse | 80 KiB user-data RAM | | | | | | | optional embdedded flash | 16 KiB ETS system-data RAM | | | | | | | | | | | XIP QSPI flash support | No programmable ROM | | | | | | | | QSPI flash support | | | | (up to 16 MB) | +-------------------+-----------------------------+----------------------------------+ | Wi-Fi | 802.11 b/g/n @2.4GHz | 802.11 b/g/n @2.4GHz | | | | | | | WPS/WEP/WPA/WPA2/WPA3 | WEP/WPA/WPA2 | +-------------------+-----------------------------+----------------------------------+ | Bluetooth | LE 5.0 | NONE | +-------------------+-----------------------------+----------------------------------+ | GPIO | x16 | x16 | +-------------------+-----------------------------+----------------------------------+ | SDIO | x1 2.0 slave | x1 v2.0 slave | +-------------------+-----------------------------+----------------------------------+ | SPI | x1 | x2 | +-------------------+-----------------------------+----------------------------------+ | UART | x2 | x1.5 | | | | (One Tx only) | +-------------------+-----------------------------+----------------------------------+ | I2C | x1 | x1 (software implemented) | +-------------------+-----------------------------+----------------------------------+ | I2S | NONE | x1 (with DMA) | +-------------------+-----------------------------+----------------------------------+ | PWM channels | x5 | x4 | +-------------------+-----------------------------+----------------------------------+ | ADC | 12-bit | 10-bit (SAR) | +-------------------+-----------------------------+----------------------------------+ | DAC | 10-bit | NONE | +-------------------+-----------------------------+----------------------------------+ | Analog Comparator | x2 | NONE | +-------------------+-----------------------------+----------------------------------+ | DMA | x4 | with I2S | +-------------------+-----------------------------+----------------------------------+ | Timer | RTC (up to 1 year) | x1 hardware | | | | | | | x2 32-bit general-purpose | x1 software | | | | | | | | (no interrupt gen. on sw. timer) | +-------------------+-----------------------------+----------------------------------+ | IR Remote Control | x1 | x1 | +-------------------+-----------------------------+----------------------------------+ | Debug | JTAG support | ? | +-------------------+-----------------------------+----------------------------------+