我拼命尝试使PRU在我的BBB上正常工作。通过工作,我的意思是我想将引脚P8 39-46(GPIO2 [6-13])用作PRU控制的快速输出。

我在SD上为BBB安装了debian(2周前应该是最新版本)。

然后,我从以下文章开始:http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/05/22/bbb--working-with-the-pru-icssprussv2

这样做,我使PRU可以使用LED示例以及引脚P8 [12]。

现在,我尝试使其他引脚工作。首先,我对原始的am335x-boneblack.dtb进行了一些更改。我刚刚激活了PRU。
我没有更改LED心跳以及引脚P8.12。

然后我在uEnv.txt中禁用了HDMI
我的“广告位”现在看起来像这样:

0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN

我在这里偶然发现了这个帖子:https://groups.google.com/forum/#!topic/beagleboard/JRG36bOURfk

正是我想要的东西,所以我拿了dts(第二个),编译了它,将它复制到/ lib / firmware并加载了它。 “插槽”表示覆盖层已加载。
0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-PRU-IO

BB-PRU-IO是我。

dmesg说:
... part_number 'BB-PRU-IO', version 'N/A'
... slot #7: generic override
... bone: Using override eeprom data at slot 7
... slot #7: 'Override Board Name,00A0,Override Manuf,BB-PRU-IO'
... slot #7: Requesting part number/version based 'BB-PRU-IO-00A0.dtbo
... slot #7: Requesting firmware 'BB-PRU-IO-00A0.dtbo' for board-name 'Override Board Name', version '00A0'
... slot #7: dtbo 'BB-PRU-IO-00A0.dtbo' loaded; converting to live tree
... slot #7: #2 overlays
... slot #7: Applied #2 overlays.

我会说看起来不错。

问题是针尖上的胶粘剂没有被打动:

猫别针| grep 8a4
=>引脚41(44e108a4)0000002f pinctrl-单

这是模式7(GPIO输出)。不是我想要的对于所有引脚,我打算切换到PRU模式5。

现在,我在/ lib / firmware中尝试了PRU 01,02的交付dtbo。

PRU-01.dtbo似乎是一个合适的例子。只有引脚不同(P9.27)。
我加载了它,并更改了PRU代码示例。
引脚没有显示预期的结果:
引脚105(44e109a4)00000027 pinctrl-single
当我从第一个关节运行修改后的测试程序时,我的osci会显示一条平线。

我尝试了PRU-02.dtbo。
至少引脚显示了预期的结果:
引脚105(44e109a4)00000025 pinctrl-single
当我启动小测试程序时,出现“总线错误”

dmesg有几行。我要说的重要的是:
[119.258978]警告:位于arch / arm / mach-omap2 / omap_hwmod.c:2096 _enable + 0x101 / 0x174()
[119.259004] omap_hwmod:pruss:只能从初始化,空闲或禁用状态进入启用状态
[119.259027]链接到的模块:g_multi libcomposite btusb蓝牙rfkill uio_pruss mt7601Usta(O)
....几个跟踪消息
[119.272382] pru-rproc 4a300000.prurproc:#8个PRU中断已注册
[119.272445] pru-rproc 4a300000.prurproc:无法读取事件数组
[119.287545] pru-rproc:4a300000.prurproc的探测失败,错误为-22

PRU-02比PRU-01做得更多(我不了解)。它似乎对我不起作用。

现在我有点无助。
有什么想法吗?

编辑:
我做了你不应该做的事。我更改了am335x-boneblack.dtb文件中的pinmux设置。我刚刚添加:
0xA0 0x05
0xA4 0x05
0xA8 0x05
0xAC 0x05
0xB0 0x05
0xB4 0x05
0xB8 0x05
0xBC 0x05

到pinmux_userled_pins {
pinctrl-single,pins = <

现在可以了,但是我不高兴。我仍然希望有一个常规的覆盖文件。

最佳答案

好吧,我知道了!

  • 只需在am335x-boneblack.dtb中启用pruss(转换为dts。按照原始文章中提到的文章中所述进行更改)
  • 转到网站:http://kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator#dtogenerator,让该站点为我的案例P8 46-39中的各种引脚创建dts文件。为每个单独的引脚使用一个DTS(DTBO)文件是可行的,但需要加载8个dtbos =>我将所有这些都移到了一个DTS文件中。

  • 就是这个:
    /dts-v1/;
    /plugin/;
    
    /{
        compatible = "ti,beaglebone", "ti,beaglebone-black";
        part_number = "BS_PINMODE_PRU_OUT";
    
        exclusive-use =
        "P8.46",
        "P8.45",
        "P8.44",
        "P8.43",
        "P8.42",
        "P8.41",
        "P8.40",
        "P8.39",
        "pr1_pru1_pru_r30_6",
        "pr1_pru_pru1_r30_7",
        "pr1_pru1_pru_r30_4",
        "pr1_pru1_pru_r30_5",
        "pr1_pru1_pru_r30_2",
        "pr1_pru1_pru_r30_3",
        "pr1_pru1_pru_r30_0",
        "pr1_pru1_pru_r30_1";
    
        fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            bs_pinmode_pru_out: pinmux_bs_pinmode_pru_out {
                pinctrl-single,pins = <0x0a4 0x5 0x0a0 0x5 0x0ac 0x5 0x0a8 0x5 0x0b4 0x5 0x0b0 0x5 0x0bc 0x5 0x0b8 0x5>;
            };
        };
    };
    
        fragment@1 {
            target = <&ocp>;
            __overlay__ {
                bs_pinmode_pru_out_pinmux {
                    compatible = "bone-pinmux-helper";
                    status = "okay";
                    pinctrl-names = "default";
                    pinctrl-0 = <&bs_pinmode_pru_out>;
                };
            };
        };
    };
    

    我将文件命名为bspm_pru_out-00A0.dts,将其编译为bspm_pru_out-00A0.dtbo并将其放置在/ lib / firmware中。

    您可以通过/boot/uEnv.txt或通过echo ...将其加载到rc.local文件中...任意使用。

    10-07 14:40