diff --git a/docs/developer-guide.md b/docs/developer-guide.md index 0737627..567f2bc 100644 --- a/docs/developer-guide.md +++ b/docs/developer-guide.md @@ -11,7 +11,6 @@ If you only want to run the demos from your phone, read the [user guide](user-gu | Part | What it is | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Board | AkidaTag: a Nordic nRF5340 (the application core runs this firmware, the network core runs the Bluetooth controller) and a BrainChip Akida AKD1500 neural processor connected over SPI, with a PDM microphone, an ISM330 accelerometer and gyroscope, a BQ27427 fuel gauge, two INA190 current monitors, a CP2105 USB-to-UART bridge behind the USB-C connector, a red and a green LED. The AKD1500 has its own SPI flash, which holds the model. | -| Bench alternative | An nRF5340 DK with an AKD1500 PCIe card in SPI mode on an interposer board. [Environment setup](setup.md) describes the wiring. | | SDK | nRF Connect SDK v3.1.1 (Zephyr), built with sysbuild. MCUboot is the bootloader and its secondary image slot is in the external SPI NOR flash on the nRF side. | | Application | One application, `demo_apps`, which runs keyword spotting on the AKD1500 with on-device edge learning, and serves the BrainChip Connect app over Bluetooth Low Energy. | | Toolchain | A Docker image, `akidatag-ncs:v3.1.1-py3.12`, holding the SDK, the Akida Python package for model conversion, and clang-format. | @@ -22,7 +21,7 @@ If you only want to run the demos from your phone, read the [user guide](user-gu . ├── src/ The firmware. Source directory of the demo_apps application. │ ├── apps/demo_apps/ main.cpp, the app's Kconfig fragment and its sample inputs -│ ├── boards/ Devicetree overlays and dk.conf for the AkidaTag board and the nRF5340 DK +│ ├── boards/ Devicetree overlays and board-specific configuration │ ├── core/ SPI to the AKD1500, its flash, BLE services, audio, LEDs, battery, boot manager │ ├── deps/ Imported code: the Akida engine, FlatBuffers headers, kissfft (see deps/VENDORING.md) │ ├── include/ Headers @@ -41,10 +40,9 @@ If you only want to run the demos from your phone, read the [user guide](user-gu └── CONTRIBUTING.md Commit and pull request rules, enforced in CI ``` -Both boards build for the same Zephyr board target, `nrf5340dk/nrf5340/cpuapp`. What separates -an AkidaTag build from a DK build is the set of CMake arguments `scripts/run.sh` passes when you -give it `--dk`: the devicetree overlay, the MCUboot overlay, `CONFIG_AKIDATAG_BOARD`, and -`boards/dk.conf`. The two overlays under `src/boards/` list every pin on both boards. +The AkidaTag build uses the Zephyr board target `nrf5340dk/nrf5340/cpuapp` with the board's +devicetree and MCUboot overlays and `CONFIG_AKIDATAG_BOARD=y`. The target name comes from Zephyr; +the custom overlays define the AkidaTag hardware. ## 2. Set up the environment @@ -55,8 +53,8 @@ Everything goes through `scripts/run.sh` inside the Docker image. Build the imag ``` It downloads the SDK and takes a while; the result is about 17.6 GB. If you would rather install -the toolchain on the host, Appendix I of [Environment setup](setup.md) lists what to install on -Ubuntu 22.04. The CI release build pulls the same image from +the toolchain on the host, the [local install appendix](setup.md#appendix-install-dependencies-locally) +lists what to install on Ubuntu 22.04. The CI release build pulls the same image from `ghcr.io/brainchip-inc/akidatag-ncs:v3.1.1-py3.12`. Host-side tools, outside Docker: @@ -73,13 +71,10 @@ On macOS, Docker Desktop has no USB passthrough, so build inside Docker and flas ## 3. Build ```sh -./scripts/run.sh -d -b --app demo_apps # AkidaTag board -BUILD_DIR=build_docker_dk ./scripts/run.sh -d -b --dk --app demo_apps # nRF5340 DK +./scripts/run.sh -d -b --app demo_apps ``` -A Docker build lands in `build_docker/demo_apps/`; a host build in `build/demo_apps/`. `--dk` -changes the configuration, not the directory, so the two boards overwrite each other's build -unless you set `BUILD_DIR`, which is why the DK command above builds into `build_docker_dk/`. +A Docker build lands in `build_docker/demo_apps/`; a host build in `build/demo_apps/`. `./scripts/run.sh -d -i` opens a shell inside the image. | Output | What it is | @@ -102,11 +97,9 @@ Flashing `merged.hex` and `merged_CPUNET.hex` over SWD replaces everything on th bootloader included. It does not touch the AKD1500's flash, so a model on the board survives. ```sh -./scripts/run.sh -d -f --app demo_apps # Linux, west flash inside Docker -./scripts/run.sh -f -jf --app demo_apps # host J-Link, network core then application core -BUILD_DIR=build_docker ./scripts/run.sh -f -jf --app demo_apps # macOS: flash the Docker build from the host -BUILD_DIR=build_docker_dk ./scripts/run.sh -d -f -jf --dk --app demo_apps # the DK build, from its own directory -./scripts/run.sh -d -r # reset the board +./scripts/run.sh -d -f -jf --app demo_apps # Linux: J-Link inside Docker +BUILD_DIR=build_docker ./scripts/run.sh -f -jf --app demo_apps # macOS: host J-Link +./scripts/run.sh -d -r # reset the board ``` Use the J-Link path, `-jf`, on an AkidaTag board. The board's debug header reports a target @@ -138,8 +131,7 @@ full chip erase. The application's console and shell are on `uart0`, TX P0.29 and RX P1.04, at 115200 baud. On the AkidaTag board those pins reach the CP2105 bridge behind the USB-C connector, so the cable that powers the board carries the console. The bridge presents two serial ports and only the -higher-numbered one is the console; the other stays silent. On the DK the pins go to a header, so -use a USB-to-TTL adapter. +higher-numbered one is the console; the other stays silent. ```sh minicom -D /dev/ttyUSB1 # or ./scripts/run.sh -m /dev/ttyUSB1 @@ -219,9 +211,8 @@ The transfer stages one 4,096-byte flash sector at a time, carries an absolute o write and a committed position in every acknowledgement, and checks the whole file against a CRC32 before trusting it. The board reports `DONE` when the file is stored and verified, then programs the AKD1500, runs a test inference, and reports `READY`. Only `READY` means the model is -running. [BLE model transfer protocol](ble-model-transfer.md) is the wire contract; change the -firmware and that page together, and remember that BrainChip Connect is a second repository that -has to move with them. +running. Keep the firmware and BrainChip Connect implementations aligned when changing this +exchange. On the board, the model data is written to the AKD1500's SPI flash at the address the package names (0x101000 for the keyword model), and the metadata and program info are stored as LittleFS @@ -406,7 +397,7 @@ on a pull request. This is what BrainChip Connect speaks. All of it is in `src/core/interface/ble_services`. -**Advertising.** The board advertises as `AkidaTag` (`AkidaTag-DK` for a DK build) with +**Advertising.** The board advertises as `AkidaTag` with manufacturer data of twelve ASCII bytes: a Bluetooth version `53`, a three-digit firmware version, and the accelerator id `AKD1500`. The app filters on the accelerator id, so every board built around an AKD1500 appears in its list. There is no scan response and no service UUID on the air: @@ -444,7 +435,7 @@ is on its main page. **Model transfer service**, UUID `f000aa00-0451-4000-b000-000000000000`: metadata characteristics, a control characteristic (start, abort), a data characteristic that carries an absolute offset in every write, and a status notification that reports the committed position and -the result codes. [BLE model transfer protocol](ble-model-transfer.md) specifies every message. +the result codes. **Edge learning service**, UUID `f000bb11-0111-9000-c000-000000000000`: a command characteristic (`f000bb10-...`) that takes one byte, and an acknowledgement characteristic (`f000bb12-...`) that diff --git a/docs/firmware-update-over-usb.md b/docs/firmware-update-over-usb.md index 0962286..f30dbd8 100644 --- a/docs/firmware-update-over-usb.md +++ b/docs/firmware-update-over-usb.md @@ -18,7 +18,7 @@ CDC flashing is not possible and is not what this page describes. Listening at every boot is not free. `CONFIG_BOOT_SERIAL_WAIT_FOR_DFU_TIMEOUT` in `src/sysbuild/mcuboot.conf` makes MCUboot hold the board for about a second before it starts -the application, on both build targets and in every release: measured, the application banner +the application in every release: measured, the application banner appears about 1.5 s after a reset. That timeout is a budget which also covers the slot 0 signature check, which happens whether or not this option is set, so raising it does not add delay one for one. @@ -95,9 +95,6 @@ the image in slot 0 fails signature validation, the bootloader stays in serial r the USB-C cable instead of halting, and waits there without any command from the host. That is what makes a board carrying a bad image recoverable without a debug probe. -Because `src/sysbuild/mcuboot.conf` is shared by both build targets, the nRF5340 DK build -behaves exactly the same way. - ### What you see on the board In update mode the red LED is on and steady, and the green LED stops blinking. A blinking diff --git a/docs/hardware/datasheet.md b/docs/hardware/datasheet.md index e3df473..f759048 100644 --- a/docs/hardware/datasheet.md +++ b/docs/hardware/datasheet.md @@ -478,10 +478,10 @@ board. | Interface | Detail | Source | |---|---|---| -| Bluetooth device name | `AkidaTag` (`AkidaTag-DK` on the development-kit build) | `src/prj.conf`, `src/boards/dk.conf` | +| Bluetooth device name | `AkidaTag` | `src/prj.conf` | | Bluetooth role and security | Peripheral; LE Secure Connections only, MITM protection required, bonding with up to 3 bonds, 128-bit keys, resolvable private address rotated every 900 s | `src/prj.conf` | | Advertising | Flags, complete device name, manufacturer-specific data; the device serial is never advertised | `ble_initialization.c` | -| Model transfer service | `f000aa00-0451-4000-b000-000000000000`, one flash sector per stage with an absolute offset in every write | [BLE model transfer](../ble-model-transfer.md) | +| Model transfer service | `f000aa00-0451-4000-b000-000000000000`, one flash sector per stage with an absolute offset in every write | `src/core/interface/ble_services/file_transfer.c` | | Edge learning service | `f000bb11-0111-9000-c000-000000000000` (command `f000bb10`, acknowledgement `f000bb12`) | `edge_learning.c` | | Command and streaming channel | Nordic UART Service frames, including battery state of charge and charger status | `src/README.md`, `battery_service.c` | | Firmware update over Bluetooth | MCUmgr SMP over Bluetooth with the image, OS and statistics groups; MCUboot with RSA-3072 signatures, two updateable images (application and network core) | `src/prj.conf`, `src/sysbuild/mcuboot.conf` | @@ -556,8 +556,7 @@ first board shipped. Source: the revision summary on the Rev2 schematic cover sh `src/Kconfig`, `src/pm_static.yml`, `src/apps/demo_apps/custom_app.conf`, `src/imu_app.conf`, `src/README.md`, `src/core/interface/gpio/gpio.c`, `src/core/interface/audio/pdm_mic.c`, `src/core/interface/ble_services/`, - `src/include/fuel_gauge/fuel_gauge.h`, `docs/ble-model-transfer.md`, - `docs/firmware-update-over-usb.md`, `AGENTS.md`. + `src/include/fuel_gauge/fuel_gauge.h`, `docs/firmware-update-over-usb.md`, `AGENTS.md`. - [AKD1500 Product Brief V2.4](https://brainchip.com/wp-content/uploads/2025/10/AKD1500-Product-Brief-V2.4-Oct.25.pdf). - [Nordic Semiconductor nRF5340 product page](https://www.nordicsemi.com/Products/nRF5340) and [product specification key features](https://docs.nordicsemi.com/bundle/ps_nrf5340/page/keyfeatures_html5.html). diff --git a/docs/index.md b/docs/index.md index 517f71f..a11fb56 100644 --- a/docs/index.md +++ b/docs/index.md @@ -25,18 +25,16 @@ BrainChip Connect app on your phone. | Page | What it holds | | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| [Environment setup](setup.md) | The Docker toolchain image, a local install as the alternative, and the nRF5340 DK bench with an AKD1500 PCIe card. | -| [Firmware update over USB-C](firmware-update-over-usb.md) | Updating a board with nothing but its USB-C cable, through the bootloader's serial recovery mode. | -| [BLE model transfer protocol](ble-model-transfer.md) | The wire contract between the firmware and BrainChip Connect for loading a model. | +| [Firmware setup](setup.md) | Building the Docker toolchain image, connecting an AkidaTag, and building and flashing the firmware. | +| [Firmware update over USB-C](firmware-update-over-usb.md) | Updating a board with nothing but its USB-C cable, through the bootloader's serial recovery mode. | ## Help | Page | What it holds | | ----------------------------------- | ---------------------------------------------------------------------- | -| [FAQ](faq.md) | Short answers to the questions people ask first. | -| [Support](support.md) | Where to ask for help and what to include. | -| [Release notes](release-notes.md) | What each firmware release changed, and what each release file is for. | -| [Open-source licences](licences.md) | The licence of the firmware and of the code it imports. | +| [FAQ](faq.md) | Short answers to the questions people ask first. | +| [Support](support.md) | Where to ask for help and what to include. | +| [Release notes](release-notes.md) | What each firmware release changed, and what each release file is for. | ## Downloads diff --git a/docs/licences.md b/docs/licences.md deleted file mode 100644 index bd30e81..0000000 --- a/docs/licences.md +++ /dev/null @@ -1,42 +0,0 @@ -# Open-source licences - -## The firmware - -The AkidaTag firmware is licensed under the Apache License 2.0. The text is the repository's -[LICENSE](../LICENSE) file, and the copyright is held by BrainChip Holdings Ltd. - -The repository's [NOTICE](../NOTICE) file is the authority on the code the firmware imports: for -every component it records the upstream, the version, the paths, and the licence statement the -files themselves carry. This page is the summary. - -## Code imported into the repository - -Everything imported lives under `src/deps`, committed rather than downloaded, so that a clone plus -the toolchain image builds the firmware. `src/deps/VENDORING.md` says where each tree came from -and how it is upgraded. - -| Component | Version | Licence | -| ---------------------------- | ---------------------- | ------------------ | -| Akida Engine | 2.17.0 | Apache License 2.0 | -| FlatBuffers | 2.0.8 | Apache License 2.0 | -| Kiss FFT, float-only variant | unrecorded; see NOTICE | BSD 3-Clause | - -NOTICE also records three smaller items outside `src/deps`: the MFCC feature extraction adapted -from Arm's ML-KWS-for-MCU (Apache License 2.0), five build and sample files that carry the nRF -Connect SDK sample header (Nordic 5-Clause licence), and the keyword-spotting sample input -derived from the Google Speech Commands dataset (Creative Commons Attribution 4.0). - -## Code the firmware is built against - -The firmware is built with nRF Connect SDK v3.1.1, which is not part of this repository. It -brings the Zephyr RTOS and the MCUboot bootloader, both under the Apache License 2.0, and Nordic -Semiconductor's own components under the Nordic 5-Clause licence. Their licence texts and notices -ship with the SDK. - -## The app - -BrainChip Connect is documented separately at https://brainchip-inc.github.io/BrainChip-Connect/. - ---- - -© 2026 BrainChip Holdings Ltd. All rights reserved. diff --git a/docs/release-notes.md b/docs/release-notes.md index 1af3674..e966698 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -13,14 +13,9 @@ changes. The app shows the same version on its firmware update screen. ## Releases -| Release | Date | What it was for | -| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Release | Date | What it was for | +| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `v1.2.0+0` | 2026-09-14 | Pre-release. The product rename from Spark to AkidaTag, firmware update over the USB-C cable with no probe and no button, a build that works from a fresh clone, and the Akida engine committed to the tree. | -| `v1.1.1+0` | 2026-08-25 | Patch release fixing the two defects that shipped in `v1.1.0+0`: a model update over Bluetooth never completed, and the DK build did not compile. | -| `v1.1.0+0` | 2026-08-25 | Pre-release. Power measurement and power control on the board, a rewritten keyword-spotting scoring path, and the first hardware-in-the-loop CI job. | -| `v1.0.0+0` | 2026-04-07 | First alpha of the firmware platform. | - -Releases before `v1.2.0+0` carry the product's earlier name, Spark, in their file names. ### Known issues in `v1.2.0+0` diff --git a/docs/setup.md b/docs/setup.md index 3f318ba..de22ade 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,273 +1,151 @@ -# Setup For nRF5340 DK And AKD1500 PCIe (SPI mode) + Interposer Board +# AkidaTag firmware setup -### Step 1: Pin Connections with nRF5340 DK, AKD1500 & UART +This page prepares the firmware toolchain, connects an AkidaTag to a debug probe and builds and +flashes the `demo_apps` application. Run every command from the repository root. -Follow the pin connections as shown below: +## 1. Build the Docker toolchain image -![Pin Connections](./images_and_videos/Pin-Connection-nRF-AK.jpg) +The supplied Dockerfile creates an image with the nRF Connect SDK, Zephyr build tools, Python and +the model conversion dependencies. Docker must support `linux/amd64` containers. -![Pin Connections](./images_and_videos/Pin-Connection-nRF-UART.jpg) - ---- - -### Step 2: Install Dependencies - -Current setup provide dockerfile to create a docker image that will have all the required dependices. - -_Note: If you'd like to install depenencies locally then follow Appendix I: Install Dependency On System._ - -**Build Docker Image** - -Run the following script from Project Root To Build The Docker Image. - -``` -# get help and usage for the script -./scripts/build_docker_image.sh -h - -# build docker image for ncs v3.1.1 +```sh ./scripts/build_docker_image.sh --ncs v3.1.1 --python 3.12 ``` -The build will take some time as it downloads ncs sdk. +The result is `akidatag-ncs:v3.1.1-py3.12`. The first build takes a while because it downloads the +SDK. Use `./scripts/build_docker_image.sh --help` to see the available options. -Based on the scripts you ran, following images should be build and seen. See below table for reference: +If you prefer a host installation on Ubuntu, follow +[Install dependencies locally](#appendix-install-dependencies-locally). -`docker images` +## 2. Connect the AkidaTag -| IMAGE | ID | DISK USAGE | -| -------------------------- | ------------ | ---------- | -| akidatag-ncs:v3.1.1-py3.12 | 7d2f06ee0930 | 17.6GB | +Connect the board's USB-C port to the host for power and the serial console. For a full flash, +connect a compatible J-Link probe to the board's SWD pads: ---- - -### Step 3: Build, Flash And Test Connections +| J-Link pin | Signal | Board pad | +| ---------------- | ---------------------- | -------------- | +| 1 | VTref, 1.8 V reference | Pin 10 (1.8 V) | +| 7 | TMS / SWDIO | SWD | +| 9 | TCK / SWCLK | CLK | +| 15 | RESET, active low | NRST | +| 8, or any ground | GND | GND | -_Note: Following scripts are running through docker. If installed dependency locally then simply remove `-d` from below runs._ +Pin 1 is at the bottom-right corner of both connectors. The reference pin carries the board's +1.8 V rail. -**1. Build And Flash demo_apps** +On macOS, install the +[SEGGER J-Link Software and Documentation Pack](https://www.segger.com/downloads/jlink/) on the +host and make `JLinkExe` available on `PATH`. Docker Desktop does not expose the USB device to the +container. -`demo_apps` is the application this project builds and flashes. `--dk` selects the -nRF5340 DK overlay, which is the board this document sets up. +## 3. Build and flash the firmware -Every build signs its images with the development key committed at `.env/development_key.pem`, so -there is nothing to set up. That key is public on purpose; see -[Application Security](../src/README.md#application-security) for what it does and does not -protect, and for how to use your own key instead. +Build the application in Docker: +```sh +./scripts/run.sh -d -b --app demo_apps ``` -# build -./scripts/run.sh -d -b --dk --app demo_apps -# flash -./scripts/run.sh -d -f --app demo_apps -``` +Every build starts with a pristine configuration and writes its output to +`build_docker/demo_apps/`. It signs the images with the public development key committed at +`.env/development_key.pem`. See +[Application Security](../src/README.md#application-security) for how the key is used and how to +replace it. -**To see output on the terminal through UART** +On Linux, flash through the J-Link from inside the container: +```sh +./scripts/run.sh -d -f -jf --app demo_apps ``` -# replace /dev/ttyUSB0 with endpoint at your system -minicom -D /dev/ttyUSB0 -# install minicom if not there -sudo apt-get install minicom -``` - ---- - -**2. Test The Link To The AKD1500** - -The CLI hardware test drives the firmware shell over UART and confirms the AKD1500 -device ID, its SRAM and the external SPI flash, which is the communication this -setup has to get right. Testcases 1 to 7 in [README.md](../README.md#implemented-test-cases) -say what each one checks. +On macOS, flash the container-built output with the host J-Link tools: +```sh +BUILD_DIR=build_docker ./scripts/run.sh -f -jf --app demo_apps ``` -./scripts/run.sh -d -t -``` - -A passing run ends with `ALL TESTCASES PASSED`. ---- +The script loads `merged_CPUNET.hex` on the network core first and `merged.hex` on the application +core second. Both files include the bootloader needed for initial programming. -**3. Send A Model Over BLE And Infer** +## 4. Check the board -Fetch and convert the kws model, then send it to the Akida external flash over BLE. -[src/README.md](../src/README.md) covers the model workflow and its config -files in full. +The USB-C connection presents two serial ports. The higher-numbered CP2105 interface is the +console. Open it at 115200 baud and press Enter: +```sh +minicom -D /dev/ttyUSB1 ``` -# fetch, convert, generate info.yaml and the model bundle .zip -./scripts/run.sh -d \ - --fetch_model .env/demo_apps/kws.yaml \ - --generate_info .env/demo_apps/kws.yaml - -# send the model over BLE from the host -./scripts/run.sh --send_ble \ - --info models/kws/kws_program_info.bin \ - --bin models/kws/kws_program_data.bin \ - --yaml models/kws/info.yaml -``` - -Once the transfer completes, run the inference test to confirm the model loads from -external flash and infers (Testcase 8). - -``` -./scripts/run.sh -d -t --infer-test -``` - -You can also type `infer kws` yourself on the minicom session to infer again. ---- - -**4. BLE FOTA** +Replace `/dev/ttyUSB1` with the console port on your host. A running application answers with the +`uart:~$` shell prompt. -To check that a firmware update over BLE also works, make a change to the app and -rebuild it, then find `dfu_application.zip` in the build directory -(`build_docker/demo_apps/` for a Docker build). Upload it to the board with the -nRF Connect Mobile App; the FOTA section of -[src/README.md](../src/README.md) walks through the app. +The CLI hardware test drives the same shell and checks the AKD1500 device ID, its SRAM and its +external SPI flash: -To update a board over its USB-C cable instead, with no phone and no debug probe, see -[firmware-update-over-usb.md](./firmware-update-over-usb.md). +```sh +./scripts/run.sh -d -t +``` -_Tip: A simple change that I make is adding a print statement in main.cpp_ +A passing run ends with `ALL TESTCASES PASSED`. See +[README.md](../README.md#implemented-test-cases) for what each test covers. ---- +For later firmware updates that need only the USB-C cable, follow +[Firmware update over USB-C](firmware-update-over-usb.md). -### Appendix I: Install Dependency On System. +## Appendix: install dependencies locally -**Prerequisites** +The supported host setup is Ubuntu 22.04 with `sudo` access. The main tools have these minimum +versions: -- `sudo` access -- Working on Ubuntu 22 LTS (as of 11/25/2025) -- Min version for main dependencies +| Tool | Minimum version | +| ------------------- | --------------- | +| CMake | 3.20.5 | +| Python | 3.10 | +| Devicetree compiler | 1.4.6 | - | **Tool** | **Min. Version** | - | ----------------------- | ---------------- | - | **cmake** | 3.20.5 | - | **Python** | 3.10 | - | **Devicetree compiler** | 1.4.6 | +Install the system packages: - Install main dependencies with the following commands - - ``` - sudo apt install --no-install-recommends git wget make file \ +```sh +sudo apt install --no-install-recommends git wget make file \ ccache dfu-util device-tree-compiler \ xz-utils gcc gcc-multilib g++-multilib \ - libsdl2-dev libmagic1 \ - ninja-build - ``` - - Verify the version of the main dependencies - - ``` - cmake --version - dtc --version - ``` - - If `cmake` version is not higher than min version mentioned, then follow installation of a proper version through this [link](https://docs.zephyrproject.org/latest/develop/getting_started/installation_linux.html#installation-linux). - - Verify other versions: - - ``` - # currently running ninja 1.10.1 - ninja --version - ``` - -- J-Link - - If it is not installed, then download from [J-Link Software and Documentation Pack](https://www.segger.com/downloads/jlink/). - - Current version installed in `v8.88`. - - After download, install using the following command: - - ``` - wget https://www.segger.com/downloads/jlink/JLink_Linux_V888_x86_64.deb - sudo apt install ./JLink_Linux_V888_x86_64.deb - ``` - - After connecting board through USB, run `JLinkExe` and check if board is detected. The following output should be seen: - - ``` - SEGGER J-Link Commander V8.88 (Compiled Nov 19 2025 13:07:00) - DLL version V8.88, compiled Nov 19 2025 13:05:57 - - Connecting to J-Link via USB...Updating firmware: J-Link OB-nRF5340-NordicSemi compiled Jul 8 2025 10:15:34 - Replacing firmware: J-Link OB-nRF5340-NordicSemi compiled May 18 2021 BTL - Waiting for new firmware to boot - New firmware booted successfully - O.K. - Firmware: J-Link OB-nRF5340-NordicSemi compiled Jul 8 2025 10:15:34 - Hardware version: V1.00 - J-Link uptime (since boot): 0d 00h 00m 00s - S/N: - License(s): RDI, FlashBP, FlashDL, JFlash, GDB - USB speed mode: Full speed (12 MBit/s) - VTref=3.300V - - - Type "connect" to establish a target connection, '?' for help - ``` - - > This confirms that the nRF5340 DK board is connected. - -**Download And Setup nRF Util** - -- Download the latest [nrfutil file](https://files.nordicsemi.com/artifactory/swtools/external/nrfutil/executables/x86_64-unknown-linux-gnu/nrfutil). - -Run script from project root to install the above file + libsdl2-dev libmagic1 ninja-build +``` -`./scripts/install_nrfutil.sh` +Check the installed versions: -Add nrfutil to path - environment variable for further steps +```sh +cmake --version +dtc --version +ninja --version +``` -`source ./scripts/env.sh` +If CMake is too old, follow Zephyr's +[Linux installation guide](https://docs.zephyrproject.org/latest/develop/getting_started/installation_linux.html#installation-linux). -**Install nrfutil sdk-manager and device** +Install the J-Link package from SEGGER, then run `JLinkExe` with the board connected to confirm +that the probe sees the target. -Install sdk-manager and device with nrfutil +Download and install the latest +[nRF Util executable](https://files.nordicsemi.com/artifactory/swtools/external/nrfutil/executables/x86_64-unknown-linux-gnu/nrfutil): -``` -# install the nrfutil sdk-manager +```sh +./scripts/install_nrfutil.sh +source ./scripts/env.sh nrfutil install sdk-manager - -# install device nrfutil install device -``` - -`.nrfutil` folder will be created in your `$HOME` directory - -Next, install the latest nRF Connect SDK version. v3.1.1 at the time - -``` -# search list of available installations -nrfutil sdk-manager search - -# install the version v3.1.1 nrfutil sdk-manager install v3.1.1 ``` -`ncs` folder will be created in your `$HOME` directory - ---- - -### Prototype Board - -Full Setup - -![Full Setup](./images_and_videos/Full-Setup.jpg) - -UART Connection For Ubuntu +The SDK manager installs nRF Connect SDK under `$HOME/ncs` by default. Omit `-d` from the +`scripts/run.sh` commands when using the host toolchain. -![UART Connection For Ubuntu](./images_and_videos/UART-Connection.jpg) - ---- - -# References: +## References - [nRF Connect SDK](https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/installation/install_ncs.html) +- [Zephyr getting started guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html) -- [Reference ZephyProject User Guide For Installation](https://docs.zephyrproject.org/latest/develop/getting_started/index.html) +--- -- [nRF5340DK On Zephyr](https://docs.zephyrproject.org/latest/boards/nordic/nrf5340dk/doc/index.html) +© 2026 BrainChip Holdings Ltd. All rights reserved. diff --git a/site/README.md b/site/README.md index 358e907..5d10d53 100644 --- a/site/README.md +++ b/site/README.md @@ -27,7 +27,7 @@ turns each page's first heading into the Starlight title, drops the copyright line that the site's own footer band carries, and rewrites links: a link to another page under `docs/` becomes that page's site URL, and a link to a file elsewhere in the repository points at GitHub. `docs/BOARD_OVERLAY_CHANGES.md` -is left out of the site. +and `docs/ble-model-transfer.md` are left out of the site. The sidebar is in `astro.config.mjs`. The hardware group is built from the files under `docs/hardware/` when that directory exists. diff --git a/site/astro.config.mjs b/site/astro.config.mjs index d01f35c..de63a97 100644 --- a/site/astro.config.mjs +++ b/site/astro.config.mjs @@ -70,15 +70,11 @@ export default defineConfig({ { label: 'Firmware reference', items: [ - { label: 'Environment setup', slug: 'setup' }, + { label: 'Firmware setup', slug: 'setup' }, { label: 'Firmware update over USB-C', slug: 'firmware-update-over-usb', }, - { - label: 'BLE model transfer protocol', - slug: 'ble-model-transfer', - }, ], }, { @@ -87,7 +83,6 @@ export default defineConfig({ { label: 'FAQ', slug: 'faq' }, { label: 'Support', slug: 'support' }, { label: 'Release notes', slug: 'release-notes' }, - { label: 'Open-source licences', slug: 'licences' }, ], }, ], diff --git a/site/scripts/sync-docs.mjs b/site/scripts/sync-docs.mjs index e780790..c02f5de 100644 --- a/site/scripts/sync-docs.mjs +++ b/site/scripts/sync-docs.mjs @@ -16,7 +16,10 @@ const sourceDir = path.resolve(siteDir, '..', 'docs'); const targetDir = path.join(siteDir, 'src', 'content', 'docs'); const siteBase = '/AkidaTag'; const repositoryBlobUrl = 'https://github.com/Brainchip-Inc/AkidaTag/blob/main'; -const excludedPages = new Set(['BOARD_OVERLAY_CHANGES.md']); +const excludedPages = new Set([ + 'BOARD_OVERLAY_CHANGES.md', + 'ble-model-transfer.md', +]); const footerPattern = /\n---\n\n© 2026 BrainChip Holdings Ltd\. All rights reserved\.\s*$/;