我在 BBB 上启用 SPI 时遇到了麻烦,ofc 遵循了 hipstercircuits.com 的教程。 我什至在 uSD 上安装了一个全新的 arch linux,以防我真的搞砸了 eMMC 上的系统。
我的设置是:
由于 SPI1 与 HDMI 有问题,我禁用了我发现的任何与 HDMI 相关的东西。虽然不确定 fdfile 条目,但在网络上的某个地方找到了它。(我也试过没有它)如果这很重要,我目前正在使用 SD 卡。
uEnv.txt
optargs=quiet coherent_pool=1M fdtfile=am335x-boneblack.dtb capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
我直接从 hipstercircuits.com 获取 dts 文件,并使用通过 pacman 安装的 alarm/dtc-overlay 1.4.1-1 对其进行编译。
在 uEnv.txt 中禁用 HDMI 后
[root@alarm ~]# echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots
一切顺利,我看到了:
[root@alarm ~]# cat /sys/devices/bone_capemgr.9/slots
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-SPI1-01
我还尝试回显此处找到的 BB-SPIDEV0、BB-SPIDEV1 和 BB-SPIDEV1A1:
[root@alarm spi_a]# ls -l /lib/firmware | grep SPI
-rw-r--r-- 1 root root 1351 Jan 29 17:04 BB-SPI1-01-00A0.dtbo
-rw-r--r-- 1 root root 1185 Jan 25 01:06 BB-SPIDEV0-00A0.dtbo
-rw-r--r-- 1 root root 1185 Jan 25 01:06 BB-SPIDEV1-00A0.dtbo
-rw-r--r-- 1 root root 1185 Jan 25 01:06 BB-SPIDEV1A1-00A0.dtbo
spidev_test 的结果总是相同的。
更有趣的是,我在引脚组中没有看到任何关于 P9_29、P9_31 等的信息,它们是 SPI1 的一部分:
[root@alarm ~]# cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pingroups
registered pin groups:
group: pinmux_userled_pins
pin 21 (44e10854)
pin 22 (44e10858)
pin 23 (44e1085c)
pin 24 (44e10860)
group: pinmux_rstctl_pins
pin 20 (44e10850)
group: pinmux_i2c0_pins
pin 98 (44e10988)
pin 99 (44e1098c)
group: pinmux_i2c2_pins
pin 94 (44e10978)
pin 95 (44e1097c)
group: pinmux_mmc1_pins
pin 88 (44e10960)
group: pinmux_emmc2_pins
pin 32 (44e10880)
pin 33 (44e10884)
pin 0 (44e10800)
pin 1 (44e10804)
pin 2 (44e10808)
pin 3 (44e1080c)
pin 4 (44e10810)
pin 5 (44e10814)
pin 6 (44e10818)
pin 7 (44e1081c)
group: pinmux_userled_pins
pin 21 (44e10854)
pin 22 (44e10858)
pin 23 (44e1085c)
pin 24 (44e10860)
spidevs 存在于 /dev
[root@alarm ~]# ls -l /dev | grep spi
crw------- 1 root root 153, 1 Jan 29 17:13 spidev1.0
crw------- 1 root root 153, 0 Jan 29 17:13 spidev1.1
为了测试接口,使用了教程中提到的 python 方法和在 BBB 上编译的 spidev_test.c ( spidev_test.c )。
[root@alarm ~]# gcc spidev_test.c -o spidev_test
在 python 库的情况下,没有错误,但输出也没有 - 甚至 SCL 线上的时钟信号也没有。
spidev_test 返回:
[root@alarm spi_a]# ./spidev_test
can't set spi mode: Inappropriate ioctl for device
Aborted (core dumped)
[root@alarm spi_a]# ./spidev_test -D /dev/spidev1.0
can't set spi mode: Inappropriate ioctl for device
Aborted (core dumped)
[root@alarm spi_a]# ./spidev_test -D /dev/spidev1.1
can't set spi mode: Inappropriate ioctl for device
Aborted (core dumped)
我必须使用 hipstercircuit 教程开头提供的 *.dts 和 *.dtb 文件吗?
我可能很容易搞砸了。有什么想法吗?你让它像那样工作吗?欢迎所有建议,我们将不胜感激!;)