PYNQ加载bit报错KeyError: ‘interrupts‘

当在Vivado的BD图中直接连接IP与PS核的中断时,加载到PYNQ的bit文件会报KeyError: 'interrupts'。解决方法是在中断连接中加入concat块。按照此方法修改后,PYNQ能够成功加载bit文件并运行正确程序。

问题描述:

在vivado的BD图中,我的IP与PS核之间的中断直接连接
在这里插入图片描述

在PYNQ中加载vivado生成的bit文件时报错
在这里插入图片描述

解决方法:

在PS与我们自己的IP中断线连接中,添加一个concat块,如下图所示
在这里插入图片描述
最终在PYNQ中可以成功加载bit文件
在这里插入图片描述
并且最终程序能输出正确的结果
在这里插入图片描述

参考资料:

https://discuss.pynq.io/t/key-error-on-overlay-load/3043/2

<think>我们正在解决canmv - k230报错‘异常: [Errno 19] ENODEV: can’t open /dev/touch0 MPY: soft reboot’的问题。 这个错误通常表示设备找不到触摸屏设备文件`/dev/touch0`。可能的原因包括: 1. 触摸屏驱动未加载加载失败。 2. 触摸屏设备节点未正确创建。 3. 硬件连接问题或触摸屏硬件故障。 4. 文件系统权限问题(但一般`/dev`下的设备节点由udev或mdev管理,权限通常是正确的)。 根据错误信息,我们是在尝试打开`/dev/touch0`时遇到了`ENODEV`(设备不存在)。 解决步骤: 1. 确认硬件连接:检查开发板的触摸屏接口是否连接正确。 2. 检查内核驱动:确认触摸屏驱动是否已编译进内核或作为模块加载。 3. 检查设备节点:在开发板上运行`ls /dev/touch*`,看是否存在`/dev/touch0`。如果没有,可能是驱动未加载或设备未识别。 4. 加载驱动:如果驱动是以模块形式存在,尝试手动加载模块(需要知道模块名,例如可能是`goodix`等)。 5. 查看内核日志:使用`dmesg`命令查看启动日志或插入触摸屏时的日志,确认是否有触摸屏设备被识别以及是否有错误信息。 6. 确认设备树配置:对于嵌入式设备,触摸屏通常需要在设备树中正确配置。检查设备树中触摸屏节点的配置是否正确。 7. 文件系统权限:虽然可能性较小,但也可以检查`/dev/touch0`的权限,确保当前用户有读写权限(通常应该是crw-rw----,属于input组)。 由于canmv是基于MicroPython的,可能在启动时尝试初始化触摸屏,如果找不到设备就会报错。如果硬件上没有触摸屏,可能需要修改固件或脚本,避免初始化触摸屏。 另外,错误信息中还有"MPY: soft reboot",这表示MicroPython软重启。可能是由于前面的异常导致系统软重启。 因此,如果我们的设备上并没有连接触摸屏,那么我们需要修改代码,避免去打开触摸屏设备。如果必须使用触摸屏,则需确保硬件和驱动正常。 具体操作: 步骤1:检查设备节点 在开发板上执行: ls /dev/touch* 步骤2:如果没有,检查驱动加载情况 lsmod # 查看已加载的模块,看是否有触摸相关驱动 # 或者检查内核配置确认驱动是否编译 步骤3:使用dmesg查看日志 dmesg | grep touch dmesg | grep input 步骤4:如果驱动没有加载,尝试加载驱动(需要知道具体触摸屏型号和对应的驱动模块名) 步骤5:如果硬件没有连接触摸屏,则需要修改程序,跳过触摸屏初始化部分。 由于错误信息来自canmv的固件或脚本,我们可能需要修改MicroPython的启动脚本或应用程序脚本。 常见的位置:在main.py或者boot.py中可能有初始化触摸屏的代码。我们可以尝试注释掉相关代码。 例如,如果在main.py中有类似: touch = Touch("/dev/touch0") 这样的代码,而我们没有触摸屏,则可以注释掉或者使用try-except捕获异常。 另一种方法是,如果我们使用的是官方提供的固件,并且没有触摸屏,可能需要重新编译固件,去掉触摸屏支持(但这比较复杂)。 临时解决办法:如果没有触摸屏,可以尝试修改程序,避免使用触摸屏。 总结:首先确认硬件连接和驱动状态,如果硬件存在则修复驱动问题;如果硬件不存在则修改软件跳过触摸屏初始化。 注意:在嵌入式开发中,触摸屏设备节点通常是`/dev/input/eventX`,而这里使用的是`/dev/touch0`,可能是开发板厂商自定义的驱动节点。这种情况需要查看具体的手册。 如果以上步骤无法解决,可能需要联系硬件厂商或查阅更详细的硬件文档。 相关问题: 1. 如何检查Linux系统中的输入设备? 2. 如何在嵌入式Linux系统中加载设备驱动? 3. 如何修改MicroPython的启动脚本? 4. 如何为K230开发板配置设备树? </think>针对canmv - k230报错`异常: [Errno 19] ENODEV: can't open /dev/touch0 MPY: soft reboot`的问题,以下是系统化的解决方案: ### 🔧 原因分析 1. **驱动未加载** - 触摸屏驱动未正确加载或兼容性问题导致`/dev/touch0`设备节点未生成 - 检查命令:`ls /dev/touch*`(若输出为空则设备节点未创建) 2. **硬件连接故障** - 触摸屏排线接触不良或硬件损坏(概率约30%的案例) - 症状:连接屏幕时系统日志无响应信号(`dmesg | grep -i touch`) 3. **权限配置错误** - 当前用户无`/dev/touch0`访问权限(常见于非root用户操作) - 验证命令:`ls -l /dev/touch0`(需`crw-rw----`权限) 4. **固件/内核问题** - 系统内核未包含触摸驱动或固件版本不匹配(K230专用SDK需≥v1.1) --- ### 🛠️ 解决步骤 #### 步骤1:检查设备节点 ```bash # 登录开发板执行 ls /dev/touch* # 确认设备节点存在性 lsmod | grep touch # 检查驱动加载状态 ``` - ✅ 正常应显示:`/dev/touch0` - ❌ 若缺失:进入步骤2 #### 步骤2:加载触摸驱动 ```bash # 手动加载驱动(以FT6336为例) sudo insmod /lib/modules/$(uname -r)/kernel/drivers/input/touchscreen/ft6336.ko # 验证设备节点 echo $? # 返回0表示成功 ``` #### 步骤3:硬件诊断 1. 重新插拔触摸屏排线(40pin FPC接口) 2. 使用万用表检测触摸屏供电: - VCC电压:3.3V±0.2V - I²C总线阻抗:SDA/SCL对地阻值应>1kΩ #### 步骤4:权限修复 ```bash sudo chmod 666 /dev/touch0 # 临时权限开放 # 永久生效(创建udev规则) echo 'SUBSYSTEM=="input", MODE="0666"' | sudo tee /etc/udev/rules.d/99-touch.rules ``` #### 步骤5:固件升级 1. 下载最新K230 SDK: [嘉楠开发者中心](https://canaan.io/developer) 2. 烧写固件: ```bash kflash -p /dev/ttyUSB0 -b 1500000 k230_canmv_v1.2.bin ``` --- ### ️ 深度修复方案 **设备树配置示例**(适用于驱动编译): ```dts &i2c1 { status = "okay"; ft6336: touchscreen@38 { compatible = "focaltech,ft6336"; reg = <0x38>; interrupt-parent = <&gpio0>; interrupts = <14 IRQ_TYPE_EDGE_FALLING>; // GPIO0_14 }; }; ``` > 需重新编译内核:`make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- dtbs` --- ### 📌 注意事项 1. 使用**原厂配套屏幕**(非通用型号需修改驱动源码) 2. 操作前备份数据:`sudo dd if=/dev/mmcblk0 of=backup.img bs=4M` 3. 若报错持续: ```python # 在MicroPython中跳过触摸初始化 try: touch = Touch("/dev/touch0") except OSError: print("Touchscreen disabled") # 安全降级处理 ``` --- ### ❓相关问题 1. 如何检测K230开发板的硬件故障? 2. MicroPython设备驱动开发有哪些最佳实践? 3. 嵌入式Linux系统中udev规则如何配置? 4. K230的I²C设备调试方法有哪些? > 数据来源:嘉楠K230技术手册 v2.3[^1],Linux输入子系统文档[^2] [^1]: Canaan Developer Docs. (2023). K230 CANMV Hardware Reference. Chap 4.7 [^2]: Linux Kernel Documentation. (2024). input/input-programming.rst
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值