问题标签 [iio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 为什么在交叉编译时找不到包含的 C 头文件,但在没有 cc 时却很好?
我正在尝试从 Linux 内核存储库中为 x64 Lubuntu 机器上的 Raspberry Pi 交叉编译 IIO 工具,但编译整个 Raspbian 内核工作正常。首先我在 x64 机器上对其进行了测试:
~/linux/tools$ make iio
效果很好。下一步添加一些交叉编译器参数:
~/linux/tools$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- iio
现在他再也找不到 iio_event_monitor.c 中包含的文件了。我在这里缺少什么?
go - 为什么我的 Go 应用程序没有像 busybox `cat` 命令那样从 sysfs 中读取数据?
继续 1.12 Linux 4.19.93 armv6l
。硬件是运行 yocto linux 映像的 raspberypi zero w (BCM2835)。
我有一个由 srf04 linux 驱动程序驱动的 gpio 驱动的 SRF04 接近传感器。
它在 sysfs 和 busybox shell 上工作得很好。
我以前在 IIO 设备上使用过 Go,这些设备在这个硬件平台上支持高采样率的触发器和缓冲输出。然而,对于这个应用程序,srf04 驱动程序没有实现这些 IIO 功能。德拉特。我真的不想自己(此时)为驱动程序添加缓冲区/触发器支持,因为我不需要“高”采样率。每秒几次 ping 就足以满足我的目的。我想我会计算平均值和标准。开发。用于数据点的滚动窗口并从噪声中“区分”信号。
因此,我非常乐意使用 Go 从已发布的 sysfs 文件中读取字节。
这让我想到了这篇文章。当我打开文件进行读取并尝试 Read() 任意数量的字节时,我总是会收到一般-EIO
错误。
这对我来说似乎是奇怪的行为。所以我决定搞乱使用io.ReadFull
. 这产生了不可靠的结果。
我最终将它添加到一个循环中,因为我发现从“一次性”读取到多个读取调用的行为发生了变化。如果它得到一个 EOF,我让它退出,否则我会反复尝试读取。
结果直接疯狂不可靠,似乎返回随机结果。有时我得到 -5,有时我从设备读取 2 - 5 个字节。有时我在 EOF 之前得到没有 eof 文件的字节。字节似乎代表数字的字符数据(每个符文是 [0-9] 之间的符文) - 这是我所期望的。
旁白:我希望这与文件轮询和阻塞 IO 实现有关,但我无法真正说出。
作为临时解决方法,我决定尝试使用 os.exec,现在我得到了我期望看到的结果。
但是伊克。os.exec
. 呸。
linux - Linux IIO 驱动程序 - 向芯片写入/读取完整配置
如果我使用 IIO 驱动程序,向芯片写入/读取完整配置的最佳选择是什么? 对于“完整配置”,我的意思是一个文件(例如chip_config.cfg),其中以某种特定格式表示该芯片的所有寄存器的值。
我现在知道哪些选项:
- 设备属性 - 可以直接从 IIO 框架创建,但它只能用于一个值。也只能读取 4096 字节的数据。
- 从内核打开文件 -
kernel_read_file()
和类似功能,但严格禁止。 - 固件框架——只写。
- debugfs - 我们不想使用它。
谢谢你的每一个建议。
linux - 是否可以创建匹配 I2C 地址的 udev 规则?
我有许多相同设备(基于 I2C 的 IIO 传感器)的实例,在几个 I2C 多路复用器后面具有相同的 I2C 地址。我想iio:deviceX
根据确定性路径将 符号链接到更有意义的名称(例如,设备 = 0x29,在多路复用器 = 0x70 上,在总线 1 上)
不幸的是,我似乎无法udevadm info --attribute-walk --name=/dev/iio\:device0
根据这些属性匹配 I2C 地址:
如何确定性地匹配这些传感器?我什至不确定我是否可以假设 I2C 多路复用器将始终以相同的顺序初始化......
c++ - MSP432 Launchpad 板对两个不同的器件使用相同的引脚
我目前正在做一个使用 NFC 技术与手机通信的智能计量设备。该设备由 3 个部分组成:
- 一个 MSP432P401R 启动板。
- 连接到 J1 和 J2 引脚阵列的 TRF7970(标签传感器)设备
- 我仍然必须购买温度或湿度或两者传感器。
我想从德州仪器购买一个使用 I2C/SPI/UART 接口的传感器,这样也许我可以找到一些 API,或者至少让它更容易编程,但是 TRF7970 设备使用所有这些接口。我的问题是我是否可以将这些设备连接到连接 TRF7970 的相同 I2C/SPI/UART 接口。我知道 I2C 或 SPI 接口可以寻址不同的从机,但我想在购买任何传感器之前确定一下。
此外,我还有一些用于与 TRF7970 通信的 API。我需要更改这些 API 的代码吗?
gnu - PlutoSDR AttributeError:Ubuntu 20.04 上的模块“iio”
尝试在 GNU Radio Companion 中运行流程图时,出现以下错误:
AttributeError: module 'iio' has no attribute 'pluto_source'
我正在 Windows 上为 Ubuntu 20.04 运行一个新的 VMWare 环境。
我首先为 Pluto 安装了驱动程序和 libiio 库,并且能够通过以下方式进行 SSH:ssh root@192.168.21
但是,在终端中,当我运行时,iio_info -s
我得到以下与我有关的输出。
运行iio_info -u ip:192.168.2.1
我得到一些可能与上述有关的错误。
我不确定错误是什么,所以我用最新的固件重新刷新了 PlutoSDR 并再次尝试。还是一样的错误。
有什么想法吗?
python - GNU Radio Companion:没有名为 iio 的模块;import iio 显示正常
我一直在努力在我的 Windows 10 托管 VMWare Ubuntu 20.04 机器上安装 GRC。我在这里跟踪了我的努力:
Ubuntu 20.04 Could NOT find MPIR during gr-iio cmake。经过一番麻烦,我能够安装 GRC 3.8,其中cmake
包含没有错误的依赖项和文件。
在我的.bashrc
文件中,我将路径设置为以下内容:
使用刷新后:. ~/.bashrc
我从终端启动 GRC,我显示 QT 缺少块。我注意到我的块路径是:
但是,当我从应用程序启动器启动 GRC 时,我能够看到我的 QT 块。块路径现在显示:
但是,这只是一个谜。另一个是未能以import iio
以太方式启动。在 GRC 中,我收到以下错误:
ModuleNotFoundError: No module named 'iio'
但是,当我进入终端并输入时python3
,import iio
我得到一个返回字符。
这里发生了什么?
linux - 使用 libiio 触发器将 IRQ 传播到用户空间
我已经浏览了大部分文献,它的核心部分已经被覆盖、理解和吸收了。
但是我的问题基本上是:当内核空间发生中断并且我的守护程序存在于用户空间时,我如何才能收到警报,例如通过回调函数。
IRQ Occuring --------> 中断上半部分(将时间戳放入缓冲区) ---------> 中断处理程序的下半部分(读取数据并在缓冲区中添加时间戳) ------------> ???? 将在 HD 上写入日志的用户空间守护进程(某些描述的异步回调)。
我已经编写并工作了守护程序部分的所有内容,我似乎明白通过 libiio 您可以将触发器分配给特定的通道或属性,但这就是我卡住的地方。
libiio 上的文献(最值得注意的是它的 wiki)有一章是关于触发器的,它有 4 行长……至少可以说不是很有帮助。
iioinfo 列出了 LSM6DSLTR 中存在的设备(18 个设备,包括两个触发器),我无法将触发器分配给尚未分配给它们的任何设备(没有这样的文件或目录),我收集这些设备是指没有该特定设备的 sysfs 中的 trigger 目录。
我还收集到 sysfs 目录当然是内核设备树的从属,并且设备树的该部分的创建是在加载驱动程序时创建的。
所以必须有一种方法来改变 sysfs 文件系统的那部分,方法是要求内核驱动程序在上下文中提供一个设备来实现触发器目录,这样我们就可以为它分配一个触发器
第二部分将是从触发到实际 IRQ(在我的情况下为 42 - 如 /proc/interrupts 中列出的)的从属,并在达到加速度或振动阈值时在用户空间守护程序中发出警报......
好吧,这就是我想要实现的目标。最后一部分是在芯片上写入一些寄存器,以配置任何给定集成设备的 IRQ 发生方式和时间。
linux - 缓冲区中值的跳跃索引
我目前正在使用加速度计及其 iio 缓冲区测试一些东西,有些东西让我感到困惑。传感器确实有四种不同的扫描元素:x
、y
和z
a timestamp
。这些值的索引是:
x = 0
, y = 1
,z = 2
和time = 3
. 到目前为止,一切都很好。如果我启用所有可用的扫描元素,则条目的顺序将根据描述设置。
一切启用:
但是一旦我有间隙,例如,如果我禁用扫描元素y
,z
值会跳转到索引 1,我的缓冲区看起来像这样:
x
,z
和time
:
z
和time
:
只有x
和z
:
我找不到有关此的更多信息,但我有点困惑和惊讶,一旦激活时间戳并且存在索引间隙,扫描元素不尊重它们的给定索引。这是正常行为还是当前传感器驱动程序混淆了一些东西?
linux - Linux 内核关闭可能导致驱动程序使 I2C 总线阻塞
我正在为 LSM6DS[ML] IMU使用ST 自己的驱动程序。
如果该驱动程序在内核关闭时正在访问 IMU 寄存器,则 I2C 总线可能会被卡住,SCL 被拉低:
这意味着最终的 I2C 写入(对 PMU 芯片,挂钩pm_power_off
)不可能总是发生。因此,电源有时会保持打开状态。
我试图了解我应该在哪里解决这个问题。
- ST 的 lsm6dsm 驱动程序是否存在某种故障?
- 内核的 I2C 处理是否有问题?(我想不出它让 I2C 总线阻塞的原因。)
- I2C 总线在关机时卡住并因此无法调用是否
regmap_write()
有效pm_power_off
?