ZHCADB4A November   2023  – April 2026 AM625 , AM62L , MSPM0C1105 , MSPM0C1106 , MSPM0L1306

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 SPI 事务数据流
    2. 1.2 AM62x 和 AM62L 处理器
    3. 1.3 MSPM0L130x 微控制器
  5. 2硬件设置
    1. 2.1 AM62x
      1. 2.1.1 A53 内核硬件设置
      2. 2.1.2 M4F 内核硬件设置
    2. 2.2 AM62L
      1. 2.2.1 A53 内核硬件设置
  6. 3软件设置
    1. 3.1 克隆 Beyond SDK GitHub 存储库
    2. 3.2 SK-AM62x 软件设置
      1. 3.2.1 A53 内核
      2. 3.2.2 M4F 内核
    3. 3.3 AM62L 软件设置
      1. 3.3.1 A53 内核
    4. 3.4 LP-MSPM0L130x 软件设置
  7. 4执行步骤
    1. 4.1 在 LP-MSPM0L130x 上运行工程
    2. 4.2 在 SK-AM62x/AM62L EVM 上运行工程
      1. 4.2.1 A53 内核
      2. 4.2.2 M4F 内核
  8. 5结果
    1. 5.1 单字节单通道
    2. 5.2 单字节多通道
    3. 5.3 多字节单通道
    4. 5.4 多字节多通道
  9. 6总结
  10. 7参考资料
  11. 8修订历史记录

A53 内核

  • 按照 AM62L 入门指南中提供的步骤操作。

  • 以下实验中使用了适用于 AM62L 的处理器 SDK Linux 版本 11.0.15

  • 通过在 AM62L SDK 的 ti-linux-kernel 存储库中应用以下补丁,在 Linux 中设置 SPI 驱动程序。

  • 注意:下面提供的补丁中禁用了 HDMI。这是因为在 TMDS62LEVM 上,HDMI 与扩展接头进行多路复用,一次只能使用其中一个。

diff --git a/arch/arm64/boot/dts/ti/k3-am62l3-evm.dts b/arch/arm64/boot/dts/ti/k3-am62l3-evm.dts
index 2dd056ce0538..6cf837274c6e 100644
--- a/arch/arm64/boot/dts/ti/k3-am62l3-evm.dts
+++ b/arch/arm64/boot/dts/ti/k3-am62l3-evm.dts
@@ -36,6 +36,7 @@ memory@80000000 {
 
 	hdmi0: connector-hdmi {
 		compatible = "hdmi-connector";
+		status = "disabled";
 		label = "hdmi";
 		type = "a";
 
@@ -389,6 +390,15 @@ AM62PX_IOPAD(0x0188, PIN_INPUT, 0) /* (A9) MCASP0_AXR1 */
 		>;
 	};
 
+	main_spi1_pins_default: main-spi1-pins-default {
+		pinctrl-single,pins = <
+			AM62LX_IOPAD(0x008c, PIN_OUTPUT, 4) /* (H22) SPI1_CLK */
+			AM62LX_IOPAD(0x0080, PIN_INPUT, 4) /* (K22) SPI1_D0 */
+			AM62LX_IOPAD(0x0084, PIN_OUTPUT, 4) /* (J23) SPI1_D1 */
+			AM62LX_IOPAD(0x0088, PIN_OUTPUT, 4) /* (K23) SPI1_CS0 */
+		>;
+	};
+
 	pmic_irq_pins_default: pmic-irq-default-pins {
 		pinctrl-single,pins = <
 			AM62LX_IOPAD(0x01e8, PIN_INPUT, 0) /* (C8) EXTINTn */
@@ -410,6 +420,17 @@ &main_uart0 {
 	bootph-all;
 };
 
+&main_spi1 {
+	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&main_spi1_pins_default>;
+	spidev@0 {
+		spi-max-frequency = <24000000>;
+		reg = <0>;
+		compatible = "rohm,dh2228fv";
+	};
+}; 
+
 &main_uart1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&main_uart1_pins_default>;
@@ -488,11 +509,14 @@ exp2: gpio@23 {
 
 	sii9022: bridge-hdmi@3b {
 		compatible = "sil,sii9022";
+		status="disabled";
 		reg = <0x3b>;
 		interrupt-parent = <&exp1>;
 		interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
 		#sound-dai-cells = <0>;
 		sil,i2s-data-lanes = < 0 >;
+		pinctrl-names = "default";
+		pinctrl-0 = <&main_dpi_pins_default>;
 		bootph-all;
 
 		ports {
@@ -774,8 +798,6 @@ partition@7fe0000 {
 
 &dss {
 	status = "okay";
-	pinctrl-names = "default";
-	pinctrl-0 = <&main_dpi_pins_default>;
 	bootph-all;
 };
 
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 94dfc265a61c..157d0d62fb53 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -1828,3 +1828,5 @@ CONFIG_CORESIGHT_STM=m
 CONFIG_CORESIGHT_CPU_DEBUG=m
 CONFIG_CORESIGHT_CTI=m
 CONFIG_MEMTEST=y
+CONFIG_UHID=y
+CONFIG_SPI_SPIDEV=y
\ No newline at end of file
  • 重新编译 Linux 并在 SD/eMMC 上安装镜像、dtb 和模块。

  • 在 Linux 用户空间中使用并编译此处链接的 C 文件

  • 对于多字节示例,有 2 种在控制器端接收数据的方法。一种方法是以 2 个时钟(每个时钟 8 位,来自 MSPM0)发送数据。另一种方法是在双持续时间的单个时钟突发中发送整个数据。这两种方法都已经过测试,可以从此处链接的 C 文件实现。

  • 注意:如果在 Linux 用户空间中难以在更高的 SPI 频率下运行 SPI 脚本,请连接 MSPM0 和 AM62L 的接地引脚。