nRF54L15 The CS pin of the SPI cannot be pulled low.



&pinctrl {

spi21_imu_default: spi21_imu_default {

group1 {

psels = <NRF_PSEL(SPIM_SCK, 1, 11)>,

<NRF_PSEL(SPIM_MISO, 1, 5)>,

<NRF_PSEL(SPIM_MOSI, 1, 12)>;

// nordic,drive-mode = <NRF_DRIVE_E0E1>;

};

};

spi21_imu_sleep: spi21_imu_sleep {

group1 {

psels = <NRF_PSEL(SPIM_SCK, 1, 11)>,

<NRF_PSEL(SPIM_MISO, 1, 5)>,

<NRF_PSEL(SPIM_MOSI, 1, 12)>;

// nordic,drive-mode = <NRF_DRIVE_E0E1>;

low-power-enable;

};

};

};

&spi21 {

status = "okay";

pinctrl-0 = <&spi21_imu_default>;

pinctrl-1 = <&spi21_imu_sleep>;

pinctrl-names = "default", "sleep";

cs-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;

overrun-character = <0x00>;

bmi323: bmi323@0 {

status = "okay";

compatible = "bosch,bmi323";

reg = <0>;

spi-max-frequency = <8000000>;

};

};

int spi_transceive(const struct spi_dt_spec *spi_dev,

const uint8_t *tx_data, size_t tx_len,

uint8_t *rx_data, size_t rx_len)

{

if (!artoo_spi_is_ready(spi_dev)) {

return -ENODEV;

}

const struct spi_buf tx_buf = {

.buf = (void *)tx_data,

.len = tx_len,

};

const struct spi_buf rx_buf = {

.buf = rx_data,

.len = rx_len,

};

const struct spi_buf_set tx_set = {

.buffers = &tx_buf,

.count = 1,

};

const struct spi_buf_set rx_set = {

.buffers = &rx_buf,

.count = 1,

};

return spi_transceive_dt(spi_dev, &tx_set, &rx_set);

}

int bmi323_read_reg16(uint8_t reg, uint16_t *value)

{

if (bmi323_spi_dev == NULL || value == NULL) {

return -EINVAL;

}

uint8_t tx_buf[4] = {

reg | BMI323_SPI_READ_BIT,

0x00,

0x00,

0x00,

};

uint8_t rx_buf[4] = { 0 };

int err = spi_transceive(bmi323_spi_dev, tx_buf, sizeof(tx_buf),

rx_buf, sizeof(rx_buf));

if (err) {

return err;

}

*value = ((uint16_t)rx_buf[3] << 8) | rx_buf[2];

return 0;

}

uint16_t regs[4] = {0};

bmi323_read_reg16(0x20, &regs[0]);

bmi323_read_reg16(0x21, &regs[1]);

bmi323_read_reg16(0x01, &regs[2]);

bmi323_read_reg16(0x02, &regs[3]);

printk("ACC_CONF=0x%04x GYR_CONF=0x%04x, ERR=0x%04x STATUS=0x%04x\n", regs[0], regs[1], regs[2], regs[3]);

// ACC_CONF=0x7188 GYR_CONF=0x71c8, ERR=0xffff STATUS=0xffff

nRF54L15, ncs\v3.3.0\nrf\samples\bluetooth\peripheral_lbs

spi21, The third time reading the register value is 0xffff, and the SPI CS pin cannot be pulled low.

Related