工具/软件:
您好:
我尝试获取在 Linux 下运行的 AM6442 的 SPI1 模块。 虽然我在第一个信道 RESP 方面似乎很成功。 与 SPI1_CS0 关联的通道 0、使通道 1 与 SPI1_CS1 关联时也存在一些问题。
到目前为止、我做了什么:
我确实遵循了官方文档所说的内容: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Foundational_Components /内核/ Kernel_Drivers / SPI.html
但是,我发现现实中的情况有些不同。
首先、我扩展了 Linux 器件树文件 board-support/ti-linux-kernel-6.12.17+git-ti/arch/arm64/boot/dts/ti/k3-am642-evm.dts 的 main_pmx0-section 、如下所示:
    SPI1_PINS_s0:SPI1_PINS_s0{ 
        pinctrl-single、pins =< 
            AM64X_IOPAD (0x021c、PIN_OUTPUT、0)/* SPI1_CS0 */ 
            AM64X_IOPAD (0x0220、PIN_OUTPUT、0)/* SPI1_CS1 * 
            AM64X_IOPAD (0x0224、PIN_OUTPUT、0)/* SPI1_CLK * 
            AM64X_IOPAD (0x0228、PIN_OUTPUT、0)/* SPI1_MOSI */ 
            AM64X_IOPAD (0x022c、PIN_INPUT_PULLDOWN、0)/* SPI1_MISO */ 
        >; 
    }; 
这是为了定义直接的 PAD 函数、该函数也适用于通道 0。 这应该没问题。
接下来、我在器件树文件的末尾附加了以下块:
&MAIN_SPI1{ 
    状态=“正常“; 
    pinctrl-names =“default";“; 
    pinctrl-0 =<&SPI1_pins_s0>; 
    TI、pindir-d0-out-D1-in; 
    spidev@0{ 
        SPI-max-frequency =<24000000>; 
        reg =<0>; 
        compatible =“Rohm、dh2228fv“; 
        数据大小=<8>; 
    }; 
    Spidev@1{ 
        SPI-max-frequency =<24000000>; 
        reg =<1>; 
        compatible =“Rohm、dh2228fv“; 
        数据大小=<8>; 
    }; 
}; 
我的理解是、这定义了两个 spidev 通道 0 和 1。 这里分配给 reg 的值与相应的信道编号匹配似乎很重要。
使用 make linux-dtbs 构建新的设备树 是完美无瑕的。 相应地安装相应的.dtb 文件并引导系统后、有一个新的器件文件/dev/spidev2.0 可用。 实际上、应该也 可以在/dev/spidev2.1 上获取。 但事实并非如此。
当我扫描 dmesg 以查找与 SPI 相关的条目时、我找到这些条目:
[  21.390687] SPI_MASTER SPI2:SPI_DEVICE 寄存器错误/bus@f4000/SPI@20110000/spidev@1 
[  21.484859] SPI_MASTER SPI2:无法为/bus@f4000/SPI@20110000/spidev@1 创建 SPI 器件 
因此、显然在使第二个通道正常工作时存在一些问题。
问题是这是 spidev 驱动程序中的一些错误还是某些不受支持的功能、还是我在这里做了什么?
除此之外、我可以说、通过内核源代码 (tools/spidev_test.c) 中的 spidev 测试程序处理通道 0 就像处理通道 0 一样。
谢谢、
Mario
 
				 
		 
					