Smol Slime
Smol Slimes, also known as nRF Trackers, uses a protocol called Enhanced ShockBurst (ESB) on Nordic Semiconductor nRF52 and nRF54L series System-on-Chip (SoC). These are very power-efficient trackers, requiring a much smaller battery that can last from days to weeks compared to traditional ESP (WiFi) SlimeVR Trackers. A Receiver, or dongle, is required to bridge communication between trackers and the SlimeVR Server. This method does not work with Quest Standalone without using a computer for OSC.
Disclaimer: This project is highly experimental. These devices may be incompatible with newer versions of SlimeVR Server and may require frequent firmware updates. Nothing is final at this stage; this includes hardware, firmware, protocols used, etc.
Interested, have questions, or issues with this project? Chat with us in #smol-slimes on SlimeVR Discord!
Table of Contents
- π‘ Receiver Hardware
- π Tracker Hardware
- Schematics
- Software
- Firmware
- Firmware Setup
- Protocols
- Troubleshooting
- Links
- Community projects
π‘ Receiver Hardware
It is essential to use boards equipped with high-quality antennas to ensure signal integrity and range. Hardware featuring PCB antennas is generally the best option for use as a receiver.
USB Dongles
These dongles feature a well-optimized PCB antenna. If you experience issues with signal integrity, it is advisable to use a USB extension cable.
Dongle | Description |
---|---|
eByte Dongle (E104-BT5040U) | The most affordable option featuring a PCB antenna. It is available on AliExpress, with free shipping. It can also be found on Alibaba by Chengdu Ebyte Electronic Technology Co., Ltd. - E104-BT5040U is fully compatible with the Nordic Semiconductor nRF52840 Dongle. - The E104-BT5032U and E104-BT5040UA models, however, are not compatible. They are only capable of capturing BLE4.2 and BLE5.0 protocol packets. |
Nordic Semiconductor nRF52840 Dongle (PCA10059) | Official Nordic development hardware. They are available for purchase on Digikey or Mouser. |
Microcontroller Boards
These boards utilize antenna designs that are not optimized for range. If you are using the same boards for both trackers and receiver, they will likely perform poorly without modifications.
Board | Description | |
---|---|---|
SuperMini nRF52840 | The most affordable option overall. It is a clone of the nice!nano board. It is available on AliExpress with compatible with nice!nano or Pro Micro branding.If you wish to enhance signal strength, you can replace the built-in antenna with a 30.7 mm wire, which will create a basic monopole antenna. | |
Seeed Studio XIAO nRF52840 | Compact board available at Seeed Studio. |
π Tracker Hardware
Before you begin, determine how many trackers you may need.
Trackers are required to be equipped with a battery and an inertial measurement unit (IMU). A magnetometer is optional.
Buttons can be incorporated to control the tracker, while a slide switch can be utilized to physically disconnect the tracker's battery.
Microcontroller Boards
Board | Description |
---|---|
SuperMini nRF52840 | The most affordable option overall. It is a clone of the nice!nano board. It is available on AliExpress with compatible with nice!nano or Pro Micro branding. |
Seeed Studio XIAO nRF52840 | Compact board available at Seeed Studio. |
Inertial Measurement Units
- BMI270
- ICM-42688-P
- ICM-42688-V
- ICM-45686
- ISM330BX
- ISM330DHCX
- ISM330DLC
- LSM6DS3
- LSM6DS3TR-C
- LSM6DSL
- LSM6DSM
- LSM6DSO
- LSM6DSR
- LSM6DSV
- LSM6DSV16B
Magnetometers
- AK09940
- BMM150*
- BMM350*
- IIS2MDC
- IST8306
- IST8308
- LIS2MDL
- LIS3MDL*
- MMC5983MA
*Sensor driver has not been tested.
Sensor Modules
IMU Modules
Some of the supported sensor modules are described on the IMU Comparison page. Please note that the most common sensor modules are not supported.
IMU + Magnetometer Modules
Meia, a member of the SlimeVR Discord, produces and sells sensor modules with an onboard magnetometer. These modules are compatible with standard sensor modules, and their form factor is designed for stacked builds.
IMU + Magnetometer | Product Page |
---|---|
ICM-45686 + IST8306 | store.kouno.xyz |
LSM6DSR + IST8306 | store.kouno.xyz |
Buttons
Push buttons and momentary switches are utilized to control the tracker. The functions of this buttonβReset, Calibration, Pairing, Deep Sleep, and entering DFU Modeβdepend on the number of press combinations. A tracker can be equipped with either a reset button, a user-specified (SW0) button, or both.
The reset button is designed to support all functionalities. If an user-specified button (SW0) is defined, it will be utilized instead.
If a button is unavailable, tweezers can be used to short the pins for the initial tracker setup.
Switches
A slide switch can be used to physically disconnect a battery. Some boards have a high standby power draw and will require a switch.
If a switch is not utilized, a tracker can enter Deep Sleep mode by pressing and holding down the user-specified button (SW0).
Batteries
Most boards support a 3.7V Li-ion/LiPo battery. Typically, these batteries have a maximum charge rate of 1C, which corresponds to a one-hour charge time. Do not use a battery if its charge rating will be exceeded.
To extend the lifespan of the battery, a significantly lower charge rate of approximately 0.5C is recommended.
Board | Default charge rate | Minimum battery capacity | Recommended battery capacity |
---|---|---|---|
SuperMini nRF52840 | 100mA | 100mAh | 180-300mAh |
Seeed Studio XIAO nRF52840 | 50mA | 50mAh | 80-300mAh |
Schematics
Default SuperMini Build | Stacked π₯ͺ SuperMini Build1 |
---|---|
![]() | ![]() |
Requires special firmware that supplies power from the GPIO pins. YouTube Tutorial
Software
For those interested in building the firmware yourself:
- Git Client
- nRF Connect for Desktop with various integrated tools:
- Programmer (for flashing Nordic and eByte Dongles only)
- Serial Terminal (for sending commands to your Receiver/Trackers, see alternatives)
- Toolchain Manager (for automatic setup of the toolchain for building firmware)
- 2.9.0 (Inside Toolchain Manager) Do not use a newer version!
- NOTE: Installing the Segger J-Link is not necessary for pre-defined boards.
- VS Code (For development purposes only)
- nRF Connect for VS Code (Recommended)
- Install within VS Code extension tab, see the video tutorial
- You may either install the extension itself or the extension pack for additional development tools
- You may also set up a manual build environment in VS Code as the extension is known to fail on some certain Linux distributions.
- nRF Connect for VS Code (Recommended)
- SlimeVR Server
- 0.13.2 or later version
You only need the following if you are using precompiled firmware:
- nRF Connect for Desktop (Programmer) for flashing Nordic or eByte Dongles only
- nRF Connect for Desktop (Serial Terminal) for sending commands to your Receiver/Trackers, see alternatives
- SlimeVR Server
- 0.13.2 or later version
Firmware
The recommended method of getting the firmware is in the pre-compiled section if you don't need custom config or pin defines.
Cloning Repositories
- Open the Command Prompt by typing
cmd
in the Start Menu. - Navigate to the directory where you want to clone the repositories.. (Type "cd" followed by a space and then the full path to the desired folder or drive.)
- Cloning SlimeNRF Receiver Repository.
git clone --single-branch --recurse-submodules -b master https://github.com/SlimeVR/SlimeVR-Tracker-nRF-Receiver.git
- Cloning the SlimeNRF Tracker Repository.
git clone --single-branch --recurse-submodules -b master https://github.com/SlimeVR/SlimeVR-Tracker-nRF.git
Note: It is recommended to clone to a file path that does not contain whitespace or Unicode characters. You may encounter errors when building the firmware.
Building Firmware using nRF Connect for VS Code
Bug Fix for Zephyr 2.9.0
- Open
C:\ncs\v2.9.0\zephyr\drivers\retained_mem\retained_mem_nrf_ram_ctrl.c
in your preferred code editor. - Add a comma at the end of Line 15.
- Save the file.
- Launch VS Code using the nRF Connect's Toolchain Manager.
- Open the folder for one of the repositories.
- Make any pin changes or necessary adjustments to
boards\MANUFACTURER\BOARD_NAME.dts
. - Click on the nRF Connect tab located on the left side of your screen, approximately halfway down.
- Under "Applications" , click on "+ Add build configuration."
- Select a preset from the "Board Target".
- Scroll down and click the "Build Configuration" button.
Note: For trackers, settings can be found in the "nRF Kconfig GUI" under "Actions" and expand the "SlimeNRF" section.
Changing Board Defines
Board defines can be found in \boards\
for overlays (Boards within the Zephyr library), while custom boards are located in boards\MANUFACTURER\BOARD_NAME.dts
.
- Navigate to the board's .dts file.
- The I2C (SCL/SDA) lines can be assigned to different pins. Ensure that you are using "High Frequency" pins and that you change the pins for both lines accordingly.
- SW0 can be enabled by uncommenting (removing the
//
) from the lines below the description comment. If you are using VS Code, you can select the lines and press Ctrl / if you are using VS Code. Additionally, redefine the GPIO pin if necessary. - The INT (int0-gpios) can be redefined in the Zephyr user section.
- The CLK (clk-gpios) can be uncommented and redefined if you are using an IMU with an external clock or crystal oscillator, such as the ICM-42688 or ICM-45686.
Adjusting settings in the Kconfig
- Navigate to the nRF Connect tab of VS Code.
- Build the desired board once.
- A section titled Actions should be displayed on the left navigation panel.
- Select your built board under Applications, then scroll down to the Actions section.
- Double-click nRF Kconfig GUI.
- Scroll down to the SlimeNRF section.
- Enable or disable any necessary configurations, or adjust them as needed.
- Click the "Apply" button, then click the "Save to File" button.
- If prompted to select a file to save, choose prj.conf.
- Click the "Pristine Build" button located next to Build in the Actions section.
Building Firmware Manually (Linux)
This is only recommended if you are experiencing issues with nRF Connect for Desktops Toolchain Manager or nRF Connect for VS Code, as you will need to manually set up the toolchain.
Setup Python Venv
Using a virtual environment (venv) will keep all build tools for Zephyr, such as west
, contained.
python3 -m venv ~/.venv/nrf52
source ~/.venv/nrf52/bin/activate
(Run the setup whenever you use or modify it.)
pip3 install west
Setup nRF Connect SDK code
Please select an appropriate folder for installing the toolchain, such as ~/.toolchain-nrf52
.
Then execute:
west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.9.0 nrf52-sdk-2.9.0
cd nrf52-sdk-2.9.0
west update
(This will download dozens of Git repositories; it may take some time.)
pip install -r zephyr/scripts/requirements-base.txt
(Install the remaining requirements for building.)
west zephyr-export
(This will register the necessary CMake files in your home directory.)
If you move this folder, you simply need to re-run the last command.
Setup Zephyr SDK
The nRF Connect SDK depends on the Zephyr SDK, so please return to your toolchain folder (e.g. ~/.toolchain-nrf52
) to install it:
wget -q https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-x86_64_minimal.tar.xz
tar xf zephyr-sdk-0.17.0_linux-x86_64_minimal.tar.xz -C .
cd zephyr-sdk-0.17.0
./setup.sh -c -t arm-zephyr-eabi
(This will register the necessary CMake files in your home directory.)
If you move this folder, you simply need to re-run the last command.
Compiling Manually
Assuming your toolchain is installed in ~/.toolchain-nrf52
and you are in the firmware directory:
source ~/.venv/nrf52/bin/activate
source ~/.toolchain-nrf52/nrf52-sdk-2.9.0/zephyr/zephyr-env.sh
west build --board BOARD --build-dir build . -- -DNCS_TOOLCHAIN_VERSION=NONE -DBOARD_ROOT=.
Replace BOARD with your specific board (e.g. supermini_uf2/nrf52840
for the SuperMini, nrf52840dongle/nrf52840
for a dongle receiver).
The compiled firmware will be located at PROJECT_DIR/build/PROJECT_DIR/zephyr/zephyr[.hex|.uf2]
.
Compiling with VS Code (Without Extensions)
Assuming your toolchain is installed in ~/.toolchain-nrf52
, use the following tasks, which should be placed in .vscode/tasks.json
:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"group": "build",
"command": "source",
"args": [
"~/.venv/nrf52/bin/activate", "&&",
"source", "~/.toolchain-nrf52/nrf52-sdk-2.9.0/zephyr/zephyr-env.sh", "&&",
"west", "build", "--board", "BOARD", "--build-dir", "build",
"${workspaceFolder}", "--",
"-DNCS_TOOLCHAIN_VERSION=NONE", "-DBOARD_ROOT=${workspaceFolder}"
]
},
]
}
Replace BOARD with your specific board (e.g. supermini_uf2/nrf52840
for the SuperMini, nrf52840dongle/nrf52840
for a dongle receiver).
The compiled firmware will be located at PROJECT_DIR/build/PROJECT_DIR/zephyr/zephyr[.hex|.uf2]
.
Pre-Compiled Firmware for Default Pins
Latest Builds (Automated)
Type | Device | Clock (ICM) | Sleep (WOM) | SW0 Disabled | SW0 Enabled |
---|---|---|---|---|---|
π‘ Receiver | Nordic/eByte | N/A | N/A | Link | N/A |
π‘ Receiver | SuperMini | N/A | N/A | Link | N/A |
π‘ Receiver | XIAO | N/A | N/A | Link | N/A |
π Tracker | SuperMini | Disabled | Enabled | Link | Link |
π Tracker | SuperMini | Disabled | Disabled | Link | Link |
π Tracker | SuperMini | Enabled | Enabled | Link | Link |
π Tracker | SuperMini | Enabled | Disabled | Link | Link |
π Tracker | SuperMini (Stacked π₯ͺ) | Enabled | Enabled | Link | Link |
π Tracker | SuperMini (Stacked π₯ͺ) | Enabled | Disabled | Link | Link |
π Tracker | XIAO | Disabled | Enabled | Link | Link |
π Tracker | XIAO | Disabled | Disabled | Link | Link |
π Tracker | XIAO | Enabled | Enabled | Link | Link |
π Tracker | XIAO | Enabled | Disabled | Link | Link |
π Tracker | R3 | Enabled | Enabled | Link | N/A |
π Tracker | R3 | Enabled | Disabled | Link | N/A |
π Tracker | SlimeVR Mini (Prototype 1) | Enabled | Enabled | Link | N/A |
π Tracker | SlimeVR Mini (Prototype 1) | Enabled | Disabled | Link | N/A |
π Tracker | SlimeVR Mini (Prototype 2) | Enabled | Enabled | Link | N/A |
π Tracker | SlimeVR Mini (Prototype 2) | Enabled | Disabled | Link | N/A |
Previous builds
Previous builds can be found here: https://github.com/Shine-Bright-Meow/SlimeNRF-Firmware-CI/actions
- Click on a successful workflow run β for the specified date range.
- Scroll down to the Artifacts section.
- Download the desired device firmware.
- Extract the ZIP file.
Flashing Boards with Adafruits UF2 Bootloader (SuperMini / XIAO)
Flashing the Bootloader
- You can download them here: https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases
- For the SuperMini, download
update-nice_nano_bootloader-x.x.x_nosd.uf2
. For the XIAO, downloadupdate-xiao_nrf52840_ble_sense_bootloader-x.x.x_nosd.uf2
. (The appropriate non-Sense version does not update the bootloader.) - Connect the device to your computer using a USB data cable.
- The device should initially start in DFU mode when new and without a bootloader. The LED should fade on and off.
- If the device's LED is not fading on and off, press the reset button twice (or briefly short the RST and GND pins) twice within 0.5 seconds. If the device has existing SlimeNRF firmware, reset it four times.
- Navigate to your Downloads folder and copy the UF2 file.
- Navigate to the Mass Storage Drive (ex. NICENANO/XIAO-SENSE) from ThisPC.
- Paste the file there, and the window should close, causing the device to reboot.
Update the bootloader on your SuperMini and XIAO boards before flashing the firmware; otherwise, there is a significant risk of bricking your device. eByte and Nordic dongles are not included in this category.
Flashing the Firmware using UF2
- Connect the device to your computer using a USB data cable.
- The device should initially start in DFU mode when new and without a bootloader. The LED should fade on and off.
- If the device's LED is not fading on and off, press the reset button twice (or briefly short the RST and GND pins) twice within 0.5 seconds. If the device has existing SlimeNRF firmware, reset it four times.
- Navigate to your local Receiver or Tracker repository, then go to
build\REPOSITORY_NAME\zephyr\
. - Copy zephyr.uf2 file.
- Navigate to the Mass Storage Drive (ex. NICENANO/XIAO-SENSE) from ThisPC.
- Paste the file there, and the window should close, causing the device to reboot.
Flashing the Firmware using adafruit-nrfutil
This uses the bootloaders serial protocol to flash it using command line tools.
See Adafruit nRF52 nrfutil Github Repo for install and usage instructions.
Recommended: Use a python venv to install the adafruit-nrfutil python tool.
Flashing Dongles with SoftDevice/Nordic Bootloader (eByte/Nordic)
This bootloader will appear as "Open DFU Bootloader" by Nordic Semiconductor. Currently, the only confirmed method for flashing firmware onto these devices is through nRF Connect for Desktop, though it should also be possible to use nRF Util (but it is more complex and practically equivalent).
NOTE: Installing the Segger J-Link is not required for this bootloader.
NOTE: On Linux, nRF Connect for Desktop installs nodeJS tools into ~/.nrfconnect-apps/
, nRF Util installs binary tools into ~/.nrfutil/
.
Flashing using nRF Connect for Desktop
- Open "Programmer" in the nRF Connect.
- Press the reset button, and the LED should begin to fade on and off, placing the device in DFU Mode. For eByte dongle, this is the right button. For Nordic dongle, it is the side button (not the round white button).
- In the top left corner, select your Device.
- Click on "Add File".
- Navigate to your local Receiver repository, then select the file located at
build\REPOSITORY_NAME\zephyr\zephyr.hex
. - Click the "Write button".
Flashing using nRF Util
Not documented yet. Relevant documentation:
Firmware Setup
Accessing the Serial Console
You can interact with the firmware by connecting to the serial console it provides, which is used for pairing and calibration.
The following examples will utilize nRF Connect for Desktop; however, you may choose from a wide variety of alternative tools.
For example, by using the standard Linux screen
utility, you can access the serial console as follows:
sudo screen /dev/ttyACMX 115200
You can determine which serial port to use by running sudo dmesg
after connecting your nRF device.
For Windows, there are similar tools available, such as PuTTY that you can use to access a serial console.
Pairing Mode
Tracker
Method 1: Console
- Launch nRF Connect for Desktop.
- Open the Serial Terminal in nRF Connect.
- Ensure that your tracker is connected to your computer using a cable.
- In the top left corner, select your tracker from the Device menu.
- Click the "Connect to Port" button.
- Type
pair
into the console.
Method 2: Button
- Press the Reset button (or short RST/GND pins) or the Function button (if SW0 is defined) three times.
The device's LED should blink once every second.
Receiver
- Launch nRF Connect for Desktop.
- Open the Serial Terminal in nRF Connect.
- Ensure that your tracker is connected to your computer using a cable.
- In the top left corner, select your dongle from the Device menu.
- Click the "Connect to Port" button.
- Type
pair
into the console.
The device's LED should blink once every second.
Once the trackers are paired, the LED indicator should stop blinking once per second. To exit pairing mode on the Receiver, type reboot
in the console, or press the left button once on the eByte Dongle, or the round white button once on the Nordic Dongle.
Calibration
Basic
Method 1: Console
- Launch nRF Connect for Desktop.
- Open the Serial Terminal in nRF Connect.
- Ensure that your tracker is connected to your computer using a cable.
- In the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
- Type
calibrate
into the console while the tracker is placed on a flat surface. - Wait for the logs to reboot and print out again.
Method 2: Button
- Press the Reset or SW0 (Functional) button twice, then place the tracker on a flat surface and allow it to remain still for a few seconds.
6-Sided
- Ensure that the power switch is turned on so that the tracker can operate on battery power when unplugged.
- Launch the nRF Connect for Desktop.
- Open the Serial Terminal in nRF Connect.
- Ensure that your tracker is connected to your computer using a cable.
- In the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
- Enter the
6-side
command in the console. (Currently, there is no button combination available to initiate this calibration.) - Follow the console log while rotating the sides on a flat surface. Leave the cable side for last.
- When prompted for the final side, disconnect your USB cable and position the side with the USB port on a flat surface.
- Wait a moment until the calibration is complete.
Magnetometer
- Please note that this calibration is passively active and does not require any command or button press combination to initiate.
- Rotate your tracker 360 degrees on each of the six sides of the tracker while it is placed on a flat surface.
Note: The LED will blink when you place it flat on each side and will blink continuously when it is ready to save.
Updating Firmware
- If your receiver requires a firmware update, please do this first.
- Open the Serial Terminal in nRF Connect's Serial Terminal.
- Select your Receiver from the Device list.
- Click the "Connect to Port" button.
- Enter
clear
to unpair all of your trackers from the Receiver. The Receiver will automatically enter pairing mode. - Connect the tracker to your computer using a USB cable and ensure that the power switch is turned on. This allows the tracker to operate on battery power when unplugged for 6-Side calibration.
- Select your tracker from the Device List.
- Click the "Connect to Port" button.
- Enter
dfu
to go into DFU Mode. - Copy the UF2 file to your tracker.
- Enter
6-side
to begin the 6-Side calibration. - After completing the 6-side calibration, enter
calibrate
to adjust the ZRO. - Enter
pair
to enter pairing mode. - Wait for the tracker to pair with the Receiver, and then disconnect.
- Please repeat process for all trackers.
- Select your Receiver from the Device list.
- Click the "Connect to Port" button.
- Enter
reboot
to exit pairing mode.
Console Commands
Receiver
info
- Get device informationlist
- Get paired devicesreboot
- Soft reset the devicepair
- Enter pairing modeclear
- Clear stored devicesdfu
- Enter DFU bootloader (only available if your device has one)uptime
- Get device uptimemeow
- Meow!
Tracker
info
- Get device informationreboot
- Soft reset the devicecalibrate
- Calibrate sensor ZRO6-side
- Calibrate 6-side accelerometerpair
- Enter pairing modedfu
- Enter DFU bootloader (only available if your device has one)uptime
- Get device uptimemeow
- Meow!
Button
- Reset - 1 Press
- Calibration - 2 Presses
- Pairing Mode - 3 Presses
- DFU Bootloader - 4 Presses
- Deep Sleep - Press and Hold
LED Codes
- 1 short blink per second - Pairing mode.
- 1 long blink per second - Low battery.
- 2, 3, 4 long blinks every 5 seconds - Error.
- 2 blinks - Sensor error.
- 3 blinks - Connection error.
- 4 blinks - Hardware error.
- Fade on and off - DFU mode.
- Very short blink - Normal operation or wake on motion.
- While plugged in: Pulsing - Charging.
- While plugged in: Solid - Fully charged.
Status Codes
Status codes consist of one or more status values (added together) listed below:
- SYS_STATUS_SENSOR_ERROR - 1,
- SYS_STATUS_CONNECTION_ERROR - 2
- SYS_STATUS_SYSTEM_ERROR - 4
- SYS_STATUS_USB_CONNECTED - 8
- SYS_STATUS_PLUGGED - 16
Protocols
This section offers advanced information about the communication protocol and is not necessary for building your own smol slimes.
HID Protocol
The HID Protocol is not finalized and is subject to change in future versions of the SlimeVR Server.
Tracker -> Server
type |id |packet data |
0 |id |proto |batt |batt_v |temp |brd_id |mcu_id |imu_id |mag_id |fw_date |major |minor |patch |rssi | info
1 |id |q0 |q1 |q2 |q3 |a0 |a1 |a2 | full precision quat
2 |id |batt |batt_v |temp |q_buf |a0 |a1 |a2 |rssi | reduced precision quat
3 |id |svr_stat|status |resv |rssi | status
Tracker <-> Receiver
type |id |packet data |
64 |id |addr |resv | pairing data from tracker
65 |id |addr |addr_rcv |channel |resv | pairing data to tracker
66 |id |addr |time | timing data to tracker (why addr?)
67 |id |addr |cmd_data | some command to tracker? (need to be part of timing?)
Tracker <-> Server
type |id |packet data |
128 |id |addr |cmd_data | some command to tracker? (field too large?)
128 |id |addr |ack | acknowledge?
Receiver <-> Server
type |id |packet data |
192 |id |resv | 192+ should be some interaction b/w receiver and server
254 |resv | filler, this packet is ignored by the server
255 |id |addr |resv | tracker id association
Troubleshooting
Please open a GitHub issue for any firmware bugs or issues in the corresponding repositories.
Check Console Logs
- Launch nRF Connect for Desktop.
- Open the Serial Terminal in nRF Connect.
- Ensure that your tracker is connected to your computer using a cable.
- In the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
Improving Logging
-
In order to change the log level you see (e.g., LOG_DBG instead of just LOG_INF), you may need to edit the
LOG_MODULE_REGISTER
macro at the top of the relevant module or file you are interested in and then recompile the firmware. -
If you need to view the logs prior to connecting to the serial console, you may need to explicitly initiate the logging backend by adding the following code snippet in the main function of main.c:
const struct log_backend *backend = log_backend_get_by_name("log_backend_uart"); log_backend_enable(backend, backend->cb->ctx, CONFIG_LOG_MAX_LEVEL);
Additionally, add the following include to the top of the main.c file:
#include <zephyr/logging/log_ctrl.h>
-
If you notice that the logs are truncated at a certain point, the buffer size may be insufficient. This issue has not been fully resolved yet, as simply increasing
CONFIG_LOG_BUFFER_SIZE
inprj.conf
does not appear to be effective.
SWD Debugging
- Instructions for the Raspberry Pi, Raspberry Pi Pico, ST-Link V2, and other debuggers will be added in the future. Resource: https://github.com/joric/nrfmicro/wiki/Bootloader
J-Link, nRF52/nRF52840 Development Kit, and OB-ARM Debugger
- Install J-Link Software and Documentation Pack: https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
- Download Bootloader HEX File for your device (SuperMini -
nice_nano_bootloader-x.x.x_sxxx_x.x.x.hex
, XIAO -xiao_nrf52840_ble_sense_bootloader-x.x.x_sxxx_x.x.x.hex
): https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases - Connect Debugger to SWD IO, CLK, and GND Pins. (It is safer to power up your device by plugging into USB instead of using the VDD pin)
Flashing/Fixing bricked bootloader
- Launch "J-Flash Lite."
- Target Device: NRF52840_XXAA
- Target Interface: SWD
- Speed: 4000
- Click the "OK" button.
- Click on the "..." button and select the downloaded HEX file.
- Click the "Program Device" button.
RTT/Debugging
- Launch "RTT Viewer."
- Connection to J-Link: USB
- Specify Target Device: NRF52840_XXAA
- Force go on connect: Checked
- Target Interface & Speed: SWD / 4000 hKz
- RTT Control Block: Auto Detect
- Click the "OK" button.
Recommended Hardware/Tools
OB-ARM Debugger: https://www.aliexpress.us/item/3256806507382540.html
Pogo Pin Test Clip (1.5mm Pitch, 4P, Single Row): https://www.aliexpress.us/item/3256805646654844.html
Note: This clip is designed exclusively for SuperMini. While there are less expensive clips available, they do not convert the pins from a 1.5mm pitch to a 2.54mm pitch suitable for Dupont wires.
Links
Discord
SlimeVR Discord: https://discord.gg/SlimeVR
Firmware Source Code
Community projects
Firmware
Name | Author | Description | Links |
---|---|---|---|
Stacked-SmolSlime | LyallUlric | Fork of main branch with firmware tailored for stacked SuperMini trackers. | Github |
Hardware
Name | Author | PCB | Battery | Links |
---|---|---|---|---|
Aed-Slimes | Aed | Yes | LIR2450 | Github |
Gremlin | ManicQuinn | N/A | 401230 110mAh | Github |
Marzipan | Colanns | Yes | 401230 110mAh or 501230 170mAh | Github |
Panini | Tigster | Yes | 601230 180mah | Github |
SlimeNRF-Fuimini | fui | Yes | 100mAh | Github |
SlimeNRF R1/R2 | sctanf | Yes | 602030 300mAh | Github |
SlimeNRF R3 | sctanf | Yes | Unspecified | Oshwlab |
Stacked SmolSlime | LyallUlric | No | 401030 100mAh | Thingiverse |