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/AM3354:AM3354无法通过 SPI 读取 MC795 RTC

Guru**** 2574125 points
Other Parts Discussed in Thread: AM3354

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/628343/linux-am3354-am3354-not-able-to-read-mc795-rtc-over-spi

器件型号:AM3354AM3354

工具/软件:Linux

大家好、

我们有基于 AM3354的定制板。 连接到 AM3354 SPI 端口1的 SPI 兼容外部 RTC (MCP79510-I)。 我已对 SPI 1、禁用内置 RTC (OMAP-RTC)以及启用内核配置的 spidev 和 MC795 SPI-RTC 模块进行了器件树更改。 构建内核后、我无法看到/dev/dev 下列出的 RTC 和 SPI 设备。 下面是我的引脚多路复用和 SPI-RTC 更改、

SPI1_Pins:pinmux_SPI1_Pins{
       pinctrl-single、pins =<
               0x190 (PIN_INPUT | MUX_MODE3)/*(A13) McASP0_aclkx.SPI1_SCLK */
               0x194 (PIN_INPUT | MUX_MODE3)/*(B13) McASP0_FSX.SPI1_d0 */
               0x198 (PIN_OUTPUT | MUX_MODE3)/*(D12) McASP0_axr0.SPI1_D1 */
               0x19c (PIN_OUTPUT | MUX_MODE3)//(C12) McASP0_ahclkr.SPI1_cs0 */
       >;
 };

SPI1{(&S)
   状态="正常";
   pinctrl-names ="default";
   pinctrl-0 =<&SPI1_PINs>;
   ti、pidd-d0-out-d1-in=<1>;
   spidev{
       兼容="微芯片、mcp795-RTC";
       /*我们使用 SPI CS 0;注册相同的*/
       reg =<0>;
       SPI-max-frequency =<1000000>;
       SPI-Cs-HIGH;
       /*在 CPOL 和 CPHA 设置为零时运行*/
       /* spi-cpol;*/
       /* spi-cpha;*/
   };
};

e2e.ti.com/.../5661.dmesg_5F00_output.txt

我们使用 ProcessorSDK 03.03、

内核版本4.4.41

此外、请查找所附的 dmesg 输出、器件树文件以供参考、并查找所附的 RTC 原理图。 请告诉我、需要对 DT 进行任何其他更改。

此致、

