【NCS随笔】
NCS使用了Zyphyr操作系统,以及设备树的概念,所以有许多客户对于不了解,今天copy一个SPI初始化的例程,给读者看
Nordic官方课程
官方已经写了一个SPI的课程,写的挺详细的可以,也可以看这个课程
https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-5-serial-peripheral-interface-spi/topic/exercise-1-10/
配置宏定义
在 prj.conf 使能SPI
CONFIG_SPI=y
添加overlay
新建一个nrf5l15dk_nrf54l15_cpuapp.overlay
添加需要的内容
&pinctrl {
spi22_default_alt: spi22_default_alt {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
<NRF_PSEL(SPIM_MISO, 1, 10)>,
<NRF_PSEL(SPIM_MOSI, 1, 8)>;
};
};
spi22_sleep_alt: spi22_sleep_alt {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
<NRF_PSEL(SPIM_MISO, 1, 10)>,
<NRF_PSEL(SPIM_MOSI, 1, 8)>;
low-power-enable;
};
};
};
&gpio2 {
status = "okay";
};
&spi22 {
status = "okay";
pinctrl-0 = <&spi22_default_alt>;
pinctrl-1 = <&spi22_sleep_alt>;
pinctrl-names = "default", "sleep";
overrun-character = <0x00>;
cs-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
easydma-maxcnt-bits = < 0x400 >;
dut_spi_dt: test-spi-dev@0 {
compatible = "vnd,spi-device";
reg = <0>;
spi-max-frequency = <8000000>;
};
};
main函数
/* SPI 描述结构体 */
#define SPI_OP (SPI_WORD_SET(8)|SPI_TRANSFER_MSB)
#define SPIM_OP (SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB |SPI_WORD_SET(8))
static struct spi_dt_spec spim = SPI_DT_SPEC_GET(DT_NODELABEL(dut_spi_dt), SPIM_OP, 0);
/**
* @brief st7735发送命令
*/
static void st7735_send_command(uint8_t command)
{
// TFT_DC_COMMAND;
struct spi_buf tx_spi_buf = { .buf = (void *)&command, .len = 1 };
struct spi_buf_set tx_spi_buf_set = {.buffers = &tx_spi_buf, .count = 1 };
int ret = spi_write_dt(&spim, &tx_spi_buf_set);
if (ret < 0) {
LOG_ERR("SPI write data failed: %d", ret);
}
}
int main(void)
{
printf("Hello World! %s\n", CONFIG_BOARD_TARGET);
/* 检查设备是否准备好 */
if (!spi_is_ready_dt(&spim)) {
LOG_ERR("spi is not ready");
return false;
}
while (1)
{
st7735_send_command(0x55);
k_sleep(K_MSEC(500));
printf("mr_st7735_send_command:0x55\n");
}
return 0;
}
使用nRFX库
还有一个使用旧的nRF52_SDK库的办法,可以绕过zephyr的设备树和API,其实zephyr底层也是调用nRF库
宏配置
CONFIG_NRFX_SPIM22=y
&spi22 {
status = "okay";
compatible = "nordic,nrf-spim";
pinctrl-0 = <&spi_dummy>;
};