Hi; I'm trying to develop an application with the nrf52840 as a co-processor. We decided to use the nrf52 as a SPI slave and a SAMD21 as a SPI master. I set up a quick Arduino sketch on the SAMD21 to try to communicate with the device.
I set up a SPIS device with this in my config:
CONFIG_SPI=y #CONFIG_SPI_ASYNC=y CONFIG_SPI_LOG_LEVEL_INF=y CONFIG_SPI_0=y CONFIG_SPI_SLAVE=y CONFIG_SPI_NRFX=y CONFIG_SPI_0_NRF_SPIS=y
My overlay file is:
&spi0 {
compatible = "nordic,nrf-spis";
status = "okay";
sck-pin = <26>;
mosi-pin = <29>;
miso-pin = <30>;
csn-pin = <31>;
def-char = <0x00>;
};I've set up a polling thread to check the SPI bus for transactions.
static int spis_init(void) {
spis_dev = device_get_binding(DT_ALIAS_SPI_0_LABEL);
if (!spis_dev){
LOG_ERR("MISSING SPIS DEVICE");
return -EINVAL;
}
return 0;
}
static u8_t txmsg[SPI_MAX_MSG_LEN] = "sample";
static u8_t rxmsg[SPI_MAX_MSG_LEN];
static void spis_thread(void *p1, void *p2, void *p3) {
ARG_UNUSED(p1);
ARG_UNUSED(p2);
ARG_UNUSED(p3);
int err;
for (;;) {
tx.buf = txmsg;
tx.len = 250;
rx.buf = rxmsg;
tx.len = 250;
err = spi_transceive(spis_dev, &spi_cfg, &tx_bufs, &rx_bufs);
if (err >= 0) {
LOG_ERR("stuff: %s %s %d", log_strdup(txmsg), log_strdup(rxmsg), err);
}
}
}
void main(void) {
int err;
k_tid_t spis_id;
err = spis_init();
if (err != 0) {
LOG_WRN("SPIS device fail");
return;
}
/**
* Set up other devices etc...
*/
spis_id = k_thread_create(&spis_thread_data, spis_thread_stack,
K_THREAD_STACK_SIZEOF(spis_thread_stack),
spis_thread, NULL, NULL, NULL, K_PRIO_COOP(7),
0, K_NO_WAIT);
k_thread_name_set(&spis_thread_data, "spis_thread");
u32_t dtr = 0U;
while (1) {
if (!dtr) {
uart_line_ctrl_get(usb_dev, UART_LINE_CTRL_DTR, &dtr);
}
k_usleep(1000);
}
}
The SAMD21 receives the "sample" string on sending information through, but the nRF doesn't receive any data. Adding debug statements to the SPIS event handler shows that p_event->rx_amount == 0 on NRFX_SPIS_XFER_DONE, but instrumenting the SPI bus with a logic analyzer shows both messages sent on MISO and MOSI lines at the correct voltage levels.
Are there any suggestions as to what the problem might be?