我拼命尝试使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 = <
现在可以了,但是我不高兴。我仍然希望有一个常规的覆盖文件。
最佳答案
好吧,我知道了!
就是这个:
/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文件中...任意使用。