We have designed a custom board based on the NRF5340 with the following pinout. Everything flashes without error using the sample rpmsg image for the netcpu and the sample peripheral_ht for the appcpu but I cannot seem to get the bluetooth to work. I have also attached our board.c file for our custom board. Is there something obvious that I'm missing here? Let me know if there's any additional information that I can provide that would help.
/*
* Copyright (c) 2018 Nordic Semiconductor ASA.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <init.h>
#include <hal/nrf_power.h>
#include <drivers/gpio.h>
#include <logging/log.h>
LOG_MODULE_REGISTER(board_control, 3);
static int init(struct device *dev)
{
int err=0;
struct device *p0;
struct device *p1;
nrf_power_dcdcen_set(NRF_POWER, true);
nrf_power_dcdcen_vddh_set(NRF_POWER, false);
p0=device_get_binding(DT_GPIO_P0_DEV_NAME);
if(!p0) {
LOG_ERR("GPIO device " DT_GPIO_P0_DEV_NAME " not found!");
return -EIO;
}
p1=device_get_binding(DT_GPIO_P1_DEV_NAME);
if(!p1) {
LOG_ERR("GPIO device " DT_GPIO_P1_DEV_NAME " not found!");
return -EIO;
}
// Standby output to LED driver
err=gpio_pin_write(p0, 0x00, 1);
if(err) return 0x00;
err=gpio_pin_configure(p0, 0x00, GPIO_DIR_OUT | GPIO_DS_DISCONNECT_LOW);
if(err) return 0x00;
// Unused
err=gpio_pin_configure(p0, 0x01, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x01;
// Debug uart TX
err=gpio_pin_write(p0, 0x02, 0);
if(err) return 0x02;
err=gpio_pin_configure(p1, 0x02, GPIO_DIR_OUT);
if(err) return 0x02;
// Debug uart RX
err=gpio_pin_configure(p0, 0x03, GPIO_DIR_IN);
if(err) return 0x03;
// Unused
err=gpio_pin_configure(p0, 0x04, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x04;
// Unused
err=gpio_pin_configure(p0, 0x05, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x05;
// Unused
err=gpio_pin_configure(p0, 0x06, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x06;
// Unused
err=gpio_pin_configure(p0, 0x07, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x07;
// Unused
err=gpio_pin_configure(p0, 0x08, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x08;
// SCL open-drain line
err=gpio_pin_configure(p0, 0x09, GPIO_DIR_IN | GPIO_DS_DISCONNECT_HIGH);
if(err) return 0x09;
// Unused
err=gpio_pin_configure(p0, 0x0A, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x0A;
// Unused
err=gpio_pin_configure(p0, 0x0B, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x0B;
// Unused
err=gpio_pin_configure(p0, 0x0C, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x0C;
// CHG LED input
err=gpio_pin_configure(p0, 0x0D, GPIO_DIR_IN);
if(err) return 0x0D;
// Unused
err=gpio_pin_configure(p0, 0x0E, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x0E;
// Unused
err=gpio_pin_configure(p0, 0x0F, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x0F;
// Output to enable battery input to ADC
err=gpio_pin_write(p0, 0x10, 0);
if(err) return 0x10;
err=gpio_pin_configure(p0, 0x10, GPIO_DIR_OUT | GPIO_DS_DISCONNECT_LOW);
if(err) return 0x10;
// Unused
err=gpio_pin_configure(p0, 0x11, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x11;
// Unused
err=gpio_pin_configure(p0, 0x12, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x12;
// TXD to GPS
err=gpio_pin_write(p0, 0x13, 1);
if(err) return 0x13;
err=gpio_pin_configure(p0, 0x13, GPIO_DIR_OUT);
if(err) return 0x13;
// Unused
err=gpio_pin_configure(p0, 0x14, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x14;
// RX from GPS
err=gpio_pin_configure(p0, 0x15, GPIO_DIR_IN);
if(err) return 0x15;
// Unused
err=gpio_pin_configure(p0, 0x16, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x16;
// Unused
err=gpio_pin_configure(p0, 0x17, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x17;
// CS to memory chip, active-low
err=gpio_pin_write(p0, 0x18, 1);
if(err) return 0x18;
err=gpio_pin_configure(p0, 0x18, GPIO_DIR_OUT);
if(err) return 0x18;
// Unused
err=gpio_pin_configure(p0, 0x19, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x19;
// DO from memory chip
err=gpio_pin_configure(p0, 0x1A, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x1A;
// Unused
err=gpio_pin_configure(p0, 0x1B, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x1B;
// Battery ADC input
err=gpio_pin_configure(p0, 0x1C, GPIO_DIR_IN);
if(err) return 0x1C;
// Unused...eventually COEX1
err=gpio_pin_configure(p0, 0x1D, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x1D;
// Unused
err=gpio_pin_configure(p0, 0x1E, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x1E;
// Unused
err=gpio_pin_configure(p0, 0x1F, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x1F;
/***************END OF P0******************/
// Unused
err=gpio_pin_configure(p1, 0x00, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x20;
// Unused
err=gpio_pin_configure(p1, 0x01, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x21;
// SDA open-drain line
err=gpio_pin_configure(p1, 0x02, GPIO_DIR_IN | GPIO_DS_DISCONNECT_HIGH);
if(err) return 0x22;
// Unused
err=gpio_pin_configure(p1, 0x03, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x23;
// IMU interrupt input
err=gpio_pin_configure(p1, 0x04, GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE | GPIO_INT_ACTIVE_HIGH);
if(err) return 0x24;
// Unused
err=gpio_pin_configure(p1, 0x05, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x25;
// FDI to memory chip
err=gpio_pin_write(p1, 0x06, 0);
if(err) return 0x26;
err=gpio_pin_configure(p1, 0x06, GPIO_DIR_OUT);
if(err) return 0x26;
// Unused
err=gpio_pin_configure(p1, 0x07, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x27;
// FCK to memory chip
err=gpio_pin_write(p1, 0x08, 0);
if(err) return 0x28;
err=gpio_pin_configure(p1, 0x08, GPIO_DIR_OUT);
if(err) return 0x28;
// Unused
err=gpio_pin_configure(p1, 0x09, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x29;
// Unused
err=gpio_pin_configure(p1, 0x0A, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2A;
// Unused
err=gpio_pin_configure(p1, 0x0B, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2B;
// Unused
err=gpio_pin_configure(p1, 0x0C, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2C;
// Unused
err=gpio_pin_configure(p1, 0x0D, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2D;
// Unused
err=gpio_pin_configure(p1, 0x0E, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2E;
// Unused
err=gpio_pin_configure(p1, 0x0F, GPIO_DIR_IN | GPIO_PUD_PULL_DOWN);
if(err) return 0x2F;
LOG_INF("Board configured.");
return 0;
}
SYS_INIT(init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE);
|
Pin |
Function |
|
P0.00 |
Standby output LED driver |
|
P0.01 |
Unused |
|
P0.02 |
Debug UART TX |
|
P0.03 |
Debug UART RX |
|
P0.04 |
Unused |
|
P0.05 |
Unused |
|
P0.06 |
Unused |
|
P0.07 |
Unused |
|
P0.08 |
Unused |
|
P0.09 |
SCL open drain |
|
P0.10 |
Unused |
|
P0.11 |
Unused |
|
P0.12 |
Unused |
|
P0.13 |
Charge LED input |
|
P0.14 |
Unused |
|
P0.15 |
Unused |
|
P0.16 |
Output enable battery to ADC |
|
P0.17 |
Unused |
|
P0.18 |
Unused |
|
P0.19 |
TX to GPS |
|
P0.20 |
Unused |
|
P0.21 |
RX from GPS |
|
P0.22 |
Unused |
|
P0.23 |
Unused |
|
P0.24 |
CS memory, active low |
|
P0.25 |
Unused |
|
P0.26 |
DO memory |
|
P0.27 |
Unused |
|
P0.28 |
Battery ADC input |
|
P0.29 |
Unused |
|
P0.30 |
Unused |
|
P0.31 |
Unused |
|
P1.00 |
Unused |
|
P1.01 |
Unused |
|
P1.02 |
SDA open drain |
|
P1.03 |
Unused |
|
P1.04 |
IMU interrupt input |
|
P1.05 |
Unused |
|
P1.06 |
FDI memory |
|
P1.07 |
Unused |
|
P1.08 |
FCK memory |
|
P1.09 |
Unused |
|
P1.10 |
Unused |
|
P1.11 |
Unused |
|
P1.12 |
Unused |
|
P1.13 |
Unused |
|
P1.14 |
Unused |
|
P1.15 |
Unused |