This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-AM69:如何制作扩展接头'的 MCU SPI 引脚以生成 SPI 信号。

Guru**** 2466550 points
Other Parts Discussed in Thread: AM69, SK-AM69

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1458423/sk-am69-how-to-make-expansion-header-s-mcu-spi-pin-to-generate-spi-signal

器件型号:SK-AM69
主题中讨论的其他器件:AM69TDA4VL

工具与软件:

你好,我是韩国京熙大学的学生。
我将使用 SK AM69板将 SPI 信号感应功能发送到 raspberrypi (slave)。
我已下载 TI_SDK 并想在 u-boot 中添加 SPI 生成源代码。

首先、我无法从器件树中找到应使用的 SPI。 DTS 中的 SPI 源太多、我认为如果我要控制 MCU_SPI、必须使用   

    MCU_spi0spi@40300000
        兼容="ti、am654-mcspi""ti、omap4-mcspi"
        REG =<0x00 0x040300000 0x00 0x400>
        中断=<GIC_SPI 848 IRQ_TYPE_LEVEL_HIGH>
        #address-cells =<1>
        #size-cells =<0>
        电源域=<&K3_PDS 384 TI_SCI_PD_Exclusive>
        时钟=<&K3_CLKS 384 0>
        状态="正常"
    };
这个文件位于 k3-j784s4-mcu-wakeup.dtsi 中。

