MSPI使用参考
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