rk3288 ADC调式
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,sunychip-RK3288 开发板上的 AD 接口分为:高速 ADC 流接口 (High-speed ADC Stream Interface)、温度传感器 (Temperature Sensor
千家信息网最后更新 2025年02月05日rk3288 ADC调式
sunychip-RK3288 开发板上的 AD 接口分为:高速 ADC 流接口 (High-speed ADC Stream Interface)、温度传感器 (Temperature Sensor)、 逐次逼近ADC (Successive Approximation Register)。本文主要介绍 ADC 的基本配置方法。内核采用工业 I/O 子系统来控制 ADC, 该子系统主要为 AD 转换或者 DA 转换的传感器设计。其相关数据结构以及配置方法如下:
数据结构 ¶
- iio_channel 结构体
struct iio_channel { struct iio_dev *indio_dev;//工业 I/O设备 const struct iio_chan_spec *channel;//I/O通道 void *data;};
- iio_dev 结构体 该结构体主要用于描述 IO 口所属的设备,其具体定义如下:
struct iio_dev { int id; int modes; int currentmode; struct device dev; struct iio_event_interface *event_interface; struct iio_buffer *buffer; struct list_head buffer_list; int scan_bytes; struct mutex mlock; const unsigned long *available_scan_masks; unsigned masklength; const unsigned long *active_scan_mask; bool scan_timestamp; unsigned scan_index_timestamp; struct iio_trigger *trig; struct iio_poll_func *pollfunc; struct iio_chan_spec const *channels; int num_channels; struct list_head channel_attr_list; struct attribute_group chan_attr_group; const char *name; const struct iio_info *info; struct mutex info_exist_lock; const struct iio_buffer_setup_ops *setup_ops; struct cdev chrdev; #define IIO_MAX_GROUPS 6 const struct attribute_group *groups[IIO_MAX_GROUPS + 1]; int groupcounter; unsigned long flags; #if defined(CONFIG_DEBUG_FS) struct dentry *debugfs_dentry; unsigned cached_reg_addr; #endif};
- iio_chan_spec结构体
struct iio_chan_spec { enum iio_chan_type type; //描述通道类型 int channel; //通道号 int channel2; //通道号 unsigned long address; //通道地址 int scan_index; struct { char sign; u8 realbits; u8 storagebits; u8 shift; enum iio_endian endianness; } scan_type; long info_mask; long info_mask_separate; long info_mask_shared_by_type; long event_mask; const struct iio_chan_spec_ext_info *ext_info; const char *extend_name; const char *datasheet_name; unsigned modified:1; unsigned indexed:1; unsigned output:1; unsigned differential:1;};
配置步骤 ¶
配置DTS节点 ¶
ADC的 DTS 节点在 kernel/arch/arm/boot/dts/rk3288.dtsi 文件中定义,如下所示:
adc: adc@ff100000 { compatible = "rockchip,saradc"; reg = <0xff100000 0x100>; interrupts =; #io-channel-cells = <1>; io-channel-ranges;rockchip,adc-vref = <1800>; clock-frequency = <1000000>; clocks = <&clk_saradc>, <&clk_gates7 1>; clock-names = "saradc", "pclk_saradc"; status = "disabled"; };
用户只需在 firefly-rk3288.dts 文件中添加通道定义,并将其 status 改为 "okay" 即可:
&adc { status = "okay"; adc_test{ compatible = "rockchip,adc_test"; io-channels = <&adc 0>; };};
在驱动文件中匹配 DTS 节点 ¶
在驱动文件中定义 of_device_id 结构体数组:
static const struct of_device_id of_XXX_match[] = { { .compatible = "rockchip,adc_test" }, { /* Sentinel */ }};
将该结构体数组填充到要使用 ADC 的 platform_driver 中。
static struct platform_driver XXX_driver = { .probe = ..., .remove = ..., .driver = { .name = "..", .owner = THIS_MODULE, #ifdef CONFIG_OF .of_match_table = of_XXX_match, #endif }, };
获取 AD 通道 ¶
struct iio_channel *chan; //定义 IIO 通道结构体chan = iio_channel_get(&pdev->dev, NULL); //获取 IIO 通道结构体
注:iio_channel_get 通过 probe 函数传进来的参数 pdev 获取 IIO 通道结构体,probe 函数如下:
static int XXX_probe(struct platform_device *pdev);
读取 AD 采集到的原始数据 ¶
int val,ret;ret = iio_read_channel_raw(chan, &val);
调用 iio_read_channel_raw 函数读取 AD 采集的原始数据并存入 val 中。
计算采集到的电压 ¶
使用标准电压将 AD 转换的值转换为用户所需要的电压值。其计算公式如下:
Vref / (2^n-1) = Vresult / raw
注: Vref 为标准电压 n 为 AD 转换的位数 Vresult 为用户所需要的采集电压 raw 为 AD 采集的原始数据 例如,标准电压为 1.8V,AD 采集位数为 10 位,AD 采集到的原始数据为 568,则:
Vresult = (1800mv * 568) / 1023;
ADC 常用函数接口 ¶
struct iio_channel *iio_channel_get(struct device *dev, const char *consumer_channel);
- 功能:获取 iio 通道描述
- 参数:
- dev: 使用该通道的设备描述指针
- consumer_channel: 该设备所使用的 IIO 通道描述指针
void iio_channel_release(struct iio_channel *chan);
- 功能:释放 iio_channel_get 函数获取到的通道
- 参数:
- chan:要被释放的通道描述指针
int iio_read_channel_raw(struct iio_channel *chan, int *val);
- 功能:读取 chan 通道 AD 采集的原始数据
- 参数:
- chan:要读取的采集通道指针
- val:存放读取结果的指针
通道
结构
数据
电压
原始
函数
指针
参数
文件
设备
配置
功能
接口
标准
用户
节点
传感器
位数
子系统
工业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
工程建设审批管控软件开发平台
滨州都有哪些软件开发公司
机架式服务器维修项目报价
如何制作网络安全报
数据库搜索说对象名无效
dba需要管理服务器吗
南昌软件开发商
知识竞赛-网络安全达人
菜鸟学oeacle数据库
信息基础设施网络安全总结
鑫成网络技术有限公司
云服务器-%3e安全组
广东鹅鹅鹅互联网科技有限公司
武安软件开发系统
有主机还需要服务器吗
服务器管理入口
2018年网络安全周宣传语
武汉学习网络技术有限公司
西藏一站式网络技术服务信息中心
一次取多少条数据数据库会卡死
制作的数据库不可用怎么办
智慧城市三大网络技术
手机管理云服务器的软件
数据库课后习题题目及答案
怎么进入华为服务器
孝义网络安全科
运营软件开发商家价目表
软件开发电子印章
fm2015 03数据库
联想服务器管理网口地址