LINUX驱动开发(SPI)SPI主机设备树

本文详细介绍了IMX8MQ平台上的SPI设备配置过程,包括设备树的基础配置、中断和DMA设置,以及如何通过匹配特定关键词来定位主机驱动。同时,文章还展示了如何为具体的开发板配置设备树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简述

硬件: IMX8MQ
设备: 逻辑分析仪

参考:
芯片手册:IMX8MQ芯片手册第十章

内核:

kernel/include/linux/spi/spi.h
kernel/Documentation/devicetree/bindings/spi/spi-controller.yaml
kernel/drivers/spi/spi.c

2. 设备树头文件

/* 
参考:
1. IMX8MQ芯片手册第七章-7.1.4 SDMA event mapping(1721)
2. kernel/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt 
3. kernel/arch/arm64/boot/dts/freescale/imx8mq.dtsi
4. kernel/Documentation/devicetree/bindings/spi/fsl-imx-cspi.txt
*/
ecspi1: spi@30820000 {
	#address-cells = <1>;
	#size-cells = <0>;
	compatible = "fsl,imx8mq-ecspi", "fsl,imx6ul-ecspi";
	reg = <0x30820000 0x10000>;
	interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&clk IMX8MQ_CLK_ECSPI1_ROOT>,
	<&clk IMX8MQ_CLK_ECSPI1_ROOT>;
	clock-names = "ipg", "per";
	// dmas = <&sdma1 0 7 1>, <&sdma1 1 7 2>;
	// dma-names = "rx", "tx";
	status = "disabled";
};

ecspi2: spi@30830000 {
	#address-cells = <1>;
	#size-cells = <0>;
	compatible = "fsl,imx8mq-ecspi", "fsl,imx6ul-ecspi";
	reg = <0x30830000 0x10000>;
	interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&clk IMX8MQ_CLK_ECSPI2_ROOT>,
	<&clk IMX8MQ_CLK_ECSPI2_ROOT>;
	clock-names = "ipg", "per";
	//dmas = <&sdma1 2 7 1>, <&sdma1 3 7 2>;
	//dma-names = "rx", "tx";
	status = "disabled";
};

这里芯片原厂已经提供SPI设备树基础配置,还有中断、DMA。
查找compatible = “fsl,imx8mq-ecspi”, "fsl,imx6ul-ecspi"关键词,在drivers/spi/spi-imx.c中可以找到主机驱动。

3. 开发板设备树

/*
参考: 
1. kernel/Documentation/devicetree/bindings/spi/spi-controller.yaml
*/
&ecspi1 {
	status = "okay";
	pinctrl-names = "default";
	fsl,spi-num-chipselects = <1>; /* 只有一个设备 */
	pinctrl-0 = <&pinctrl_spi1>; /* pinctrl节点 */
	cs-gpios = <&gpio5 9 0>; /* 片选引脚 */

	mcp2518fd@0 { /* 这里的0指的是SPI通道0 */
		compatible = "microchip,mcp2518fd"; /* 用于匹配设备驱动 */
		reg = <0>; /* 这里的0指的是SPI通道0 */
		spi-max-frequency = <20000000>; /* 最高频率 */
	};
};

&ecspi2 {
	status = "okay";
	pinctrl-names = "default";
	fsl,spi-num-chipselects = <1>;
	pinctrl-0 = <&pinctrl_spi2>;
	cs-gpios = <&gpio5 13 0>;

	spidev@0 { 
		compatible = "rohm,dh2228fv";
		reg = <0>;
		spi-max-frequency = <25000000>;
	};
};

&iomuxc {
	pinctrl_spi1: spi1 {
		fsl,pins = <
			MX8MQ_IOMUXC_ECSPI1_SCLK_ECSPI1_SCLK    0x82
			MX8MQ_IOMUXC_ECSPI1_MOSI_ECSPI1_MOSI    0x82
			MX8MQ_IOMUXC_ECSPI1_MISO_ECSPI1_MISO    0x82
			MX8MQ_IOMUXC_ECSPI1_SS0_GPIO5_IO9       0x19
		>;
	};

	pinctrl_spi2: spi2 {
		fsl,pins = <
			MX8MQ_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK    0x82
			MX8MQ_IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI    0x82
			MX8MQ_IOMUXC_ECSPI2_MISO_ECSPI2_MISO    0x82
			MX8MQ_IOMUXC_ECSPI2_SS0_GPIO5_IO13      0x19
		>;
	};

&iomux中引脚配置由Config Tools for i.MX工具自动生成或芯片手册(2198)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lljwork2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值