“DAC Linux driver”的版本间的差异

来自百问网嵌入式Linux wiki
第23行: 第23行:
  
 
== How to use ==
 
== How to use ==
In "IIO direct mode", conversions can be done directly via sysfs. See [[How to use the IIO user space interface#How to do a simple DAC conversion using the sysfs interface|How to do a simple DAC conversion using the sysfs interface]].
+
在“ IIO直接模式”下,可以直接通过sysfs完成转换。 请参阅 [[How to use the IIO user space interface#How to do a simple DAC conversion using the sysfs interface|How to do a simple DAC conversion using the sysfs interface]]
  
 
== How to trace and debug ==
 
== How to trace and debug ==

2020年11月9日 (一) 14:57的版本

Article purpose

本文介绍了用于DAC driver for the DAC[1] 内部外围设备的Linux®驱动程序:

  • 驱动程序支持哪些DAC功能
  • 如何配置,使用和调试驱动程序
  • 驱动程序的结构是什么,以及在哪里可以找到源代码

Short Description

DAC Linux® 驱动程序(内核空间)基于 IIO 框架。 它实现了IIO直接模式,以在每个通道上独立执行单个转换。

Configuration

Kernel configuration

使用Linux Menuconfig工具在内核配置中激活DAC [1] Linux® 驱动程序: Menuconfig or how to configure kernel (启用CONFIG_STM32_DAC).

Device Drivers  --->
   <*> Industrial I/O support  --->
      Digital to analog converters  --->
         <*> STMicroelectronics STM32 DAC

Device tree

配置DAC Linux内核驱动程序时,请参考DAC device tree configuration 文章。

How to use

在“ IIO直接模式”下,可以直接通过sysfs完成转换。 请参阅 How to do a simple DAC conversion using the sysfs interface

How to trace and debug

Refer to How to trace with dynamic debug for how to enable debug logs in the driver and in the Framework.

Refer to How to debug with debugfs for how to access the DAC registers.

The DAC has system wide dependencies towards other key resources:

  • runtime power management can be disabled, for example it may be forced on via power/control sysfs entry:
Board $> cd /sys/devices/platform/soc/40017000.dac/40017000.dac\:dac@1/
Board $> cat power/autosuspend_delay_ms
2000
Board $> cat power/control
auto                                     # kernel is allowed to automatically suspend the ADC device after autosuspend_delay_ms
Board $> echo on > power/control         # force the kernel to resume the DAC device (e.g. keep clocks and regulators enabled)
Info.png It might be useful to disable runtime power management, in order to dump registers by any means or to check clock and regulator usage (see example below).
  • clock[2] usage can be verified by reading clk_summary:
Board $> cat /sys/kernel/debug/clk/clk_summary | grep dac
       dac12_k                        0        0        0       32000          0 0
                      dac12           1        2        0    98303955          0 0
  • regulator[3] tree and usage usage can be verified (e.g. use count, open count and regulator reference voltage) as follows:
Board $> cat /sys/kernel/debug/regulator/regulator_summary
 regulator                      use open bypass voltage current     min     max
-------------------------------------------------------------------------------
    v3v3                          4    5      0  3300mV     0mA  3300mV  3300mV
       vdda                       1    2      0  2900mV     0mA  2900mV  2900mV
          40017000.dac                                              0mV     0mV
          48003000.adc                                              0mV     0mV
  • pinctrl[4] usage can be verified by reading pinmux-pins:
Board $> cd /sys/kernel/debug/pinctrl/soc\:pin-controller@50002000/
Board $> cat pinmux-pins | grep dac
pin 4 (PA4): device 40017000.dac function analog group PA4
pin 5 (PA5): device 40017000.dac function analog group PA5   # check pins are assigned to DAC and configured as "analog"

Source code location

The DAC source code is composed of: