SPI 调试指南
SPI 硬件支持
X5 共支持 7 路 SPI 控制器,其中 6 路(spi0-spi5)位于 LSIO 子系统,1 路(spi6)位于 DSP 子系统。 所有 SPI 控制器均支持主/从模式。 RDK X5 上留出来的引脚主要是在 40pin 中,分别是SPI1和SPI2,可以参考 RDK X5 40pin 介绍 其他的 SPI 口并不在 40pin 上。
Linux SPI 驱动框架介绍
- spi driver 层:主要实现对 SPI 硬件 IP 的操作,另外还实现了 spi framework 定义的接口。
- spi framework 层:可以理解为 spi driver 的适配层,对下层定义了一组 driver 层需要实现的接口,对上提供了通用接口屏蔽了硬件细节。
- spi char device 层:为用户空间提供节点,方便用户空间与内核空间进行数据交换。
代码路径
X5 使用新思的 ssi 控制器,驱动代码位于:drivers/spi 目录下,主要有三个文件:
drivers/spi/spi-dw-core.c
drivers/spi/spi-dw-mmio.c
drivers/spi/spi-dw-dma.c
控制器硬件说明
X5 的所有 SPI 均控制器可以运行 Master/Slave 模式。Master 及 Slave 的运行限制如下:
- SPI-Master:最高频率 50MHz
- SPI-Slave:最高频率 32MHz
X5 的所有 SPI 控制器均可以运行在中断/DMA 模式。中断模式运行限制如下:
- SPI-Slave:
- Rx:CPU 定频在 1.5GHz 时,可以达到 32MHz
- Tx:CPU 定频在 1.5GHz 时,可以达到 16MHz
- SPI-Master:均可正常通讯。
DTS 配置说明
X5 SPI 控制器的设备树定义位于 SDK 包的 kernel 文件夹下的arch/arm64/boot/dts/hobot/x5.dtsi文件内。
注意:x5.dtsi 中的节点主要声明 SoC 共有特性,和具体电路板无关,一般情况下不用修改。
X5 SPI 控制器默认关闭,请根据实际硬件情况,在对应的 DTS 文件内使能相应的 SPI 控制器。
以使能 SPI2 为例:
&spi2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi2>;
};
DTS 配置 SPI 使用 DMA
如果需要使用 DMA,则需要在对应的 DTS 文件内绑定对应的 DMA 握手,以 SPI2 为例:
&spi2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi2>;
dma-names = "tx", "rx";
dmas = <&axi_dmac 25>, <&axi_dmac 24>;
};
SPI6 绑定时需要指定 dsp_axi_dma,如下所示:
&spi6 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_dsp_spi>;
dma-names = "tx", "rx";
dmas = <&dsp_axi_dma 21>, <&dsp_axi_dma 20>;
};
SPI DMA 握手列表如下:
| SPI | DMA TX | DMA RX |
|---|---|---|
| SPI0 | 20 | 21 |
| SPI1 | 22 | 23 |
| SPI2 | 24 | 25 |
| SPI3 | 26 | 27 |
| SPI4 | 28 | 29 |
| SPI5 | 30 | 31 |
| SPI6 | 21 | 22 |
SPI 功能验证
本小节主要介绍 X5 SPI 的功能验证,主要包括环境配置,测试命令执行及测试代码等。