Ravikumar

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

    乍一看、MMC 和 SPI 之间有 pinmux confilcts:
    [0.590094] pinctrl-single 44e10800.pinmux:481a0000.SPI 已请求引脚44e1099c.0;无法申请47810000.MMC
    [0.601385] pinctrl-single 44e10800.pinmux:引脚103 (47810000.MMC)状态-22
    [0.608606] pinctrl-single 44e10800.pinmux:无法从器件 pinctrl-single 上的组 pinmux_WLAN_pins 请求引脚103 (44e1099c.0)
    [0.621034] omap_hmc 47810000.mmc:应用设置时出错、反向

    请检查 Linux 内核和 u-boot 中的 pinmux 设置。

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

    Yordan,您好!

    感谢您的回复。 我已删除 mmc3和 WLAN SPI1引脚相关性、因为我不再使用这些引脚。 删除.dts 中的这些依赖项后、我没有收到任何与 SPI 或 RTC 相关的内核调试消息。

    如果我按如下方式修改节点&SPI1,

    SPI1{(&S)

      状态="正常";

      pinctrl-names ="default";

      pinctrl-0 =<&SPI1_PINs>;

      /* DO 为 MOSI、D1为 MISO */

      ti、pidd-d0-out-d1-in=<1>;

      /*ti,pid-d0-in-d1-out;*/

      spidev{

        兼容="spidev";

        //兼容="微芯片、mcp795-rtc";

        /*我们使用 SPI CS 0;注册相同的*/

        reg =<0>;

        SPI-max-frequency =<1000000>;

        SPI-Cs-HIGH;

        /*在 CPOL 和 CPHA 设置为零时运行*/

        /* spi-cpol;*/

        /* spi-cpha;*/

      };

    我在 dmesg 输出中得到以下误差、

    root@AM335x-EVM:~# dmesg | grep SPI                                              

    [8.602015]  spidev spi1.0:dbuggy DT:spidev 直接列在 DT 中

    [8.608199]  警告:CPU:0 PID:169 at /home/chinna/Documents/tisdk/tisdk/build/arago-tmp-external-linaro-toolchain/work-shared)

    [8.608210]  链接到的模块:spidev (+) EDT_ft5x06 ti_AM335x_TSC musb_AM335x omap_wdt ti_AM335x_tscadc matrial_stypad match_keym)

    [8.608467][   ](warn_slowpath_null)、来自[ ](spidev_probe +0x1a8/0x1c4 [spidev])

    [8.608506]  [ ](spidev_probe [spidev])、来自[ ](SPI_drv_probe +0x84/b0)

    [8.608550]  [ ](SPI_drv_probe)、来自[ ](DRIVER_PROBLE_DEVICE_0x204/0x2f8)

    [8.608760][   ](driver_register)、从[ ](_SPI_REGISTER_DRIVER+0x60/0x64)

    [8.608798]  [ ](__SPI_REGISTER_DRIVER)、来自[ ](spidev_init+0x98/0xd0 [spidev])

    [8.608822]  [ ](spidev_init [spidev])、来自[ ](do_one _initcall+0x98/0x1e4)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该将 spidev 与 SPI1的某些 cs 相关联。 例如、如果您希望 spidev 位于 SPI1的 cs0、则需要定义:
    spidev@0{ => Spidev 与 SPI1_cs0相关联
    这将导致/dev/spidev1.0

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

    已完成更改。 我的 SPI1节点如下所示、
    SPI1{(&S)
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;
    /* DO 为 MOSI、D1为 MISO */
    ti、pidd-d0-out-d1-in=<1>;
    /*ti,pid-d0-in-d1-out;*/
    /*SPI-max-frequency =<1000000>;*/

    spidev@0{
    兼容="spidev";
    //兼容="微芯片、mcp795-rtc";
    /*我们使用 SPI CS 0;注册相同的*/
    reg =<0>;
    SPI-max-frequency =<1000000>;
    SPI-Cs-HIGH;
    /*在 CPOL 和 CPHA 设置为零时运行*/
    /* spi-cpol;*/
    /* spi-cpha;*/
    };


    我仍然会收到与最后一条消息中所述相同的错误、但当我执行"ls /dev/dev"时、我可以看到"spidev1.0"。

    此外、在 SPI@0子节点下、如果我将兼容字符串更改为"compatible ="microchip、mcp795-RTC";那么我在内核日志下看不到任何与 SPI 和 RTC 相关的内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、您好!

    已完成更改。 我的 SPI1节点如下所示、
    SPI1{(&S)
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;
    /* DO 为 MOSI、D1为 MISO */
    ti、pidd-d0-out-d1-in=<1>;
    /*ti,pid-d0-in-d1-out;*/
    /*SPI-max-frequency =<1000000>;*/

    spidev@0{
    兼容="spidev";
    //兼容="微芯片、mcp795-rtc";
    /*我们使用 SPI CS 0;注册相同的*/
    reg =<0>;
    SPI-max-frequency =<1000000>;
    SPI-Cs-HIGH;
    /*在 CPOL 和 CPHA 设置为零时运行*/
    /* spi-cpol;*/
    /* spi-cpha;*/
    };


    我仍然会收到与最后一条消息中所述相同的错误、但当我执行"ls /dev/dev"时、我可以看到"spidev1.0"。

    此外、在 SPI@0子节点下、如果我将兼容字符串更改为"compatible ="microchip、mcp795-RTC";那么我在内核日志下看不到任何与 SPI 和 RTC 相关的内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、您好!

    请建议 DT 中是否有任何更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    [引用]我仍然会遇到与最后一条消息中所述相同的错误、但我在执行"ls /dev/expage"时可以看到"spidev1.0"。

    您是否了解过 spidev 驱动程序? 它与 Rohm、dh2228fv 或线性技术 ltc2488兼容。 它与"spidev"或 RTC 驱动程序"microchip、mcp795-RTC"不兼容。 您需要 spidev 来验证是否已正确启用 SPI 控制器。

    由于您连接外部 RTC、因此您需要如下所示:
    SPI1{(&S)
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;
    /* DO 为 MOSI、D1为 MISO */
    ti、pidd-d0-out-d1-in=<1>;
    /*ti,pid-d0-in-d1-out;*/
    /*SPI-max-frequency =<1000000>;*/
    + mcp795:RTC@0{
    + 兼容="微芯片、mcp795-RTC";
    + reg =<0>;
    + SPI-max-frequency =<1000000>;
    +};


    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan 感谢你的答复。 根据您的建议、我修改了 SPI1节点。 现在我看不到任何与 mcp795-RTC 相关的引导日志。 我找到了一篇有关同一问题的 e2e 文章"e2e.ti.com/.../606313"。 我已经对上述补丁进行了欺骗、但仍然没有结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我们正在等待您的意见。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否添加了:
    CONFIG_RTC_DRV_MCP795=y
    tisdk_AM335x-evm_defconfig 中的位?

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

    Yordan、您好!

    是的 、"CONFIG_RTC_DRV_MCP795=y"已存在于.config 文件中。

    此致、

    Ravikumar

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

    Yordan、您好!

    对此进行了任何更新?

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

    我认为 RTC-mcp795驱动程序未在我的主机中编译、我在目标计算机的目录"/lib/modules/4.4.41-gf9f6f0db2d/kernel/drivers/rtc 下找不到.ko 文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    尝试将其构建为模块:
    CONFIG_RTC_DRV_MCP795=m
    这应在主机上的以下目录下编译.ko 文件:
    μ C/ti-processor-sdk-linux-am57xx-evm-04.00.04/ board-support/linux-4.9.28+gitAUTOINC+e43d1050-geed43d1050/drivers/rtc/~

    复制电路板上的.ko 文件、并在引导后将其加载。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,这是有效的! 非常感谢 Yordan。