IIO子系统:iio_chan_spec结构体

IIO 驱动里最重要的结构之一是:

struct iio_chan_spec

它用来描述一个传感器通道。

BMI088 陀螺仪有 3 个角速度通道:

x 轴角速度
y 轴角速度
z 轴角速度

所以可以定义如下 channel 数组:

static const struct iio_chan_spec bmi088_gyro_channels[] = {
    {
        .type = IIO_ANGL_VEL,
        .modified = 1,
        .channel2 = IIO_MOD_X,
        .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
        .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
    },
    {
        .type = IIO_ANGL_VEL,
        .modified = 1,
        .channel2 = IIO_MOD_Y,
        .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
        .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
    },
    {
        .type = IIO_ANGL_VEL,
        .modified = 1,
        .channel2 = IIO_MOD_Z,
        .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
        .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
    },
};

下面逐项解释。


1. .type = IIO_ANGL_VEL

.type = IIO_ANGL_VEL,

表示这个通道类型是角速度。

IIO 中角速度对应 sysfs 名称里的:

anglvel

所以最终会生成类似:

in_anglvel_x_raw

如果是加速度计,则通常使用:

.type = IIO_ACCEL,

对应生成:

in_accel_x_raw

2. .modified = 1

.modified = 1,

表示这个通道带有方向修饰。

因为角速度不是一个单独的值,而是:

x 轴角速度
y 轴角速度
z 轴角速度

所以需要使用 modifier 区分方向。


3. .channel2 = IIO_MOD_X

.channel2 = IIO_MOD_X,

表示当前通道是 x 轴。

因此:

.type = IIO_ANGL_VEL
.modified = 1
.channel2 = IIO_MOD_X

组合起来就会生成:

in_anglvel_x_raw

同理:

.channel2 = IIO_MOD_Y

生成:

in_anglvel_y_raw
.channel2 = IIO_MOD_Z

生成:

in_anglvel_z_raw

Linux IIO 文档中也说明,channel 可以使用 .modified.channel2 来表示方向、光谱响应等物理特征;channel 属性可以通过 info_mask_separateinfo_mask_shared_by_type 等方式描述。


4. .info_mask_separate

.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),

表示每个通道都有自己独立的 raw 属性。

因为 x、y、z 三个轴的原始值不同,所以 raw 必须分别暴露。

最终会生成:

in_anglvel_x_raw
in_anglvel_y_raw
in_anglvel_z_raw

5. .info_mask_shared_by_type

.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),

表示同一类通道共享一个 scale。

x、y、z 都是角速度通道,而且当前量程相同,所以它们的转换比例相同。因此没有必要生成:

in_anglvel_x_scale
in_anglvel_y_scale
in_anglvel_z_scale

而是生成一个共享的:

in_anglvel_scale

这就是 shared_by_type 的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值