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.

[参考译文] AM335x:SPI0未接收

Guru**** 2609465 points
Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582373/am335x-spi0-not-receiving

主题中讨论的其他器件:AM3358


您好!

我已经在许多论坛上搜索了几个星期的问题答案。 我正在为 BeagleBone Balck (AM3358 Sitara 处理器)使用内置器件。 我正在尝试在没有顶层 Cape 管理器的情况下使用 SPI0、因此我要编写自己的器件树。 从内核构建开始。

sudo make linux-menuconfig

[]设备驱动程序

[*]SPI 支持

<*> SPI 驱动程序的调试支持
用于 OMAP 的<*>McSPI 驱动程序
<*>用户模式 SPI 设备驱动程序支持
SPI 环回测试框架支持

其次、我将 AM335x-bonebblack.dTB 编辑为:

spi0_pins:pinmux_spi0_pins{

pinctrl-single、pins =<

0x150 (PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_SCLK.spi0_SCLK  
0x154 (PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_d0.spi0_d0 *
0x158 (PIN_OUTPUT PULLUP | MUX_MODE0)/* spi0_D1.spi0_D1 *
0x15C (PIN_OUTPUT PULLUP | MUX_MODE0)/* spi0_cs0.spi0_cs0 *

>;

};

然后编辑了 am33xx.dtsi 中的以下行

spi0:SPI@48030000{

兼容="ti、omab4-mcspi"、"rohm、dh2228fv";
#address-cells =<1>;
#size-cells =<0>;
REG =<0x48030000 0x400>;
中断=<65>;
TI、SPI-num-cs =<2>;
pinctrl-names ="default";
pinctrl-0 =<&spi0_PINs>;
ti、hwmods ="spi0";
TI、PIO 模式=<1>;
状态="正常";
spiddev:spidev@0{

兼容="spidev";
reg =<0>;
SPI-max-frequency =<1000000>;

};

};

最后、我使用构建我的内核和映像

sudo make linux-rebuild
sudo make

我复制了 SDCard 上的所有这些元素、该 SDCard 用于引导 BeagleBone Black。 在启动时,我遇到第一条消息:

[...] spidev 1.0:spidby dT:spidev 直接列在 DT 中
[...] ------ [在此处剪切]-----
(笑声)


启动后、我可以在/dev/spidev1.0.下看到我的不同器件 我使用 spidev_test.c 在 spi0引脚上运行环回、这些引脚由 MOSI 和 MISO 之间的电缆短接。 测试未成功完成、Rx 返回值全部为00、但发送 TX 信号。 我能够在逻辑分析仪上看到它们。 在大多数论坛中、他们说只需更改 SCLK 引脚的引脚配置、我可以将其更改为输入或输出、这不会改变任何东西。 此消息将会发出

#./spidev_test -D /dev/spidev1.0
[...]spidev spi1.0:不对 McSPI 使用 DMA (-19)
[...]spidev spi1.0:不对 McSPI 使用 DMA (-19)
[...]spidev spi1.0:不对 McSPI 使用 DMA (-19)
SPI 模式:0
每字位数:8.
最大速度:500000Hz (500KHz)

00 00 00 00 00 00 00  
00 00 00 00 00 00 00  
00 00 00 00 00 00 00  
00 00 00 00 00 00 00  
00 00 00 00 00 00 00  
00 00 00 00 00 00 00  
00


我的问题是、我的声明/设置中是否缺少某些内容、或者其他地方是否存在某些内容? 我正在使用 Linux 4.9.13。

任何帮助都很好! 谢谢你

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

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

    您好、再说一次、

    我尝试过您的解决方案、但这不起作用。 也许我理解不对、但在 DTS 文件中、am335-EVM-profile2.dts 中完成的 pinmux 在哪里? 我只在目录中找到了 AM335x-EVM.dts 文件、但在互联网上找不到它。 另一个问题是配置文档提供的/dev/spidev1.0不存在、配置"用户模式 SPI 器件驱动程序支持"缺失。

    我将使用 spi0将 am33xx.dtsi 文件更改为"可以"、然后在 AM335x-bonblake.dts 中添加 pinmux。 您的文档中的步骤确实完成了、我按照文档"Linux Core SPI 用户指南"配置了内核。

    是否有一个文件可以用于完成和交叉检查?

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否尝试添加:
    ti、pidd-d0-out-d1-in =<1>;
    SPI 节点。 我们设法解决了将其添加到器件树设置中的类似问题。

    但首先需要交换 d0和 D1引脚、将其配置为 d0 ->输出、D1 ->输入。

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

    因此、我更改了 d0输出的这一部分、D1也将 SCLK 作为输入/输出。 结果是我可以读取00 (正常模式)和 FF (ti、pidd-d0-out-d1-in =<1>;)。 当处于输入模式时、SLCK 将数据变为00、当处于输出模式时、SLCK 将数据变为 FF。

    am33xx.dtsi
    现在是 GitHub 的默认配置、我看到更改 DTS 文件会覆盖 dtsi 文件。

    AM335x-bonebblack.dts

    spi0_pins:pinmux_spi0_pins{
    pinctrl-single、pins =<
    0x150 (PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_SCLK.spi0_SCLK
    0x154 (PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_d0.spi0_d0 *
    0x158 (PIN_OUTPUT PULLUP | MUX_MODE0)/* spi0_D1.spi0_D1 *
    0x15C (PIN_OUTPUT PULLUP | MUX_MODE0)/* spi0_cs0.spi0_cs0 *
    >;
    };

    spi0{(&S)
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&spi0_PINs>;
    /* ti、pidd-d0-out-d1-in =<1>;*/
    spidev@0{
    #address-cells =<1>;
    #size-cells =<0>;
    兼容="spidev";
    reg =<0>;
    SPI-max-frequency =<1000000>;
    };
    };

    这是最先进的、如果它可以帮助...、我在引导时也可以使用它。
    [...]
    [1.339099] spidev spi1.0:db车 DT:spidev 直接列在 DT 中
    [1.345602]------ [在此处剪切]-----
    [1.350440]警告:CPU:0 PID:1 at drivers/spi/spidev.c:757 spidev_probe_0x1a4/0x1e8
    [...]

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

    我设法使 spi0起作用、但 SPI1仍然没有响应。 我删除了 AM335x-bonebblack.dts 的所有不必要内容、以符合我的硬件要求。 结果如下:

    /*
    *版权所有(C) 2012德州仪器(TI)公司- http://www.ti.com/
    *
    *此程序是免费软件;您可以重新分发和/或修改
    *根据 GNU 通用公共许可证第2版的条款,如所示
    *由免费软件基金会发布。
    *
    /DTS-v1/;

    #include "am33xx.dtsi"
    #include "AM335x-bone-common.dtsi"
    #include

    /{
    型号="TI AM335x BeagleBone Black";
    兼容="ti、am335x-bone-black"、"ti、am335x-bone-"、"ti、am33xx";
    };

    ldo3_reg{(&L)
    稳压器最小微伏=<1800000>;
    稳压器最大值微伏=<1800000>;
    稳压器常开;
    };

    mmc1{(&M)
    VMMC-SUPPLY =<&vmmcsd_fixed>;
    };

    mmc2{(&M)
    VMMC-SUPPLY =<&vmmcsd_fixed>;
    pinctrl-names ="default";
    pinctrl-0 =<&eMMC_PINs>;
    总线宽度=<8>;
    状态="正常";
    };

    am33xx_pinmux{(am33xx_pinmux)}

    spi0_pins:pinmux_spi0_pins{
    pinctrl-single、pins =<
    /* spi0_SCLK.spi0_SCLK */
    AM33XX_IOPAD (0x950、PIN_INPUT | MUX_MODE0)
    /* spi0_d0.spi0_d0 */
    AM33XX_IOPAD (0x954、PIN_OUTPUT 上拉| MUX_MODE0)
    /* spi0_d1.spi0_d1 */
    AM33XX_IOPAD (0x958、PIN_INPUT | MUX_MODE0)
    /* spi0_cs0.spi0_cs0 */
    AM33XX_IOPAD (0x95C、PIN_OUTPUT | MUX_MODE0)
    /* spi0_CS1.spi0_CS1 */
    AM33XX_IOPAD (0x960、PIN_OUTPUT | MUX_MODE0)
    >;
    };

    SPI1_Pins:pinmux_SPI1_Pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x990、PIN_INPUT | MUX_MODE3)
    AM33XX_IOPAD (0x994、PIN_INPUT | MUX_MODE3)
    AM33XX_IOPAD (0x998、PIN_OUTPUT 上拉| MUX_MODE3)
    AM33XX_IOPAD (0x99c、PIN_OUTPUT | MUX_MODE3)
    AM33XX_IOPAD (0x964、PIN_OUTPUT | MUX_MODE2)
    >;
    };
    };

    RTC{(&R)
    系统功率控制器;
    };


    spi0{(&S)
    pinctrl-names ="default";
    pinctrl-0 =<&spi0_PINs>;
    状态="正常";
    ti、pidd-d0-out-d1-in =<1>;
    spidev@0{
    pinctrl-0 =<&spi0_PINs>;
    兼容 ="linux、spidev";
    寄存器 =<0>;
    SPI-max-frequency =<10000000>;
    };
    };

    SPI1{(&S)
    pinctrl-names ="default";
    pinctrl-0 =<&SPI1_PINs>;
    状态="正常";
    spidev@1{
    pinctrl-0 =<&SPI1_PINs>;
    兼容 ="linux、spidev";
    寄存器 =<0>;
    SPI-max-frequency =<10000000>;
    };
    };

    在 spidev_test 的测试中,我有以下结果:

    SPI0
    #./spidev_test -D /dev/spidev1.0 -v
    SPI 模式:0x0
    每字位数:8.
    最大速度:500000Hz (500KHz)
    TX | FF FF FF FF FF FF FF 40 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |… @………………… 。
    RX | FF FF FF FF FF FF FF FF 40 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |… @………………… 。

    SPI1
    #./spidev_test -D /dev/spidev2.0 -v
    SPI 模式:0x0
    每字位数:8.
    最大速度:500000Hz (500KHz)
    TX | FF FF FF FF FF FF FF 40 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |… @………………… 。
    RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |


    我只需要一条 SPI 总线、但了解 SPI1的运行情况仍然很有趣...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请帮帮我。 SPI1仍然无法正常工作、HDMI 被禁用、就像在 DTS 文件中一样。

    谢谢!