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.

[参考译文] Linux/AM3352:SPI 配置

Guru**** 2539500 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671406/linux-am3352-spi-configuration

器件型号:AM3352

工具/软件:Linux

您好!

我们设计了一款采用 AM3352处理器的定制电路板。 在电路板中、我们使用的是 MAX14830 (SPI 转四路 UART)。 MAX14830 IC 连接到 AM3352的 SPI1。 我们在 Linux 中启用了该驱动程序、并对 DTS 文件进行了以下更改。

SPI1_Pins:pinmux_SPI1_Pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x908、PIN_INPUT | MUX_MODE2)
AM33XX_IOPAD (0x90C、PIN_INPUT | MUX_MODE2)
AM33XX_IOPAD (0x910、PIN_INPUT | MUX_MODE2)
AM33XX_IOPAD (0x99C、PIN_INPUT | MUX_MODE3)
>;
};

SPI1{(&S)
#address-cells =<1>;
#size-cells =<0>;

状态="正常";
pinctrl-names ="default";
pinctrl-0 =<&SPI1_PINs>;


max14830@0{
#address-cells =<1>;
#size-cells =<0>;

兼容="maxim、max14830";

reg =<0>;
SPI-max-frequency =<10000>;
spi-cpha;
};


max14830@1{
#address-cells =<1>;
#size-cells =<0>;

兼容="maxim、max14830";

reg =<1>;
SPI-max-frequency =<10000>;
};
};

问题:
------
但在内核启动期间、我们不会打印调试?
2.必须进行任何更改?
3.是否有人提出解决问题的建议?

此致、

