第三十五讲 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
二、驱动使能
三、测试