【自用】Jetson MFRC522 python 艰难探索

  1. 解决方法

GitHub上参考 接线 流程
https://santacrc.github.io/Jetson-MFRC522/

错误1

spi 通信问题

Traceback (most recent call last):
File “RC522.py”, line 4, in
reader = SimpleMFRC522()
File “/home/rey/.local/lib/python3.6/site-packages/Jetson_MFRC522/SimpleMFRC522.py”, line 14, in init
self.READER = MFRC522()
File “/home/rey/.local/lib/python3.6/site-packages/Jetson_MFRC522/MFRC522.py”, line 130, in init
self.spi.open(bus, device)
FileNotFoundError: [Errno 2] No such file or directory

相关参考
http://blog.claves.cn/archives/4053
https://sciencompass.com/electrical_work/jetson-nano/spi-set

参考完以上仍然未解决

设置/etc/udev 下文件 其实也没用

 Create /dev/spidevX.Y device nodes
KERNEL=="spidev*", SUBSYSTEM=="spidev", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:spi /dev/spidev* && chmod 660 /dev/spidev*'"

继续 安装spi相关驱动

sudo modprobe spi-tegra

modprobe: FATAL: Module spi-tegra not found in directory /lib/modules/4.9.299-tegra
这个错误表示系统无法找到 spi-tegra 模块。这可能是因为该模块不在当前的内核版本中。

首先,你可以通过以下命令检查当前加载的内核模块是否包括 spi-tegra 模块:

lsmod | grep spi

如果你没有看到 spi-tegra 模块,请尝试重新安装相关软件包。具体步骤如下:
检查系统是否已安装 spi-tegra 软件包。可以使用以下命令检查:

dpkg -l | grep spi-tegra

如果未找到该软件包,请继续下一步。
安装 spi-tegra 软件包。可以使用以下命令安装:

sudo apt-get install -y spi-tegra

问题又出现了
E: 无法定位软件包 spi-tegra

无法定位spi-tegra
如果你的系统无法找到 spi-tegra 模块,可能是因为模块不存在于系统中或者命名不一致。你可以尝试使用以下步骤来解决该问题:

检查系统中是否存在 spi-tegra 模块。你可以使用以下命令来查看模块是否存在:

find /lib/modules/$(uname -r) -name 'spi-tegra*'

如果没有找到该模块,请继续下一步。
果然没有找到该模块
检查模块名称是否正确。有时模块的名称可能不是 spi-tegra,而是其他名称,例如 spi_tegra。你可以使用以下命令来查看所有包含 spi 的模块名称:

find /lib/modules/$(uname -r) -name '*spi*'

如果找到了其他名称的模块,请将驱动程序中的名称进行相应更改。
这边我出现了一堆spi的文件 但是我不会改 哎呀呀
故放弃改解决方法

又倒回去 安装 spi-tegra 模块

如果你的系统上找不到 spi-tegra 模块,可能是因为该模块未被编译到内核中或未正确安装。

以下是一些尝试解决该问题的方法:

确认是否已安装相关软件包。你可以使用以下命令来安装 spi-tegra 软件包:

sudo apt-get install spi-tegra

如果该命令提示软件包不存在或无法安装,你可以尝试更新软件包列表并重试:

sudo apt-get update
sudo apt-get install spi-tegra

检查内核配置是否正确。检查内核配置是否启用了 CONFIG_SPI_TEGRA 选项。你可以使用以下命令来查看内核配置:

zcat /proc/config.gz | grep CONFIG_SPI_TEGRA

如果该命令输出了 CONFIG_SPI_TEGRA=y,则表示内核已正确配置。否则,你需要重新编译内核并确保启用了该选项。

如果你无法通过软件包安装 spi-tegra,你可以尝试手动编译和安装该模块。你可以使用 NVIDIA 提供的 JetPack SDK 中的 Linux For Tegra(L4T)源代码进行编译。具体步骤可以参考 NVIDIA 官方文档。
然后就没继续下去了

如果你确认模块存在且名称正确,那么可能是因为模块未加载或加载失败。你可以尝试使用以下命令来加载模块:

sudo modprobe spi-tegra

如果该命令成功运行,则表示模块已加载。如果该命令失败,则表示模块无法加载。你可以查看 /var/log/kern.log 文件以了解更多详细信息。

最后,你可以尝试重新安装 spi-tegra 软件包。使用以下命令来重新安装:

sudo apt-get install --reinstall spi-tegra

然后重启系统以使更改生效。

本菜鸡依旧怀揣侥幸心理

这将安装 spi-tegra 软件包及其依赖项。

重新启动系统以使更改生效。
如果仍然出现 modprobe: FATAL: Module spi-tegra not found 错误,请尝试在 sudo apt-get install 命令后加上 --reinstall 选项以重新安装软件包:

sudo apt-get install --reinstall -y spi-tegra

如果上述方法仍然无法解决问题,你可能需要升级内核或从其他来源获取 spi-tegra 模块。请注意,在升级内核或从其他来源获取模块之前,请备份重要数据并谨慎操作。

这将加载SPI内核模块并创建/dev/spidev*设备节点。
现在可以使用上面提到的Python代码来进行SPI通信。
如果在执行第2步时收到错误消息,则可能需要安装SPI内核模块。请检查你的系统是否已安装适当的软件包。你可以通过执行以下命令来安装SPI内核模块:

sudo apt-get update
sudo apt-get install -y linux-modules-extra-$(uname -r)

