SPI
模块功能介绍
SPI是一种全双工同步串行接口,可以工作在Master模式和Slave模式,SPI主要有以下特点: * 全双工同步串行接口 * Master/Slave模式可配置 * 支持最大96MHz时钟频率 * 支持SPI Mode0/1/2/3 * 片选和时钟的极性和相位可配置 * 5个时钟源 * 支持中断或DMA传输 * 支持多片选 * 支持Standard Single/Dual/Quad SPI,FIFO深度64B * 支持BIT模式,用于3Wire场景,支持可编程0~32bits帧长度(仅支持Master模式,且不支持DMA和FIFO功能) * 支持DBI模式,用于显示设备场景,用于传输视频数据
模块配置介绍
目前有两种方法进行引脚配置:sys_config
和平台头文件。
这两种方法选其中一种使用即可,在没有sys_config
文件配置时,默认使用平台头文件。当检测到有sys_config
文件并有相关关键字时,自动切换为该方法。
sys_config文件引脚配置说明
引脚配置在 source/project/方案/configs/sys_config.fex
[spi1]
spi1_used = 1
spi1_cs_number = 1
spi1_cs_bitmap = 1
spi1_cs0 = port:PA02<2><0><2><default>
spi1_sclk = port:PA03<2><0><2><default>
spi1_mosi = port:PA04<2><0><2><default>
spi1_miso = port:PA05<2><0><2><default>
spi1_hold = port:PA06<2><0><2><default>
spi1_wp = port:PA07<2><0><2><default>
平台头文件资源配置说明
引脚配置在 rtos-hal/hal/source/spi/platform/spi_sun20iw2.h
static struct sunxi_spi_params_t g_sunxi_spi_params[] = {
/* SPI0 */
{ .port = 0,
.reg_base = SUNXI_SPI0_PBASE, .irq_num = SUNXI_IRQ_SPI0, .gpio_num = 6,
.pclk_pll_type = HAL_SUNXI_AON_CCU, .pclk_pll_id = CLK_DEVICE,
.pclk_hosc_type = HAL_SUNXI_AON_CCU, .pclk_hosc_id = CLK_HOSC,
.bus_type = HAL_SUNXI_CCU, .bus_id = CLK_BUS_SPI0,
.mclk_type = HAL_SUNXI_CCU, .mclk_id = CLK_SPI0,
.reset_type = HAL_SUNXI_RESET, .reset_id = RST_SPI0,
.gpio_clk = GPIOB(6), .gpio_mosi = GPIOB(5), .gpio_miso = GPIOB(15),
.gpio_cs0 = GPIOB(4), .gpio_wp = GPIOB(14), .gpio_hold = GPIOB(7),
.mux = 4, .driv_level = GPIO_DRIVING_LEVEL2,
#ifdef CONFIG_DRIVERS_DMA
.drq_tx = DRQDST_SPI0_TX, .drq_rx = DRQSRC_SPI0_RX,
#endif
.rx_fifosize = 64, .tx_fifosize = 64, .dma_force_fixed = true,
},
......
};
menuconfig 配置说明
配置路径如下:
Kernel Setup --->
Drivers Setup --->
SoC HAL Drivers --->
SPI Devices --->
源码结构介绍
SPI 模块代码结构如下所示:
rtos-hal/
|--include/hal/sunxi_hal_spi.h // hal层数据结构和API接口相关头文件
|--hal/source/spi/platform_spi.h // hal层平台相关头文件
|--hal/source/spi/platform/spi_xxx.h // hal层平台信息相关头文件
|--hal/source/spi/common_spi.h // hal层控制器寄存器相关头文件
|--hal/source/spi/hal_spi.c // hal层接口驱动代码
|
|--hal/test/spi/test_spi.c // hal层接口测试代码
|--hal/test/spi/spi_slave_driver.c // hal层slave模式驱动代码
|--hal/test/spi/test_spi_slave.c // hal层slave模式测试代码
模块接口说明
需要包含头文件:
#include <hal/sunxi_hal_spi.h>