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)。