主题中讨论的其他器件: AM3357
员工、
我对 Linux 开发环境非常陌生、有一些问题希望您能帮我解决。
我的 Linux env 使用 TI AM3357和 Linux 内核4.14.96 (Linaro)、并使用 ADC081C021进行电池监控。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelConfig 具有以下功能:
CONFIG_IIO=y
CONFIG_IIO_buffer=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_Trigged_buffer=y
未设置# CONFIG_IIO_CONFIGFS
CONFIG_IIO_TRIGG=y
#模数转换器
CONFIG_TI_ADC081C=y
////////////////////////////////////////////////////////////////////////////////////////////
设备树有的
- TPS:TPS@2D{
- reg =<0x2D>;
+ tampbatt:adc081c@54{
+ compatible ="ti、adc081c";
+ reg =<0x54>;
};
};
-tscadc{ +&GPIO2{ + pinctrl-names ="default"; + pinctrl-0 =<&GPIO2_PINs>; 状态="确定"; - TSC{ - TI、电线=<4>; - TI、x 板电阻=<200>; - ti、坐标读数=<5>; - TI、wire-config =<0x00 0x11 0x22 0x33>; - TI、充电延迟=<0x400>; -}; - ADC{ - TI、ADC-CHANNELS =<4 5 6 7>; -}; };
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
我看到 /sys/bus/iio/devices 下列出的 IIO:device0
当我更改为 IIO:device0时、它更改为 /sys/devices/platform/ocp/44e0b000.i2c/i2c-0/0-0054/iio:device0
问: 这条路径意味着什么? 我想0-0054来自 tampbatt:devicetree 中的 adc081c@54、但不知道其他器件是什么
我想下面的 ADC 是注释掉的(我是不是正确的?) 器件。 因此、它默认为一个通道、因为我仅看到 IN_VOLTGE_RAW。
- ADC{ - TI、ADC 通道=<4 5 6 7>; -};
问:如果我需要更多通道,我只需将-更改为+即可启用通道4、5、6、7。 否则、它默认为仅一个通道、对吧?
当我执行 ls -al 命令时、我看到以下内容:
/sys/devices/platform/ocp/44e0b000.i2c/i2c-0/0-0054/iio:device0 # ls
缓冲器 IN_VOLTGE_SCALE_ELEMENTS 扫描元素
CURRENT_TIMESTAMP_CLOCK 名称子系统
DEV_node 触发
IN_VOLTGE_RAW 功率 uevent
问:为什么我在 IN_VOLTAGE_RAW 中看到 IN_VOLTAGE0_RAW。 电压不会附加0 (零)。 这是正常的吗?
当我执行# cat in_volte_raw 时、返回0。
我的应用代码、用于读取 DAC、如下所示。 结果为零、因为我尚未安装电池。
int output_fd; char adcName[]="/sys/bus/iio/devices/iio:device0/in_volte_ray"; output_fd = open (adcName、O_RDWR); if (output_fd < 0){ log (LL_INFO、"打开 ADC 失败\n"); int * exit; pthread_exit (exit); } while (1) { /*读取 ADC 电压*/ int readResult =读取(output_fd、有效载荷、BUF_size); log( LL_info,"ADC 输出为%s readResult =%d \n",PAYLOAD, readResult); usleep(40000); } Close (output_fd);
问:上面的代码是否是用户空间代码读取 DAC 转换值的正确方式? 如果我想使用 高/低和警报限值对 ADC081C021进行编程、我该怎么做。 我可以参考一个示例吗?
但请勿查看如何 在用户空间代码(我的 C 代码)中使用高/低和警报限制对 ADC081C021进行编程。
非常感谢您的任何帮助。
-Tom