MSPI使用参考

Version 1.1


1. 概述

MSPI即Master SPI,仅支持SoC做主设备,MSPI正常模式支持全双工,DMA模式仅支持半双工。

公板支持2组SPI,SPI0支持5组mode,SPI1支持8组mode。

MSPI驱动代码路径:rtk/proj/sc/driver/sysdriver/mspi/


2. 配置


2.1. sysdesc配置

根据HW Checklist中的padmux table选择SPI的输出pad,以MSPI0的mode2为例。

对应的引脚为:

Pad Mode
PAD_SR_IO_00 SPI0_CZ
PAD_SR_IO_01 SPI0_CK
PAD_SR_IO_02 SPI0_DI
PAD_SR_IO_03 SPI0_DO

需要确认当前使用的product config是使用的何种sysdesc文件,可在rtk/proj/mak/product中找到当前工程的配置,打开配置搜索CONFIG_SYSDESC_SELECT确认当前使用的sysdesc文件。例如,当前工程使用pioneer3_ssc020a_64_freertos_smp_isw_usbdev,其对应的sysdesc文件为CONFIG_SYSDESC_SELECT = "pioneer3-ssc020a-s01b.sys",那么就去修改这个文件。

sysdesc配置文件路径:rtk/proj/sc/driver/sysdriver/sysdesc/hal/pioneer3/pub/

配置示例:

如上图,<mspiX>表示MSPI栏目,X的值为0和1,例如<mspi0>表示MSPI0,<mspi1>表示MSPI1。

用户只需关心两个选项[use_dma_u8][mspi_padmux_u8]

[use_dma_u8]:表示是否启用DMA。例如<mspi0>[use_dma_u8] 1;,表示MSPI0启用DMA发送。

[mspi_padmux_u8]:表示padmux值。例如<mspi0>[mspi_padmux_u8] 2;,表示MSPI0被复用成mode 2。


2.2. MSPI API

MSPI API部分详见rtk/proj/sc/driver/sysdriver/mspi/drv/inc/drv_mspi.h


2.3. 范例

可以参考rtk/proj/sc/driver/sysdriver/mspi/drv/src/drv_mspi_test.c中的测试程序进行使用,可以启用#define SYSDRIVER_MSPI_UNITTEST以将测试程序加入编译:

2.3.1. 初始化MSPI

spi_setup_slave()初始化MSPI设备后返回一个spi_slave结构体指针,调用其他API都需要将获得的spi_setup结构体指针作为参数传入。

2.3.2. MSPI同步/异步读

spi同步读和spi异步读,异步读不给出CbFunc则会在传输完成调用默认CbFunc。

2.3.3. MSPI同步/异步写

spi同步写和spi异步写,异步写不给出CbFunc则会在传输完成调用默认CbFunc。

2.3.4. MSPI Padmux配置

spi设置padmux mode,pad值为要设置的mode值。

2.3.5. MSPI测试命令

使用MSPI测试命令打开MSPI0,片选高,最大频率550000Hz,模式0,使用DMA发送字符串"1234567890"

mspitest open 0 1 550000 0 1
mspitest write 1234567890