一、nrf52 spi简介
SPI(Serial Peripheral Interface) 称为串行外设接口。 SPI 总线系统是一种同步串行外设接口,它可以使 MCU 与各种外围设备以串行方式进行通信以交换信息。SPI 接口可以连接很多类型的外围设备, 比如包括 FLASHRAM、 网络控制器、 LCD 显示驱动器、 A/D 转换器和 MCU 等具有 SPI 接口的设备 。
1、总线接口
SPI管脚 | 方向 | 描述 |
---|---|---|
MISO | 主机输入/从机输出 | 主机读取从机数据的通道 |
MOSI | 主机输出/从机输入 | 主机发送数据到从机的通道 |
SCK | 主机输出 | 主机提供的总线时钟信号 |
CS | 主机输出 | 主机选择从机设备的片选信号 |
SPI总线可以挂载多个设备,主机通过CS从机选择端口进行从设备的区分,nrf52832也是如此,SPI主机通过多个io去分别连接不同SPI从机的CS端口,使用哪个从机设备把它对应的CS IO口拉低即可。拉高表示释放该器件对SPI总线的占用。
2、SPI数据传输方式
- 时钟极性控制为CPOL:SPI总线空闲时,时钟线SCK的电平状态称为时钟极性。
CPOL = 1:SPI总线空闲时,时钟线SCK的电平状态为低电平;
CPOL = 0:SPI总线空闲时,时钟线SCK的电平状态为高电平;
- 时钟相位控制位 CPHA: 决定了 SPI 总线在时钟先 SCK 的第几个跳变沿开始采样数据的。
CPHA=0: SPI 总线在时钟先 SCK 的第 1 个跳变沿开始采样数据;
CPHA=1: SPI 总线在时钟先 SCK 的第 2 个跳变沿开始采样数据;
所以它形成如下四种数据传输模式:
二、硬件spi
1、sdk_config.h配置
2、添加spi驱动文件
nrfx_spi.c 新版本SPI兼容库
nrfx_spim.c 新版本SPIM兼容库
nrf_drv_spi.c 老版本SPI基础库
3、驱动文件
per_spi.c
/**
******************************************************************************
* @file per_spi.c
* @author wfagly
* @brief
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "per_spi.h"
#include "nrf_drv_spi.h"
#include "nrfx_spim.h"
#define SPI_MISO_PIN 29
#define SPI_MOSI_PIN 28
#