ZHCABI9 April   2022 TDA4VM

 

  1.   摘要
  2.   商标
  3. 1SPI:串行外设接口
  4. 2J7200/J721e MCSPI 支持
    1. 2.1 MCSPI 特性
  5. 3SPI:Linux 上的主模式启用和验证
    1. 3.1 启用 J721e/TDA4VM 的 SPI 实例
    2. 3.2 在 TD4VM SDK 上启用 SPIDEV
    3. 3.3 使用标准 Linux spidev_test 工具在 TI J7/TDA4x 上的用户空间中练习 SPI
  6. 4SPI:Linux 上的从模式启用和验证
    1. 4.1 启用 J7200 的 SPI 实例
    2. 4.2 为 MCSPI4 从节点启用 DMA
    3. 4.3 启用 SPIDEV 和 SPI_SLAVE 配置
    4. 4.4 使用标准 Linux spidev_test 工具在 TI J7200 上的用户空间中测试 SPI 从模式功能
    5. 4.5 使用 spi-slave-time 进行 SPI 从器件测试
    6. 4.6 Linux SPI 从器件的挑战
    7. 4.7 Linux SPI 从模式一般性限制
    8. 4.8 McSPI SPI 从模式限制
  7. 5参考文献

启用 J7200 的 SPI 实例

添加作为 SPI 主节点的 MCU_MCSPI2 节点和作为 SPI 从节点的 MAIN_MCPSI4 节点。

diff --git a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
index 68e9369b6..bf37cc98f 100644
--- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
+++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts
@@ -256,6 +256,25 @@
status = "disabled";
};

+&mcu_spi2 {
+ status="okay";
+ spidev@0 {
+ spi-max-frequency = <24000000>;
+ reg = <0>;
+ compatible = "linux,spidev";
+ };
+};
+
+&main_spi4 {
+ status="okay";
+ spi-slave;
+ slave@0 {
+ spi-max-frequency = <24000000>;
+ reg = <0>;
+ compatible = "linux,spidev";
+ };
+};
+
&wkup_gpio1 {
status = "disabled";
};
diff --git a/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi
index 79749f250..70a028481 100644
--- a/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-j7200-main.dtsi
@@ -426,6 +426,16 @@
clock-names = "fclk";
};

+ main_spi4: spi@2140000 {
+ compatible = "ti,am654-mcspi","ti,omap4-mcspi";
+ reg = <0x0 0x2140000 0x0 0x400>;
+ interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&k3_clks 270 1>;
+ power-domains = <&k3_pds 270 TI_SCI_PD_EXCLUSIVE>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
main_i2c0: i2c@2000000 {
compatible = "ti,j721e-i2c", "ti,omap4-i2c";
reg = <0x00 0x2000000 0x00 0x100>;
diff --git a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
index be334bcfe..35ec3b0c3 100644
--- a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi
@@ -70,6 +70,16 @@
#size-cells = <1>;
};

+ mcu_spi2: mcu-spi2@40320000 {
+ compatible = "ti,am654-mcspi","ti,omap4-mcspi";
+ reg = <0x0 0x40320000 0x0 0x400>;
+ interrupts = <GIC_SPI 850 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&k3_clks 276 1>;
+ power-domains = <&k3_pds 276 TI_SCI_PD_EXCLUSIVE>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
wkup_uart0: serial@42300000 {
compatible = "ti,j721e-uart", "ti,am654-uart";
reg = <0x00 0x42300000 0x00 0x100>;
diff --git a/arch/arm64/boot/dts/ti/k3-j7200.dtsi b/arch/arm64/boot/dts/ti/k3-j7200.dtsi
index b7005b803..2b77308ae 100644
--- a/arch/arm64/boot/dts/ti/k3-j7200.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-j7200.dtsi
@@ -152,6 +152,7 @@
#size-cells = <2>;
ranges = <0x00 0x28380000 0x00 0x28380000 0x00 0x03880000>, /* MCU NAVSS*/
<0x00 0x40200000 0x00 0x40200000 0x00 0x00998400>, /* First peripheral window */
+ <0x00 0x40320000 0x00 0x40320000 0x00 0x00000400>, /* MCU SPI2 */
<0x00 0x40f00000 0x00 0x40f00000 0x00 0x00020000>, /* CTRL_MMR0 */
<0x00 0x41000000 0x00 0x41000000 0x00 0x00020000>, /* MCU R5F Core0 */
<0x00 0x41400000 0x00 0x41400000 0x00 0x00020000>, /* MCU R5F Core1 */
--