请注意,以上命令需要Internet连接来下载软件包。如果你没有Internet连接,则需要通过其他方式获取并安装适当的软件包。

即上述方法解决不了
找前辈的环境看看 发现自己之前可能走错路了

fit@fit-pc:~$ ls /etc/udev/rules.d/
90-alsa-asound-tegra.rules       99-nv-ufs-mount.rules
91-xorg-conf-tegra.rules         99-nv-wifibt.rules
92-hdmi-audio-tegra.rules        99-tegra-devices.rules
99-nv-l4t-usb-device-mode.rules  99-tegra-mmc-ra.rules
99-nv-l4t-usb-host-config.rules
fit@fit-pc:~$ lsmod | grep spi
spidev                 13282  0
fit@fit-pc:~$ 
fit@fit-pc:~$ cat /sys/bus/spi/devices/spi0.0/modalias 
spi:spidev
fit@fit-pc:~$ ls /sys/bus/spi/devices/
spi0.0  spi0.1  spi1.0  spi1.1  spi32766.0
fit@fit-pc:~$ 
fit@fit-pc:~$ 
fit@fit-pc:~$ modinfo spidev 
filename:       /lib/modules/4.9.201-tegra/kernel/drivers/spi/spidev.ko
alias:          spi:spidev
license:        GPL
description:    User mode SPI device interface
author:         Andrea Paterniani, <a.paterniani@swapp-eng.it>
alias:          of:N*T*Clineartechnology,ltc2488C*
alias:          of:N*T*Clineartechnology,ltc2488
alias:          of:N*T*Crohm,dh2228fvC*
alias:          of:N*T*Crohm,dh2228fv
alias:          of:N*T*CspidevC*
alias:          of:N*T*Cspidev
depends:        
intree:         Y
vermagic:       4.9.201-tegra SMP preempt mod_unload modversions aarch64
parm:           bufsiz:data bytes in biggest supported SPI message (uint)
sudo apt-get update
sudo apt-get install -y python-dev python-pip
sudo pip install spidev mfrc522

测试代码

import spidev
import mfrc522

spi = spidev.SpiDev()
spi.open(0, 0)  # 打开 SPI 设备
reader = mfrc522.MFRC522(spi=spi)

while True:
    # 检测是否有卡片
    (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL)

    if status == reader.MI_OK:
        # 获取卡片 UID
        (status, uid) = reader.MFRC522_Anticoll()

        if status == reader.MI_OK:
            print("Card UID: ", uid)

我的解决方法

本瞎子菜鸡重要发现了华点
##如果你运行 lsmod | grep spi 命令时没有输出,说明当前系统没有加载任何与 SPI 总线相关的内核模块。

要使用 SPI 总线设备,需要确保已正确配置内核并加载了相关的内核模块。可以尝试以下步骤:

确认内核配置是否正确:检查内核配置文件 /boot/config-$(uname -r) 是否启用了 SPI 相关选项。你可以使用以下命令来查看:

zcat /proc/config.gz | grep SPI

如果该命令没有输出或输出中没有包含 CONFIG_SPI 相关的选项,则需要重新编译内核并确保启用了相应选项。

加载 SPI 相关内核模块:可以使用 modprobe 命令来加载 SPI 相关的内核模块。例如,可以使用以下命令来加载 spidev 模块:

sudo modprobe spidev

如果该命令执行成功,运行 lsmod | grep spi 命令应该可以看到输出。

如果以上步骤仍然无法解决问题,可以尝试重新安装相关的软件包或编译安装 SPI 驱动程序模块。
我的问题1就解决了 运行 lsmod | grep spi 命令可以看到输出

接着问题2 运行代码例程代码没反应

小声逼逼 可能是MFRC522 的空白卡有问题 因为我把芯片剪下来改到一个冰墩墩上了
已经重买了 3天后到

为了在Jetson Nano 2GB上测试MFRC522与SPI总线的通信,需要先确保安装了SPI相关的驱动程序和库。

安装SPI驱动程序:可以按照前面提到的步骤,手动安装SPI驱动程序,以便在/dev目录下创建SPI设备节点。如果已经安装了SPI驱动程序,则可以跳过此步骤。

安装Python库:可以使用Python的spidev库进行SPI通信。在Jetson Nano 2GB上,可以使用以下命令安装spidev库:

sudo apt-get update
sudo apt-get install python3-spidev

安装MFRC522库:可以使用MFRC522-Python库进行MFRC522与SPI通信的测试。在Jetson Nano 2GB上,可以使用以下命令安装MFRC522-Python库:

sudo pip3 install mfrc522

运行示例代码:可以使用以下示例代码进行MFRC522与SPI通信的测试。在Jetson Nano 2GB上,可以使用以下命令下载示例代码:

git clone https://github.com/mxgxw/MFRC522-python.git

然后可以使用以下命令运行示例代码:

cd MFRC522-python
sudo python3 Read.py

该示例代码会尝试从MFRC522模块读取标签的UID,并显示在终端上。

在运行示例代码时,需要确保正确连接MFRC522模块,并将其连接到正确的SPI总线上。如果示例代码无法读取MFRC522模块的UID,则可能需要调整SPI的参数配置。可以参考MFRC522模块的数据手册或其他文档,以了解正确的连接方式和SPI参数配置。同时,还需要确保正确加载了SPI相关的内核模块,并且在访问SPI设备节点时具有足够的权限。
目前检测出现了问题 嘤嘤嘤

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reyseus2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值