第四期 第三十五讲 Linux Regmap API实验 第三十六讲 Linux IIO驱动实验 第三十七讲 Linux ADC驱动实验

第三十五讲 Linux Regmap API实验

一、Regmap API简介

1.1、传统的linux IIC,SPI驱动编写

对于ICM20608而言,既支持IIC,也支持SPI。本质都是读写内部寄存器

xxx_read,xxx_write。

1.2、Regmap API引入

重点是和寄存器打交道。

目的:

1、regmap模型提供统一的器件寄存器访问方法

2、降低了内核冗余开销。提高代码复用性

二、regmap驱动框架

2.1、regmap结构体

要使用regmap,要先给驱动分配一个regmap实例

2.2、regmap_config结构体

regmap_config用来配置regmap

2.3、读写掩码表示

read_flag_mask 、write_flag_mask

三、regmap操作函数

3.1、regmap申请与初始化

regmap_init_i2c,regmap_init_spi等,本质都是regmap_init

regmap_exit

3.2、regmap设备访问API函数

regmap_read,regmap_write,regmap_update_bits,regmap_bulk_read,regmap_bulk_writ

3.3、regmap_config掩码设置

第三十六讲 Linux IIO驱动实验

一、IIO子系统简介

以前驱动编写方法所带来的缺点

以前的写法,就是驱动人员自己定义传感器数据的上报格式,自己定义的格式,那么就只有自己知道,自己编写应用。缺点就是不灵活,封闭。没有一个标准,不统一

理想的驱动应该是:

1、黑匣子,应用直接能读取到,而且人性化。

1.1、为什么使用IIO子系统

为了规范化日益庞大的ADC/DAC类传感器

使用IIO子系统系统以后,会在跟文件系统得到一大堆文件:

我们得到in_accel_z_raw是ICM20608加速度Z轴原始值。对应的g是?

位数始终是16位ADC,测量范围不同,每一位代表的实际g值就不同。

我需要知道加速度计实际值得时候,只需要将in_accel_x_raw*in_accel_scale。

1.2、iio_dev结构体

1、申请

使用iio_dev来表示一个具体的iio设备。devm_iio_device_alloc或iio_device_alloc申请iio_dev

2、注册iio_dev

iio_device_register

1、通道:

表示传感器的每一个测量通道,

1.3、iio_info

核心

icm20608_read_raw

icm20608_write_raw

icm20608_write_raw_get_fmt

static int bma180_read_raw(struct iio_dev *indio_dev,

struct iio_chan_spec const *chan, int *val, int *val2,

long mask)

1.4、iio_chan_spec

IIO设备通道重要的成员变量

1、type

2、modified和channel2

3、address

4、scan_type

5、info_mask_separate

6、info_mask_shared_by_type

二、IIO驱动程序编写

三、应用编写

这些文件读到都是字符串

“0.000488281”,需要将字符串转换为实际的数值

可是使用atof将浮点字符串转换为实际的浮点数据,atoi就是完成整数的转换

第三十七讲 Linux ADC驱动实验

一、ADC驱动框架简介

使用GPIO1_IO01引脚,对应ADC1_INI1

二、驱动使能

三、测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值