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.

[参考译文] AM5728:McSPI4 MOSI 问题

Guru**** 2553420 points
Other Parts Discussed in Thread: BEAGLEBOARD-X15

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/826566/am5728-mcspi4-mosi-issue

器件型号:AM5728
主题中讨论的其他器件:BeagleBoard-X15

您好!


我们尝试将 BeagleBoard-X15的 McSPI4与 Linux spidev 驱动程序(TI SDK 5.03)一起使用、但我们在 MOSI 线路上看到了一些令人困惑的信号。 SCLK 和 CE 线路按预期工作。

以下是使用 pearl 脚本生成的 McSPI4的 Pinmux 设置:

{MMC3_DAT4、(M1 | PIN_OUTPUT 上拉)}、// mmc3_dat4.SPI4_SCLK */
{MMC3_DAT5、(M1 | PIN_OUTPLUP)}、// mmc3_dat5.SPI4_D1 *
/{MMC3_DAT6、(M1 | PIN_OUTPLUP)*
、* mmc3_0_3_3*/mmMC0_D0_PIN_COMMANPULLUP */* 

McSPI/spidev 的器件树节点: 
&mcspi4{
pinctrl-names ="default";
status ="oke";
spidev@0{
compatible ="Rohm、dh2228fv";
spi-max-frequency =<48000000>;
reg =<0x0>;
ti、pwindir-d0-out-d1-in;
#ti、pid-d0-in-out;
状态="确定";
};
}; 

以及 MOSI 线路上使用 Linux/tools/spi/spidev_test.c 的输出



这个引脚上似乎有两个信号? 我们使用 Hirose FX18-60S-0.8SV15直接在扩展连接器上进行测量。

我们还使用相同的行为检查了 IO_Set4。

另一个问题是、如果我们尝试使用上述器件树 SPI 节点中的 OUT 注释行来切换 SPI D0和 D1引脚以进行输入和输出、则引脚上没有变化。

是否有关于解决这些问题的提示?

此致、

Patrick

 

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

    您好、Matrick、

    我假设您在主模式下使用 AM572x McSPI4、因为这是 McSPI 驱动程序仅支持的模式:

    [报价用户="Patrick Oetken"]{MMC3_DAT5、(M1 | PIN_OUTPLUP)}、 // mmc3_dat5.SPI4_D1 */

    [引用用户="Patrick Oetken"]  ti,pindir-d0-out-d1-in;

    根据我的理解、您需要输出 SPI4_d0 (MOSI)引脚和输入 SPI4_D1 (MISO)引脚、这是正确的吗?

    如果是、请尝试通过更新 SPI4_D1的引脚多路复用器来解决问题、因为现在是输出。

    还请提供以下值:

    CTRL_CORE_PAD_MMC3_DAT5/0x4A003798

    CTRL_CORE_PAD_MMC3_DAT6/0x4A00379C

    McSPI4.MCSPI_MODULCTRL/0x480BA128

    McSPI4.MCSPI_CH0CONF/0x480BA12C

    McSPI4.MCSPI_CH0CTRL/0x480BA134

    McSPI4.MCSPI_TX0/0x480BA138

    McSPI4.MCSPI_DAFTX/0x480BA180

    此致、
    帕维尔

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

    您好、Pavel、

    是的、我在主控模式下使用 McSPI4。

    我将 mux_data.h 中的行编辑为{MMC3_DAT5、(M1 | PIN_INPUT_PULLUP)}、现在 MOSI 信号看起来更好。

    但驱动引脚似乎仍然存在一些问题。

    在第一张图片中、您可以看到两个 SPI 写入操作之间上升到高电平的时间非常长。

    MOSI 引脚在发送8位后被拉高、但永远不会达到高电平状态。

    Spidev 设置包括:

    SPI 模式:0x0
    每字位数:8.
    最大速度:500000Hz (500KHz)

    使用 devmem2的寄存器值:

    0x4A003798 (0xb6f82798):0x00060001

    0x4A00379C (0xb6f8879c):0x00020001

    对于其他寄存器、devmem2返回总线错误(转储内核)。

    此致、

    Patrick Oetken

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

    Patrick Oetken 说:
    对于其他寄存器,devmem2返回总线错误(转储内核)。[/quot]

    McSPI4模块似乎未正确启用。 您能否使用 devmem2检查以下寄存器值并报告结果?

    CM_L4PER_MCSPI4_CLKCTRL/0x4A009808

    此致、
    帕维尔

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

    结果是:



    root@am57xx-EVM:~ evmem2 0x4A009808且 /dev/mem 已打开。 映射到地址 bb6f22000的内存。 在地址0x4A009808 (0xb6f22808)上读取:0x00030000

    编辑:在运行 SPI 命令时:

    root@am57xx-EVM:~ evmem2 0x4A009808且
    /dev/mem 已打开。
    映射到地址 bb6f83000的内存。
    在地址0x4A009808 (b6f83808)上读取:0x00010002 

    命令完成后:

    root@am57xx-EVM:~ evmem2 0x4A009808且
    /dev/mem 已打开。
    映射到地址 bb6f9c000的内存。
    在地址0x4A009808 (b6f9c808)上读取:0x00020002 

    此致

    Patrick Oetken

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

    Patrick、

    根据我的理解、mcspi4_d0 (MOSI)输出引脚仍然存在问题。

    我看到您已在该引脚上启用内部上拉。 您是否在该引脚上连接了外部上拉电阻器? 由于该引脚是输出、请尝试不使用任何上拉电阻器(上拉/下拉、内部/外部)、并报告结果。

    我还看到您的 mcspi4_SCLK 引脚仅配置为输出。 但我们要求该引脚进入/退出、因此请进行更新。 请参阅 AM572x TRM 第24.4.2.1节"主控模式的基本 McSPI 引脚"

    还请"在运行 SPI 命令时"和"在命令完成后"提供 McSPI4模块寄存器。

    此致、
    帕维尔

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

    是的、mcspi4_d0信号看起来不像它应该的那样。

    我刚刚尝试了不带上拉的 MOSI/D0、遇到了上述相同的问题。

    如何获取 u-boot 引脚多路复用器以将 mcspi4_SCLK 配置为输入/输出? 我是否需要添加两行? 例如:

    {MMC3_DAT4、(M1 | PIN_INPUT_PULLUP)}、   // mmc3_dat4.SPI4_SCLK *

    {MMC3_DAT4、(M1 | PIN_OUTPUT 上拉)}、   // mmc3_dat4.SPI4_SCLK *

    我认为第二行将覆盖第一行的寄存器值。

    对我来说、24.4.2.1主模式的基本 McSPI 引脚中的说明并未说明 SCLK 引脚需要输入/输出。 图24-73显示 了 SPICLK 作为输出、表24-288说明了该引脚作为输出。

    发送时:

    CTRL_CORE_PAD_MMC3_DAT5:
    /dev/mem 已打开。
    映射到地址 bb6fc6000的内存。
    在地址0x4A003798 (bb6fc6798)读取:0x00060001
    CTRL_CORE_PAD_MMC3_DAT6:
    /dev/mem 已打开。
    映射到地址 bb6f07000的内存。
    读取地址0x4A00379C (bb6f0779c):0x00010001
    McSPI4.MCSPI_MODULCTRL:
    /dev/mem 已打开。
    映射到地址 bb6f67000的内存。
    读取地址0x480BA128 (b6f67128):0x00000001
    McSPI4.MCSPI_CH0CONF:
    /dev/mem 已打开。
    映射到地址 bb6fe2000的内存。
    在地址0x480BA12C (b6fe212c)处读取:0x200103C0
    McSPI4.MCSPI_CH0CTRL:
    /dev/mem 已打开。
    映射到地址 bb6f4f000的内存。
    在地址0x480BA134 (b6f4f134)处读取:0x00000000
    McSPI4.MCSPI_TX0:
    /dev/mem 已打开。
    映射到地址 bb6f7a000的内存。
    在地址0x480BA138 (bb6f7a138)处读取:0x00000000
    McSPI4.MCSPI_DAFTX:
    /dev/mem 已打开。
    映射到地址 bb6f9f000的内存。
    在地址0x480BA180 (b6f9f180)处读取:0x00000000
    CM_L4PER_MCSPI4_CLKCTRL:
    /dev/mem 已打开。
    映射到地址 bb6fe0000的内存。
    在地址0x4A009808 (b6fe0808)上读取:0x00000002
    

    (直接)发送后:

    CTRL_CORE_PAD_MMC3_DAT5:
    /dev/mem 已打开。
    映射到地址 bbb6f5b000的内存。
    读取地址0x4A003798 (bbb6f5b798):0x00060001
    CTRL_CORE_PAD_MMC3_DAT6:
    /dev/mem 已打开。
    映射到地址 bb6f22000的内存。
    读取地址0x4A00379C (bb6f2279c):0x00010001
    McSPI4.MCSPI_MODULCTRL:
    /dev/mem 已打开。
    映射到地址 bb6fa4000的内存。
    读取地址0x480BA128 (0xb6fa4128):0x00000001
    McSPI4.MCSPI_CH0CONF:
    /dev/mem 已打开。
    映射到地址 bbb6f9b000的内存。
    读取地址0x480BA12C (bb6f9b12c):0x200103C0
    McSPI4.MCSPI_CH0CTRL:
    /dev/mem 已打开。
    映射到地址 bb6f23000的内存。
    读取地址0x480BA134 (b6f23134):0x00000000
    McSPI4.MCSPI_TX0:
    /dev/mem 已打开。
    映射到地址 bbb6fb0000的内存。
    在地址0x480BA138 (b6fb0138)处读取:0x00000000
    McSPI4.MCSPI_DAFTX:
    /dev/mem 已打开。
    映射到地址 bb6f08000的内存。
    在地址0x480BA180 (b6f08180)处读取:0x00000000
    CM_L4PER_MCSPI4_CLKCTRL:
    /dev/mem 已打开。
    映射到地址 bb6f08000的内存。
    在地址0x4A009808 (b6f08808)上读取:0x00020002 

    此致、

    Patrick Oetken

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

    [引用用户="Patrick Oetken"]

    如何获取 u-boot 引脚多路复用器以将 mcspi4_SCLK 配置为输入/输出? 我是否需要添加两行? 例如:

    {MMC3_DAT4、(M1 | PIN_INPUT_PULLUP)}、   // mmc3_dat4.SPI4_SCLK *

    {MMC3_DAT4、(M1 | PIN_OUTPUT 上拉)}、   // mmc3_dat4.SPI4_SCLK *

    我认为第二行将覆盖第一行的寄存器值。

    [/报价]

    您只需要以下行:

    {MMC3_DAT4、(M1 | PIN_INPUT_PULLUP)}、   // mmc3_dat4.SPI4_SCLK *

    [引述 USER="Patrick Oetken">对于我来说、24.4.2.1用于主模式的基本 McSPI 引脚中的说明并未说明 SCLK 引脚需要输入/输出。 图24-73显示 了作为输出的 SPICLK、表24-288说明了该引脚作为输出。[/QUERP]

    请注意:为了使 spim_SCLK 信号正常工作、相应 CTRL_CORE_PAD_x 寄存器的 INPUTENABLE 位应设置为0x1、因为这是重定时的原因。

     

    [引用用户="Patrick Oetken"]

    McSPI4.MCSPI_CH0CONF:
    /dev/memopened.
    Memory mapped at address 0xb6fe2000.
    Read at address  0x480BA12C (0xb6fe212c): 0x200103C0

    [/报价]

    这看起来不正确。

    [16] DPE0 = 1

    [17] DPE1 = 0

    [18]是=0

    此配置用于 mcspi4_d0输入和 mcspi4_D1输出。

    请按如下所示修改 DTS 文件、然后重试。

    &mcspi4 {
        - pinctrl-names = "default";
        status = "okay";
          + ti,pindir-d0-out-d1-in;
        spidev@0{
            compatible = "rohm,dh2228fv";
            spi-max-frequency = <48000000>;
            reg = <0x0>;
             - ti,pindir-d0-out-d1-in;
             - #ti,pindir-d0-in-d1-out;
             - status = "okay";
        };
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    设备树修改解决了这个问题。 信号看起来要好得多、SPI 从器件已经在工作。 非常感谢!

    使用具有 McSPI4的 Cortex-M4 IPU 来减轻 A15内核的负载将会很有意思。 我在 PDK 中找到了 MCSPI_Loopback _idkAM572x_m4ExampleProject、但它使用了 AM572x IDK 和 McSPI1、而不是 McSPI4。 如果我是对的、我需要将其移植到 evmAM572x、然后我只需要将 MCSPI_Instance 从0切换到3、所有需要的寄存器都应由 u-boot 或 McSPI 库设置?

    此致、

    Patrick Oetken

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

    Patrick、

    [引用 user="Patrick Oetken">修改器件树解决了该问题。 信号看起来要好得多、SPI 从器件已经在工作。 非常感谢![/引述]

    由于您现在可以解决 Linux McSPI4 MOSI 问题、请关闭/验证/解决此主题。

    然后打开有关 RTOS Cortex-M4 IPU McSPI4问题的新 e2e 线程。

    此致、
    帕维尔