I'm trying to use both uart0 and uart1 on nrf5340 (only App core) but I get this message: UART_RX_BUF_REQUEST event, but not the error. I have also tried to pass another buffer but it keeps sending that message.
This is my overlay file.
&pinctrl {
spi4_default: spi4_default {
group1 {
nordic,drive-mode = <NRF_DRIVE_H0H1>;
psels = <NRF_PSEL(SPIM_MOSI, 0, 9)>,
<NRF_PSEL(SPIM_SCK, 0, 8)>,
<NRF_PSEL(SPIM_MISO, 0, 12)>;
};
};
spi4_sleep: spi4_sleep {
group1 {
nordic,drive-mode = <NRF_DRIVE_H0H1>;
psels = <NRF_PSEL(SPIM_MOSI, 0, 9)>,
<NRF_PSEL(SPIM_SCK, 0, 8)>,
<NRF_PSEL(SPIM_MISO, 0, 12)>;
low-power-enable;
};
};
spi2_default: spi2_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 6)>,
<NRF_PSEL(SPIM_MOSI, 0, 5)>,
<NRF_PSEL(SPIM_MISO, 0, 26)>;
};
};
spi2_sleep: spi2_sleep {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 6)>,
<NRF_PSEL(SPIM_MOSI, 0, 5)>,
<NRF_PSEL(SPIM_MISO, 0, 26)>;
low-power-enable;
};
};
uart0_default: uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 20)>,
<NRF_PSEL(UART_RTS, 0, 19)>;
};
group2 {
psels = <NRF_PSEL(UART_RX, 0, 22)>,
<NRF_PSEL(UART_CTS, 0, 21)>;
bias-pull-up;
};
};
uart0_sleep: uart0_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 20)>,
<NRF_PSEL(UART_RX, 0, 22)>,
<NRF_PSEL(UART_RTS, 0, 19)>,
<NRF_PSEL(UART_CTS, 0, 21)>;
low-power-enable;
};
};
uart1_default: uart1_default {
group1 {
psels = <NRF_PSEL(UART_TX, 1, 1)>;
};
group2 {
psels = <NRF_PSEL(UART_RX, 1, 0)>;
bias-pull-up;
};
};
uart1_sleep: uart1_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 1, 1)>,
<NRF_PSEL(UART_RX, 1, 0)>;
low-power-enable;
};
};
};
&spi4 {
cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
compatible = "nordic,nrf-spim";
max-frequency = <DT_FREQ_M(16)>;
#address-cells = <1>;
#size-cells = <0>;
rx-delay-supported;
rx-delay = <0>;
status = "okay";
pinctrl-0 = <&spi4_default>;
pinctrl-1 = <&spi4_sleep>;
pinctrl-names = "default", "sleep";
};
&spi2 {
compatible = "nordic,nrf-spim";
status = "okay";
pinctrl-0 = <&spi2_default>;
pinctrl-1 = <&spi2_sleep>;
interrupts = <43 NRF_DEFAULT_IRQ_PRIORITY>; // 9 for spi1
max-frequency = <DT_FREQ_M(8)>;
pinctrl-names = "default", "sleep";
cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
sdhc0: sdhc@0 {
compatible = "zephyr,sdhc-spi-slot";
reg = <0>;
status = "okay";
spi-max-frequency = <25000000>;
mmc {
compatible = "zephyr,sdmmc-disk";
status = "okay";
};
};
};
&uart0 {
status = "okay";
compatible = "nordic,nrf-uarte";
current-speed = <115200>; //921600 //112500
pinctrl-0 = <&uart0_default>;
pinctrl-1 = <&uart0_sleep>;
pinctrl-names = "default", "sleep";
};
&button2 {
//gpios = <&gpio0 7 0>;
status = "disabled";
};
&button3 {
gpios = <&gpio0 27 0>;
status = "disabled";
};
&timer0 {
status = "okay";
};
&timer1 {
status ="okay";
};
&timer2 {
status ="okay";
};
&i2c0 { status = "disabled";};
&spi0 { status = "disabled";};
&i2c1 { status = "disabled";};
&adc { status = "disabled";};
&qspi { status = "disabled";};
&gpio_fwd {
uart {
gpios = <&gpio1 0 0>, <&gpio1 1 0>, <&gpio1 2 0>, <&gpio1 3 0>;
};
status = "okay";
};
&uart1 {
status = "okay";
compatible = "nordic,nrf-uarte";
current-speed = <115200>; //921600 //112500
pinctrl-0 = <&uart1_default>;
pinctrl-1 = <&uart1_sleep>;
pinctrl-names = "default", "sleep";
};
/ {
chosen {
zephyr,shell-uart = &uart1;
};
aliases {
led0 = &led0;
sw0 = &button0;
};
};
This is the prj.conf file.
CONFIG_GPIO=y # VCOM display CONFIG_UART_NRFX=y CONFIG_SERIAL=y CONFIG_UART_ASYNC_API=y CONFIG_PRINTK=y CONFIG_BOOT_BANNER=n CONFIG_UART_CONSOLE=y CONFIG_NRFX_SPIM4=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_LOG=y #CONFIG_ASSERT=y CONFIG_MAIN_STACK_SIZE=200000 CONFIG_SPI=y CONFIG_NRF_APPROTECT_LOCK=y #CONFIG_UART_0_ASYNC=y #CONFIG_UART_0_INTERRUPT_DRIVEN=n #CONFIG_NRFX_UARTE0=y CONFIG_UART_1_ASYNC=y CONFIG_UART_1_INTERRUPT_DRIVEN=n CONFIG_NRFX_UARTE1=y CONFIG_UART_MUX_DEVICE_NAME="uart1"
This is how I have defined the uart1 callback function.
const struct device *uart_user = DEVICE_DT_GET(DT_NODELABEL(uart1));
static void uart_user_cb(const struct device *dev, struct uart_event *evt, void *user_data)
{
switch (evt->type) {
case UART_RX_RDY:
printk("UART_RX_RDY event\n");
break;
case UART_RX_DISABLED:
printk("UART_RX_DISABLED event\n");
break;
case UART_RX_BUF_REQUEST:
printk("UART_RX_BUF_REQUEST event\n");
int err = uart_rx_buf_rsp(uart_user, rx_buf2, sizeof(rx_buf2));
if (err) {
printk("uart_rx_buf_rsp errored with code %d.\n", err);
}
break;
default:
printk("Evento UART inatteso: %d\n", evt->type);
break;
}
}