SPI 配置
3 Dec 2024
Read time: 2 minute(s)
内核配置
使能 SPI 相关的内核驱动,可在通过下列命令进行配置(在 SDK 顶层目录执行):
make linux-menuconfig
在内核的配置界面中,进行下列的选择:
Device Drivers --->
[*] SPI support --->
<*> ArtInChip SPI controller
......
[*] DMA Engine support --->
<*> ArtInChip SoCs DMA support
进行如上的配置之后,内核 SPI 驱动使能,并且 SPI 可使用 DMA 进行数据传输。
DTS 配置
芯片级的 DTS:
spi0: spi@10400000 {
compatible = "artinchip,aic-spi-v1.0";
reg = <0x0 0x10400000 0x0 0x1000>;
interrupts-extended = <&plic0 44 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_SPI0>;
resets = <&rst RESET_SPI0>;
dmas = <&dma DMA_SPI0>, <&dma DMA_SPI0>;
dma-names = "rx", "tx";
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <24000000>;
};
spi1: spi@10410000 {
compatible = "artinchip,aic-spi-v1.0";
reg = <0x0 0x10410000 0x0 0x1000>;
interrupts-extended = <&plic0 45 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_SPI1>;
resets = <&rst RESET_SPI1>;
dmas = <&dma DMA_SPI1>, <&dma DMA_SPI1>;
dma-names = "rx", "tx";
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <24000000>;
};
其中板级的配置 board.dts 中需要使能该模块,并且根据实际情况,配置最大工作频率:
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_a>;
spi-max-frequency = <100000000>;
status = "okay";
};
&spi1 {
pinctrl-names = "default";
pinctrl-0 = <&spi1_pins_a>;
spi-max-frequency = <100000000>;
status = "okay";
};
board-u-boot.dtsi 需要设置 u-boot,dm-pre-reloc
,只有设置了该标记,SPL 中才可以使用 SPI:
&spi0 {
u-boot,dm-pre-reloc;
};
&spi1 {
u-boot,dm-pre-reloc;
};