SPI配置
#define SPI_INSTANCE_AG 2 /**< SPI instance index. */
static const nrf_drv_spi_t spi_ag = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE_AG); /**< SPI instance. */
SPI初始化
void spi_init(void)
{
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = DIS_CS;
spi_config.miso_pin = DIS_SDO;
spi_config.mosi_pin = DIS_SDI;
spi_config.sck_pin = DIS_SCK;
spi_config.mode = NRF_DRV_SPI_MODE_0;
spi_config.frequency = NRF_DRV_SPI_FREQ_8M;
APP_ERROR_CHECK(nrf_drv_spi_init(&spi_ag, &spi_config, NULL, NULL));
}
读操作
int32_t read_from_spi(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len)
{
ret_code_t err_code;
uint8_t *data = (uint8_t *) malloc(len + 1);
uint8_t *tmp = (uint8_t *) malloc(len + 1);
data[0] = 0x80 | reg;
//data[1] = len;
memset(&data[1], 0x55, len);
err_code = nrf_drv_spi_transfer(&spi_ag, data, len + 1, tmp, len + 1);
memcpy(bufp, tmp + 1, len);
free(data);
free(tmp);
return 0;
}
nrf_drv_spi_transfer(&spi_ag, data, len + 1, tmp, len + 1); 注意这里的len+1, 1是addr的长度,并且RX, TX的长度要一致。
写操作
int32_t write_to_spi(void *handle, uint8_t reg, const uint8_t *bufp,
uint16_t len)
{
ret_code_t err_code;
uint8_t i;
uint8_t *data = (uint8_t *) malloc(len + 1);
uint8_t *tmp = (uint8_t *) malloc(len + 1);
data[0] = reg;
for (i = 0; i < len; i++)
data[ i + 1 ] = *(bufp + i);
err_code = nrf_drv_spi_transfer(&spi_ag, data, len + 1, tmp, len + 1);
free(data);
free(tmp);
return 0;
}
nrf_drv_spi_transfer(&spi_ag, data, len + 1, tmp, len + 1); 注意这里的len+1, 1是addr的长度,并且RX, TX的长度要一致。