Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds support for the Challenger 840 BLE board #267

Merged
merged 6 commits into from
Jun 27, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/githubci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
- 'bast_ble'
- 'bluemicro_nrf52833'
- 'bluemicro_nrf52840'
- 'challenger_840_ble'
- 'ebyte_e104_bt5032a'
- 'ebyte_e73_tbb'
- 'electronut_labs_papyr'
Expand All @@ -60,7 +61,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@v3

hathach marked this conversation as resolved.
Show resolved Hide resolved
- name: Checkout Code
uses: actions/checkout@v3
with:
Expand Down Expand Up @@ -97,15 +98,15 @@ jobs:
run: |
pip3 install adafruit-nrfutil uritemplate requests intelhex
pip3 install linkermap/

- name: Build
run: |
make BOARD=${{ matrix.board }} all
make BOARD=${{ matrix.board }} copy-artifact

- name: Linker Map
run: make BOARD=${{ matrix.board }} linkermap

- uses: actions/upload-artifact@v3
with:
name: ${{ matrix.board }}
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ This is a CDC/DFU/UF2 bootloader for nRF52 boards.
- Adafruit Metro nRF52840 Express
- [Akizukidenshi AE-BL652-BO](https://akizukidenshi.com/catalog/g/gK-15567/)
- [Electronut Labs Papyr](https://docs.electronut.in/papyr/)
- [iLabs Challenger 840 BLE](https://ilabs.se/challenger-840-ble-datasheet/)
- [MakerDiary MDK nRF52840 USB Dongle](https://makerdiary.com/products/nrf52840-mdk-usb-dongle)
- [MakerDiary nRF52840 M.2 Module](https://makerdiary.com/products/nrf52840-m2-module)
- [Nordic nRF52840DK PCA10056](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK)
Expand Down Expand Up @@ -79,7 +80,7 @@ For other boards, please check the board definition for details.

### Making your own UF2

To create your own UF2 DFU update image, simply use the [Python conversion script](https://github.com/Microsoft/uf2/blob/master/utils/uf2conv.py) on a .bin file or .hex file, specifying the family as **0xADA52840** (nRF52840) or **0x621E937A** (nRF52833).
To create your own UF2 DFU update image, simply use the [Python conversion script](https://github.com/Microsoft/uf2/blob/master/utils/uf2conv.py) on a .bin file or .hex file, specifying the family as **0xADA52840** (nRF52840) or **0x621E937A** (nRF52833).

```
nRF52840
Expand Down Expand Up @@ -202,4 +203,3 @@ pip install intelhex

Make sure that `nrfjprog` is available from the command-line. This binary is
part of Nordic's nRF5x Command Line Tools.

4 changes: 4 additions & 0 deletions src/boards/boards.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ bool button_pressed(uint32_t pin)
return nrf_gpio_pin_read(pin) == active_state;
}

// This is declared so that a board specific init can be called from here.
void __attribute__((weak)) extern_board_init(void) { }
void board_init(void)
{
// stop LF clock just in case we jump from application without reset
Expand Down Expand Up @@ -93,6 +95,8 @@ void board_init(void)
#if ENABLE_DCDC_1 == 1
NRF_POWER->DCDCEN = 1;
#endif
// Make sure any custom inits are performed
extern_board_init();
hathach marked this conversation as resolved.
Show resolved Hide resolved

// When board is supplied on VDDH (and not VDD), this specifies what voltage the GPIO should run at
// and what voltage is output at VDD. The default (0xffffffff) is 1.8V; typically you'll want
Expand Down
73 changes: 73 additions & 0 deletions src/boards/challenger_840_ble/board.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2018 Ha Thach for Adafruit Industries, 2022 Invector Labs
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef _CHALLENGER_840_BLE_H
#define _CHALLENGER_840_BLE_H

#define _PINNUM(port, pin) ((port)*32 + (pin))

/*------------------------------------------------------------------*/
/* LED
*------------------------------------------------------------------*/
#define LEDS_NUMBER 1
#define LED_PRIMARY_PIN _PINNUM(0, 12)
#define LED_STATE_ON 1

#define LED_NEOPIXEL _PINNUM(1, 8)
#define NEOPIXELS_NUMBER 1
#define BOARD_RGB_BRIGHTNESS 0x040404

/*------------------------------------------------------------------*/
/* BUTTON
*------------------------------------------------------------------*/
#define BUTTONS_NUMBER 2
#define BUTTON_1 _PINNUM(0, 19)
#define BUTTON_2 _PINNUM(0, 8) // Pulls flash cs high
#define BUTTON_PULL NRF_GPIO_PIN_PULLUP

/*------------------------------------------------------------------*/
/* On board LDO control
*------------------------------------------------------------------*/
#define LDO_CONTROL_PIN _PINNUM(1, 9) // Enables external pwr

//--------------------------------------------------------------------+
// BLE OTA
//--------------------------------------------------------------------+
#define BLEDIS_MANUFACTURER "Invector Labs"
#define BLEDIS_MODEL "Challenger 840 BLE"

//--------------------------------------------------------------------+
// USB
//--------------------------------------------------------------------+
#define USB_DESC_VID 0x1209
#define USB_DESC_UF2_PID 0x7380
#define USB_DESC_CDC_ONLY_PID 0x7381

//------------- UF2 -------------//
#define UF2_PRODUCT_NAME "ILabs Challenger 840"
#define UF2_VOLUME_LABEL "CH840BOOT"
#define UF2_BOARD_ID "nRF52840-Challenger-840"
#define UF2_INDEX_URL "https://www.ilabs.se"

#endif // _CHALLENGER_840_BLE_H
1 change: 1 addition & 0 deletions src/boards/challenger_840_ble/board.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MCU_SUB_VARIANT = nrf52840
27 changes: 27 additions & 0 deletions src/boards/challenger_840_ble/pinconfig.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include "boards.h"
#include "board.h"
#include "uf2/configkeys.h"

__attribute__((used, section(".bootloaderConfig")))
const uint32_t bootloaderConfig[] =
{
/* CF2 START */
CFG_MAGIC0, CFG_MAGIC1, // magic
5, 100, // used entries, total entries

204, 0x100000, // FLASH_BYTES = 0x100000
205, 0x40000, // RAM_BYTES = 0x40000
208, (USB_DESC_VID << 16) | USB_DESC_UF2_PID, // BOOTLOADER_BOARD_ID = USB VID+PID, used for verification when updating bootloader via uf2
209, 0xada52840, // UF2_FAMILY = 0xada52840
210, 0x20, // PINS_PORT_SIZE = PA_32

0, 0, 0, 0, 0, 0, 0, 0
/* CF2 END */
};

void extern_board_init(void)
{
// Turn LDO on
nrf_gpio_cfg_output(LDO_CONTROL_PIN);
nrf_gpio_pin_write(LDO_CONTROL_PIN, 1);
}