请回答如何在此电路板上创建源以控制 SPI。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    就像您注意到的那样、mcspi 有多个实例。 您为什么要从 U-Boot 进行控制…有什么特殊的原因?

    我们有来自 Linux 的很好的示例。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1322931/faq-sk-tda4vm-how-to-enable-spidev-on-sk-tda4vm

    此致、

    基尔西  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助、Keerthy。
    我使用 SK-AM69控制另一个板、该板没有 CPU、因此我们应使用外部 SPI 信号对其进行控制。
    在本例中、我认为我们可以在 Linux 侧发送 SPI 信号、这会更容易、但有一个原因、我也需要在 u-boot 中发送 SPI 信号。
    在我们的电路板上是 PCIe、因此我们应在 u-boot 引导加载程序时使用 SPI 信号初始化电路板的 PCIe、以便 PCIe 能够在 Linux 端与 SK-AM69电路板通信。
    是否有任何使用 u-boot SPI 的示例、或者您能给我一些帮助吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    否、我们没有 U-Boot SPI 的驱动程序或示例。 我建议在 Linux 中设置 McSPI、并在 PCIe 器件准备就绪后重新扫描 PCIe 总线。

    作为警告、有些 PCIe 器件不像重新扫描/热插拔那样、因此该方法可能无法正常工作。 但是、测试将相对比开发 SPI 驱动程序更容易。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma。 感谢您的评论!
    我已经按照您的建议进行了更改、因此我现在可以生成 SPI 信号。
    不过、我 有一些问题。
    首先、看起来 MCU_SPI1是通过 OMAP3_SPI 激活的、对吧? \

    其次、与下面的信号类似、当我将 SPI 用于默认模式时、CLK 在 SPI 信号传输中每8位就会停止一段时间。 是否有任何配置可实现96位连续 SCK 传输?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    [报价用户 id="637316" url="~/support/processors-group/processors/f/processors-forum/1458423/sk-am69-how-to-make-expansion-header-s-mcu-spi-pin-to-generate-spi-signal/5599416 #5599416"]

    首先、看起来 MCU_SPI1是通过 OMAP3_SPI 激活的、对吧? \

    [报价]

     根据器件树中的"兼容"字段、对于 Linux 驱动程序、应为 drivers/spi/spi-omap2-mcspi.c。

    [报价 userid="637316" url="~/support/processors-group/processors/f/processors-forum/1458423/sk-am69-how-to-make-expansion-header-s-mcu-spi-pin-to-generate-spi-signal/5599416 #5599416"]其次、与下面的信号一样、当我使用 SPI 作为默认模式时、在 SPI 信号传输中、CLK 每8位就停止一段时间。 是否有任何配置可实现96位连续 SCK 传输?
    [报价]

    如果正在使用 spidev、这很可能是通用 spidev 驱动程序不支持对突发数据进行 DMA 的限制。 如果传输速度是瓶颈、您可以通过增加 SPI 的时钟速度进行实验、直到它达到最大速度。

    此致、

    Takuma  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好。 Takuma。
    感谢您的帮助。 现在可以生成信号。
    此外、您告诉我 SPI IP 就是 TI OMAP SPI、我找不到 OMAP SPI 数据库的位置。  
    我想知道我们是否可以更改 SPI 类型(例如 Motorola/TI 等)、是否有任何寄存器字段要更改这些类型?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanlee:

    很高兴听到可以生成信号。

    我不知道 Motorola 的类型、但随 TRM 打包的 j784s4寄存器 xlsx 文件中的 MCSPI 工作表包含寄存器说明、可让您更改 SPICLK 极性和相位: https://www.ti.com/lit/zip/spruj52

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma。
    感谢您提供一些有用的信息!!

    这次我对 SK-AM69板的 SPI 引脚有一些疑问。
    如前所述、现在我们可以生成 SPI 信号、下面是 我生成的 SPI 信号的波形。  


    您可以看到、在 用白色箭头指向的 MISO (蓝线)中间、会短暂地弹出信号。 此时、我们会从从从器件收到一些值、但正如您看到的、由于 SK AM69板中的其他一些因素、高驱动能力正在降低。

    我认为这是 MCU_BOOTMODE04的原因、该器件具有下拉电阻器和一些电阻器、因此应接收到 SPI 的电压由于 MCU_BOOTMODE04的因素而下降。
    你知道我如何解决这个问题吗?

    此外、我已经用 MC_SPI0_D0暂时打开 MCU_BOOTMODE4、然后 MISO 信号正常驱动为高电平、但基本命令 DEO 不捕获 MISO 中的任何值。 我认为这种问题可能是 POL 和 PHA 差异导致的、但当我将 MISO 与 VDD 连接以使信号处于高电平时、但 SPI xfer 的 DIN 不会返回任何值。 是否有解决此问题的解决方案?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    如果 MCU_SPI1_D0和 D1由 SoC 驱动、则根据 SoC 输出而不是引导模式拉取电压、引脚应变为高电平或低电平。

    我有另一个假设。 您是否可以尝试 在 devicetre 中定义 ti,windir-d0-out-D1-in 标志、类似于此单独的论坛主题:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1408960/tda4vm-mcu_spi0-under-linux/5398774#5398774

    此致、

    Takuma  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma。
    我尝试了   ti,windir-d0-out-D1-in 使 d0 - MOSI、D1 - mISO、但 TX 反应良好、但 Rx 没有捕获任何值...
    我可以尝试哪些解决方案?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    此刻我的脑海里什么也没有。 您提到:

    我已暂时使用 MC_SPI0_D0打开 MCU_BOOTMODE4、然后 MISO 信号正常驱动高电平[/quot]

    因此、就电路而言、任何东西都不应阻止 MISO。

    并且还设置了引脚方向。

    作为一个实验:

    我假设使用 spidev_test 应用程序发送数据、Raspberry Pi 发回数据。 在执行环回以将 SK-AM69上的 MOSI 和 MISO 连接在一起时、您是否能够接收发送的数据?

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma。
    感谢您的帮助、帮助您找到进展。
    我已经用 raspberri PI 完成了一些测试、我已经检查了信号是否出现在 Osciloscope 中、但是 spidev_test 的 rx 没有捕获任何值、只有0。
    正如您所说的、我使 MISO - MOSI 连接进行环回测试、但仍然很好地发送 TX 发送数据、但任何值都显示在 Rx 中。
    此外、我使 MISO 与 VDD 连接以将信号设为高电平、但 Rx 的值仍然为0。 我买了两块板、但都有这种问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    让我看看我是否能在我的最后重现问题

    所使用的是哪个 SDK 版本、您是否能够通过"dmesg"命令共享完整日志?

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    除了来自 dmesg 的 SDK 版本和完整日志外、您还能否与 McSPI 的所有更新共享 DTS 文件?

    最近在这里解决了一个类似的论坛主题、这是由于引脚复用错误导致的、因此我也想检查您的器件树: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1459822/sk-am68-no-response-from-testing-spi-after-enabling-it-in-the-rpi-header

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma、
    很抱歉、由于加入学院、很晚才回复  

    我添加了  

    &MCU_SPI1{
    状态="正常";
    pinctrl-names ="默认值";
    pinctrl-0 =<&MCU_SPI1_PINS_DEFAULT>;
    ti、windir-d0-out-D1-in;
    时钟频率=<100000>;
    };


    MCU_SPI1_PINS_DEFAULT:MCU-SPI1-DEFAULT-PINS{
    PINCTL-SINGLE、PINS =<
    J784S4_WKUP_IOPAD (0x058、PIN_INPUT、0)/*(H38) MCU_SPI1_CLK */
    J784S4_WKUP_IOPAD (0x05c、PIN_INPUT、0)/*(J34) MCU_SPI1_D0 */
    J784S4_WKUP_IOPAD (0x060、PIN_INPUT、0)/*(J35) MCU_SPI1_D1 */
    J784S4_WKUP_IOPAD (0x064、PIN_INPUT、0)/*(J36) MCU_SPI1_CS0 */
    >;
    };

    这将在 DTS 文件中。

    以下是 bootinge2e.ti.com/.../am69_2D00_sk-log.txt 的完整日志






  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    用于引脚多路复用的共享器件树代码看起来是正确的。 但是、我确实看到了在共享内核日志中突出显示的内容。 具体而言、该行:

    SPI 驱动器 spidev 没有 Rohm、bh2228fv 的 spi_device_id

    您能否分享对 spidev 和 spidev Linux 内核驱动程序的设备树所做的更改? 我怀疑设备树中的 spidev 节点正在兼容字段中使用不存在的名称、并且内核驱动程序和设备树之间存在差异。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma。
    感谢您的答复。

    我在下面分享了一条有关没有 SPI 器件的消息、但我可以在 sys/bus 中找到 spi0.0器件。

    此外、如果我检查信号、如果我使用 ./spidev_test -D /dev/spidev0.0 -v.、则已生成 CS / MOSI / CLK

      


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:  

    我知道已经创建了 spidev 设备、到目前为止、您告诉我的一切应该表示可以使用 SPI。 然而,由于它不起作用,我们必须寻找不符合规范的事情。

    因此、我仍然认为我们应该检查 spidev devicetre 节点和内核驱动程序。 如果您不介意共享、只需发布 dts 文件和.c 文件(假设对内核驱动程序进行了更改)就足够了。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    无需道歉。 总是会出现故障。

    现在、我在您的共享 devicetree 中看到了以下 spidev 兼容字段:

    • 兼容="Rohm、bh2228fv";

    兼容字段用于将 devicetre 中定义的硬件与 Linux 内核驱动程序链接起来。 但是、在 Linux 内核中搜索时、我没有找到默认使用此兼容字段的任何驱动程序。 由于先前共享的日志也表明没有  Rohm、bh2228fv、因此我认为 驱动程序中可能缺少某些内容。

    下面随附了 TDA4VL 补丁、它是与 AM69类似的处理器。 我建议参考此说明、尤其是"spidev_spi_ids"字段、以确保 devicetre 与驱动程序兼容字段 匹配、并且 spidev_dt_id 在驱动程序中具有匹配的 spidev_spi_id。  

    e2e.ti.com/.../0882.0001_2D00_J721S2_2D00_TDA4VL_2D00_10.0_2D00_SDK_2D00_enable_2D00_spi6_2D00_.patch

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Takuma、
    我发现在与 SK-AM69连接时、测试板出现问题。
    我已经测试了 SK-AM69以读取 PMOD_SF3的 id 寄存器、它能够很好地接收到信号。 而且, STM34板可以从我们的测试板接收和读取很好的值,所以我认为我应该找出是什么造成了这样一个问题,像我 sais。

    顺便说一下、为了解决上述问题、我要寻找 AM69的功能、AM69板停止启动。 实际上、从 UART 第三个接口的引导日志现在无法正常工作、因此我甚至无法调试该问题。  
    因此、我想知道芯片是否确实出现故障、是否能显示出厂日志的启动模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    因此、我想知道芯片是否确实出了问题、是否存在工厂日志启动模式?

    遗憾的是、听到电路板停止启动。 至于一些出厂日志、您可以尝试将电路板上的一些开关设置为 UART 引导模式吗、并参考 EVM 用户指南:

    https://www.ti.com/lit/ug/spruj70a/spruj70a.pdf?ts = 1738929370660&ref_url=https%253A%252F%252Fwww.google.com%252F 

    然后、一旦进入 UART 引导模式、您是否能够连接到枚举的全部4个 UART 串行端口? 其中之一应该会打印出一些十六进制值。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、藤原、
    不幸的是,我尝试了 UART 引导模式(SW2.1 :开/ SW2.2 :关/ SW2.3 :开),但任何接口0、1、2、3的 UART 都没有打印任何日志。
    在本例中、这意味着芯片现在无法正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chanhee:

    不幸的是、情况似乎是这样的。 引导时应打印出一些十六进制字符、引导后、在 UART 引导模式下、应该在其中一个串行端口上打印出恒定的"C"流。 如果这些字符没有打印出来、则很可能是芯片已损坏。

    此致、

    Takuma