Avinash N

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

    [引用 user="Avinash Neethi1"]

    max14830@0{
    #address-cells =<1>;
    #size-cells =<0>;

    兼容="maxim、max14830";

    reg =<0>;
    SPI-max-frequency =<10000>;
    spi-cpha;
    };


    max14830@1{
    #address-cells =<1>;
    #size-cells =<0>;

    兼容="maxim、max14830";

    reg =<1>;
    SPI-max-frequency =<10000>;
    };

    [/报价]

    我看不到 max14830 DTS 节点支持的"SPI-max-frequency "等属性。 有关详细信息、请参阅以下文件:

    Linux-4.9.59/Documentation/devicetree/bindings/serial/maxim、max310x.txt

    [引用 user="Avinash Neethi1">问题:
    ------
    但在内核启动期间、我们不会打印调试?
    2.必须进行任何更改?
    3.是否有人可以提供任何解决问题的建议?[/引述]

    如果您想查看内核驱动程序(如 max310x.c 和 SPI-OMAP2-mcspi.c)的调试消息、则需要打开内核调试语句。 有关详细信息、请参阅以下指针:

    此致、
    帕维尔

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

    您好、Pavel、  

          我们已根据 Linux-4.9.59/Documentation/devicetree/bindings/serial/maxim、max310x.txt 在 DTS 中进行了更改。 但我们仍然没有解决这个问题。 在 Linux 引导期间发生错误  

    错误日志:

    PI spi1.0:不对 McSPI 使用 DMA (-19)
    max310x spi1.0:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.0:MAX14830 ID 0x00不匹配

    DTS 已更改:

    SPI1{(&S)
    #address-cells =<1>;
    #size-cells =<0>;

    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;

    max14830:max14830@1{
    兼容="maxim、max14830";
    SPI-max-frequency =<26000000>;
    reg =<0>;
    时钟=<&clk24m0>;
    时钟名称="osc";
    clk24m0:clk24m0{
    兼容="固定时钟";
    #clock-cells =<0>;
    时钟频率=<24000000>;
    时钟精度=<100>;
    };
    };
    };

    我们探测时钟引脚。 没有时钟来。 因此、他由一个外部振荡器(24MHz)提供。  

    问题:

    1.问题出在哪呢?

    2.在驱动程序中必须进行任何更改?

    3.是否有人提出解决问题的建议?

     

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

    [引用 user="Avinash Neethi1"]

    在 Linux 引导期间发生错误  

    错误日志:

    PI spi1.0:不对 McSPI 使用 DMA (-19)
    max310x spi1.0:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.0:MAX14830 ID 0x00不匹配

    [/报价]

    请提供完整的引导日志、而不仅仅是其中的一部分。 您可以将日志文件放入 txt 文件并将其附加到论坛中的此处。

    [引用 USER="Avinash Neethi1]\n 我们探测了时钟引脚。 没有时钟来。 因此、他由一个外部振荡器(24MHz)提供。  [/报价]

    哪个时钟引脚准确? 请提供更多详细信息。

    [引用 user="Avinash Neethi1]1. 问题可能是什么?[/报价]

    问题可能是 DTS 文件更新不正确和/或时钟配置错误。

    [引用 user="Avinash Neethi1">2. 必须在驱动程序中进行任何更改?

    不可以、我认为不应更改驱动程序(max310x.c 或 SPI-OMAP2-mcspi.c)。

    [引用 user="Avinash Neethi1]3. 是否有人可以提供任何解决问题的建议?[/引述]

    我正尝试向您提供解决问题的建议。

    此致、
    帕维尔

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

    [引用 USER="Avinash Neethi1]PI spi1.0:不对 McSPI 使用 DMA (-19)
    max310x spi1.0:不对 McSPI 使用 DMA (-19)

    这些消息意味着您将使用 PIO 模式、而不是 DMA。 这只是一条警告消息、如果您不打算使用 DMA 进行数据传输、则可以忽略。 有关更多信息、请参阅以下 e2e 线程:

    此致、
    帕维尔

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

    您好、Pavel、

    请 提供完整的引导日志、而不仅仅是其中的一部分。 您可以将日志文件放入 txt 文件并将其附加到论坛中的此处。

    e2e.ti.com/.../Error_5F00_Log.txt

    确切地说、哪个时钟引脚? 请提供更多详细信息。

    myspi1_pins_default:myspi1_pins_default{
    pinctrl-single、pins =<
    0x108 (PIN_INPUT | MUX_Mode2)/*(H16) gmii1_col.SPI1_SCLK *
    0x10c (PIN_INPUT | MUX_Mode2)/*(H17) gmii1_crs.SPI1_d0 */
    0x110 (PIN_INPUT | MUX_Mode2)/*(J15) gmii1_rxer.SPI1_D1 *
    0x19c (PIN_INPUT | MUX_MODE3)//(C12) McASP0_ahclkr.SPI1_cs0 */
    >;
    };
    我们在处理器的 H16中探测。
    3. 问题可能是 DTS 文件更新不正确和/或时钟配置错误。

    SPI1{(&S)
    #address-cells =<1>;
    #size-cells =<0>;

    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;

    max14830:max14830@1{
    兼容="maxim、max14830";
    SPI-max-frequency =<26000000>;
    reg =<0>;
    时钟=<&clk24m0>;
    时钟名称="osc";
    clk24m0:clk24m0{
    兼容="固定时钟";
    #clock-cells =<0>;
    时钟频率=<24000000>;
    时钟精度=<100>;
    };
    };
    };

    感谢支持人员、并等待您的支持人员解决问题。

    此致、

    Avinash N  

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

    [引用 user="Avinash Neethi1"]

    请 提供完整的引导日志、而不仅仅是其中的一部分。 您可以将日志文件放入 txt 文件并将其附加到论坛中的此处。

    (请访问网站以查看此文件)

    [/报价]

    关于 DMA 警告消息、我已经在上一个帖子中进行了说明。

    关于"max310x spi1.0:MAX14830 ID 0x00不匹配"消息、这是错误消息、应该被修复。 由于此错误消息来自 Maxim Dallas MAX14830驱动程序、我建议您与 maxim 支持团队联系、他们可能会帮助您更多地处理此错误消息。

    我可以告诉大家的是、AM335x McSPI 模块和 MAX14830芯片之间的 SPI 通信可能存在问题。 我建议您使用示波器 AM335x McSPI 引脚进行探测、并检查此处是否有预期的信号。

    我还看到您正在使用 Ubuntu Linux 发行版。 请注意、此论坛仅支持 AM335x TI PSDK 附带的 Arago Linux 发行版(链接如下)。 如果您可以切换到 TI PSDK、我们可以提供更好的帮助。

    [引用 user="Avinash Neethi1"] 0x108 (PIN_INPUT | MUX_Mode2)/*(H16) gmii1_col.SPI1_SCLK */

    [引用 user="Avinash Neethi1"]我们在处理器的 H16中进行了探测。

    您是否在该引脚上有时钟输出信号?

    [引用 USER="Avinash Neethi1]max14830:max14830@1{
    兼容="maxim、max14830";
    SPI-max-frequency =<26000000>;
    reg =<0>;
    时钟=<&clk24m0>;
    时钟名称="osc";
    clk24m0:clk24m0{
    兼容="固定时钟";
    #clock-cells =<0>;
    时钟频率=<24000000>;
    时钟精度=<100>;
    };
    };[/报价]

    根据我的理解、您将为 MAX14830芯片提供24MHz 固定时钟、而该24MHz 时钟不是从 AM335x H16引脚生成的。 请注意、AM335x McSPI 内核驱动程序仅支持主模式、您应通过 H16引脚提供时钟。

    此致、
    帕维尔

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

    您好、Pavel、

    我们进行了更改、

    引脚多路复用器:

    ------------------

    SPI2_PINS:myspi2_PINS_DEFAULT{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x908、PIN_OUTPUT 上拉| MUX_Mode2)/*(H16) gmii1_col.SPI1_SCLK *
    AM33XX_IOPAD (0x90c、PIN_OUTPUT 上拉| MUX_Mode2)/*(H17) gmii1_crs.SPI1_d0 *
    AM33XX_IOPAD (0x910、PIN_INPUT_PULLUP | MUX_MODE2)/*(J15) gmii1_rxer.SPI1_D1 *
    AM33XX_IOPAD (0x944、PIN_OUTPUT 上拉| MUX_Mode2)/*(H18) rmii1_REFCLK/SPI1_cs0 *
    AM33XX_IOPAD (0x964、PIN_OUTPUT_PULLUP | MUX_MODE2)/*(C18) eCAP0_IN_PWM0_OUT.SPI1_CS1*/
    >;
    };

    DTS:

    ------------------------

    SPI_UART_clk:SPI_UART_clk{
    #clock-cells =<0>;
    兼容="固定因子时钟";
    时钟=<&DPLL_PER_M2_DIV4_ck >;
    时钟多路复用=<10>;
    clock-div =<48>;
    };

    SPI1{(&S)

    #address-cells =<1>;
    #size-cells =<0>;

    U4:max14830@0{
    兼容="maxim、max14830";
    reg =<0>;
    SPI-max-frequency =<26000000>;
    时钟=<&SPI_UART_clk>;
    时钟名称="osc";
    interrupt-parent =<&GPIO3>;
    中断=<21 0x2>;
    GPIO 控制器;
    #GPIO-cells =<2>;
    };

    U5:max14830@1{
    兼容="maxim、max14830";
    reg =<0>;
    SPI-max-frequency =<26000000>;
    时钟=<&SPI_UART_clk>;
    时钟名称="osc";
    interrupt-parent =<&GPIO3>;
    中断=<21 0x2>;
    GPIO 控制器;
    #GPIO-cells =<2>;
    };

    };

    Linux 引导时出错:

    ----------------------------------------

    max310x spi1.0:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.0:MAX14830 ID 0x00不匹配

    max310x spi1.1:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.1:MAX14830 ID 0x00不匹配

    时钟引脚为高电平。 仍然无法访问 MAX14830 IC

    等待响应。 我们之所以保持生产、是因为这个问题。

    此致、

    Avinash N

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

    Avinash、

    [引用 user="Avinash Neethi1">SPI2_PINS:myspi2_PINS_DEFAULT{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x908、PIN_OUTPUT 上拉| MUX_Mode2)/*(H16) gmii1_col.SPI1_SCLK *
    AM33XX_IOPAD (0x90c、PIN_OUTPUT 上拉| MUX_Mode2)/*(H17) gmii1_crs.SPI1_d0 *
    AM33XX_IOPAD (0x910、PIN_INPUT_PULLUP | MUX_MODE2)/*(J15) gmii1_rxer.SPI1_D1 *
    AM33XX_IOPAD (0x944、PIN_OUTPUT 上拉| MUX_Mode2)/*(H18) rmii1_REFCLK/SPI1_cs0 *
    AM33XX_IOPAD (0x964、PIN_OUTPUT_PULLUP | MUX_MODE2)/*(C18) eCAP0_IN_PWM0_OUT.SPI1_CS1*/
    >;
    };[/报价]

    AM335x 器件具有 SPI0/0x48030000和 SPI1/0x481A0000。 没有 SPI2模块。 您可以为"SPI2_PINS:myspi2_PINS_DEFAULT"指定正确的名称。 将 SPI2替换为 SPI1。

    [引用 USER="Avinash Neethi1]SPI_UART_clk:SPI_UART_clk{
    #clock-cells =<0>;
    兼容="固定因子时钟";
    时钟=<&DPLL_PER_M2_DIV4_ck >;
    时钟多路复用=<10>;
    clock-div =<48>;
    };[/报价]

     [引用 USER="Avinash Neethi1]U4:max14830@0{
    兼容="maxim、max14830";
    reg =<0>;
    SPI-max-frequency =<26000000>;
    时钟=<&SPI_UART_clk>;

    SPI1_SCLK 时钟(引脚 H16)和 SPI_UART_CLK 时钟是不同的时钟信号。 您从哪个 AM335x 器件引脚(如果有)向 MAX14830芯片提供该时钟?

    [引用 user="Avinash Neethi1"]

    max310x spi1.0:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.0:MAX14830 ID 0x00不匹配

    max310x spi1.1:不使用针对 McSPI 的 DMA (-19)
    max310x spi1.1:MAX14830 ID 0x00不匹配

    [/报价]

    我已经提供了有关这些警告/错误消息的答案。

    [引用 USER="Avinash Neethi1]Clock 引脚为高电平。 我们仍然无法访问 MAX14830 IC[/QUERE]

    您是指引脚 H16 SPI1_SCLK 吗? 请注意、这是时钟引脚、并且不应始终为高电平。 该时钟信号应在预定义频率下切换(从低到高到低)。 请参阅 AM335x 数据表第7.12.1.2节 McSPI—主模式

    此致、
    帕维尔

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

    您好、Pavel、

     AM335x 器件具有 SPI0/0x48030000和 SPI1/0x481A0000。 没有 SPI2模块。 您可以为"SPI2_PINS:myspi2_PINS_DEFAULT"指定正确的名称。 将 SPI2替换为 SPI1。

    正如您提到的、我已经对引脚多路复用器进行了更改。  

     SPI1_SCLK 时钟(引脚 H16)和 SPI_UART_CLK 时钟是不同的时钟信号。 您从哪个 AM335x 器件引脚(如果有)向 MAX14830芯片提供该时钟?

    我们刚刚将其命名为 SPI_UART_clk。 通过使用 DPLL_PER_M2_DIV4_CK、我们已经编写了一个时钟例程来生成到 MAX14830的时钟。  

    3. 您是指引脚 H16 SPI1_SCLK 吗? 请注意、这是时钟引脚、并且不应始终为高电平。 该时钟信号应在预定义频率下切换(从低到高到低)。

    在上电条件下、当 Linux 引导时、CLK 信号为低电平;在某些情况下、CLK 信号为低电平。

    问题:

    AM3352是 SPI 主设备、您能否提供一些示例代码来生成 MAX14830 IC 的时钟。

    此致、

    Avinash N

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

    [引用 user="Avinash Neethi1"]

     SPI1_SCLK 时钟(引脚 H16)和 SPI_UART_CLK 时钟是不同的时钟信号。 您从哪个 AM335x 器件引脚(如果有)向 MAX14830芯片提供该时钟?

    我们刚刚将其命名为 SPI_UART_clk。 通过使用 DPLL_PER_M2_DIV4_CK、我们已经编写了一个时钟例程来生成到 MAX14830的时钟。  

    [/报价]

    我仍然不清楚。 MAX14830芯片需要两个时钟信号、SCLK 和 XIN。 您正在使用引脚 H16 SPI1_SCLK 为 SCLK 供电。 XIN 怎么样、您是否使用 SPI_UART_clk? 请提供有关这一点的更多详细信息。

    [引用 user="Avinash Neethi1"]

    3. 您是指引脚 H16 SPI1_SCLK 吗? 请注意、这是时钟引脚、并且不应始终为高电平。 该时钟信号应在预定义频率下切换(从低到高到低)。

    在上电条件下、当 Linux 引导时、CLK 信号为低电平;在某些情况下、CLK 信号为低电平。

    [/报价]

    这看起来不正确。 SPI1_SCLK 信号应在最低100KHz 频率下切换(标准模式)。

    [引用 user="Avinash Neethi1"]

    uestion (摄取):

    AM3352 是 SPI 主设备、您能否提供一些示例代码来生成 MAX14830 IC 的时钟。

    [/报价]

    请参阅以下 wiki:

    processors.wiki.ti.com/.../Linux_Core_SPI_User's_Guide

    此致、
    帕维尔

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

    您好、Pavel、

    我仍然不清楚。 MAX14830芯片需要两个时钟信号、SCLK 和 XIN。 您正在使用引脚 H16 SPI1_SCLK 为 SCLK 供电。 XIN 怎么样、您是否使用 SPI_UART_clk? 请提供有关这一点的更多详细信息。

    对于 XIN,我们提供了一个3.686MHz 外部晶体振荡器。

    2. 这看起来不正确。 SPI1_SCLK 信号应在最低100KHz 频率下切换

    在上电条件下、SPI1_SCLK 为低电平、一段时间后、SPI1_SCLK 变为高电平。 仍然没有生成时钟。

    问题:

    1. linux、spidev 在 dts 中用作 compatablie,然后在 dev 中创建节点。 但我使用的是 maxim、max14830、dev 中没有创建节点。  

    2.我无法查看附加的文件以供参考

    问题出在哪呢?

    此致、

    Avinash N

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

    Avinash、

    [引用 USER="Avinash Neethi1"]对于 XIN,我们提供了一个3.686MHz 外部晶体振荡器。

    我认为这个时钟应该在 max14830 DTS 节点中描述:

    Linux-4.9.59/Documentation/devicetree/bindings/serial/maxim、max310x.txt

    max14830:max14830@0{
          兼容="maxim、max14830";
          reg =<0>;
          时钟=<&clk20m>;
          时钟名称="osc";

    -时钟:与 IC 源时钟相连接。
    -时钟名称:如果时钟是外部晶体、则应为"xtal";如果使用外部时钟源、则应为"osc"。

    您可以与 MAX14830支持团队再次核对。

     

    [引用 user="Avinash Neethi1">SPI1_SCLK 在上电条件下处于低电平、并在一段时间后变为高电平。 仍然没有生成时钟。

    根据我的理解、您在主传输模式下使用 AM335x McSPI 模块、正确吗? 您应该看到的第一个信号是 CS 从高电平转换为低电平。 你明白了吗?

    [引用 user="Avinash Neethi1"]

    问题:

    1. linux、spidev 在 dts 中用作 compatablie,然后在 dev 中创建节点。 但我使用的是 maxim、max14830、dev 中没有创建节点。  

    2.我无法查看附加的文件以供参考

    问题出在哪呢?

    [/报价]

    我建议您在 McSPI 和 MAX14830 Linux 内核驱动程序中启用调试/警告消息、并确保一切正常运行、例如探测器功能成功。 修复后、您可以继续执行用户空间测试程序。

    此致、
    帕维尔