“DFSDM device tree configuration”的版本间的差异

来自百问网嵌入式Linux wiki
第10行: 第10行:
  
 
== DT bindings documentation ==
 
== DT bindings documentation ==
The DFSDM maybe used as various functions: ADC and DMIC (for audio).
+
DFSDM可以用作各种功能:ADC和DMIC(用于音频)。
  
Each one is represented by a separate '''compatible string''', documented here:
+
每一个都由单独的'''兼容字符串'''表示,在此处记录:
* ''STM32 DFSDM ADC device tree bindings''<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt}}, STM32 DFSDM ADC device tree bindings</ref>
+
* ''STM32 DFSDM ADC设备树绑定''<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt}}, STM32 DFSDM ADC device tree bindings</ref>
* ''Audio DFSDM device tree bindings''<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/sound/st,stm32-adfsdm.txt}}, STM32 audio DFSDM device tree bindings</ref>
+
* ''音频DFSDM设备树绑定''<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/sound/st,stm32-adfsdm.txt}}, STM32 audio DFSDM device tree bindings</ref>
  
The external analog frontend (e.g. sigma-delta modulator) is documented here:
+
外部模拟前端(例如,Sigma-Delta调制器)记录如下:
* ''Device-Tree bindings for sigma delta modulator''<ref name="sd-modulator">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/iio/adc/sigma-delta-modulator.txt}}, Generic Device-Tree bindings for sigma delta modulator</ref>
+
* ''用于Sigma增量调制器的设备树绑定''<ref name="sd-modulator">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/iio/adc/sigma-delta-modulator.txt}}, Generic Device-Tree bindings for sigma delta modulator</ref>
  
 
== DT configuration ==
 
== DT configuration ==

2020年11月9日 (一) 16:12的版本

Article purpose

本文的目的是说明在将外围设备分配给Linux® OS时如何配置 DFSDM internal peripheral尤其是:

  • 如何配置DFSDM外设以启用过滤器和关联的通道
  • 如何配置电路板,例如 串行接口输入/输出引脚

使用 device tree mechanism执行配置。

DFSDM Linux driver 使用它在IIOALSA框架中注册相关信息。

如果外围设备已分配给另一个执行上下文,请参阅 How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。

DT bindings documentation

DFSDM可以用作各种功能:ADC和DMIC(用于音频)。

每一个都由单独的兼容字符串表示,在此处记录:

  • STM32 DFSDM ADC设备树绑定[1]
  • 音频DFSDM设备树绑定[2]

外部模拟前端(例如,Sigma-Delta调制器)记录如下:

  • 用于Sigma增量调制器的设备树绑定[3]

DT configuration

This hardware description is a combination of STM32 microprocessor and board device tree files. See Device tree for more explanations on device tree file split.

The STM32CubeMX can be used to generate the board device tree. Refer to How to configure the DT using STM32CubeMX for more details.

DT configuration (STM32 level)

DFSDM nodes are declared in stm32mp157c.dtsi[4].

  • DT root node ('dfsdm') describes the ADC hardware block parameters such as registers area, clocks.
  • DT child nodes ('dfsdm0', 'dfsdm1', ...) describe each filter independently: compatible string, interrupts, DMAs.
dfsdm: dfsdm@4400d000 {
	compatible = "st,stm32mp1-dfsdm";
	...                                                                            /* common resources in 'dfsdm' root node. */
	dfsdm0: filter@0 {
		compatible = "st,stm32-dfsdm-adc";                                     /* can either be st,stm32-dfsdm-(adc or dmic) */
		...                                                                    /* private resources in 'dfsdm0' child node. */
	}
	dfsdm1: filter@1 {
		...
	}
Warning.png This device tree part is related to STM32 microprocessors. It should be kept as is, without being modified by the end-user.

DT configuration (board level)

Follow the sequences described in the below chapters to configure and enable the DFSDM on your board.

Common resources for all DFSDM filters

Configure the 'dfsdm' DT root node:

  • Enable the DT root node for the DFSDM, by setting status = "okay".
  • Configure the pins in use via pinctrl, by setting pinctrl-0, pinctrl-1 and pinctrl-names.
  • Configure the SPI clock output frequency, by setting spi-max-frequency (optional: only for SPI master mode).
  • Configure the audio clock to be used, by setting clocks and clock-names (optional: to use more accurate clock for audio).

<securetransclude src="ProtectedTemplate:ReviewsComments" params="-- Gerald Baeza (talk) 17:03, 19 December 2019 (CET)<br />About the audio clock, maybe you could insert here two lines showing what the device tree looks like when we add the audio clock"></securetransclude>{{#set:Has reviews comments=true}}

Private resources for each DFSDM filter

Configure the filter(s) DT child node(s):

  • Enable the DT child node(s) for the DFSDM filter(s) in use, by setting status = "okay".
  • Override the compatible string by setting "st,stm32-dfsdm-dmic" (optional: only for audio digital microphone).
  • Enable the channel(s), by setting st,adc-channels = <0 1 2...>.
  • Configure the channel(s) by setting st,adc-channel-names, st,adc-channel-types (e.g. SPI or manchester) and st,adc-channel-clk-src (e.g. external or internal).
  • Configure the filter order, by setting st,filter-order.

Additional configuration for DFSDM ADC

The DFSDM ADC device has an external analog front-end, the sigma delta modulator.

Configure the external sigma delta modulator for each channel (optional, not needed for audio digital microphone):

  • Add your_sd_modulator DT node in the board dts file (see the generic sd-modulator[3] example here after).
  • Add io-channels = <&your_sd_modulator> to the DFSDM filter child node in order to assign it to the filter channel(s).

Additional configuration for DFSDM audio

Additional child nodes must be added for audio soundcard configuration.

DT configuration examples

The example below shows how to configure the DFSDM ADC channel 1, assigned to DFSDM filter 0:

  • Declare pins used in pinctrl DT node (see Pinctrl device tree configuration):
    • Configure PB13 as DFSDM CLKOUT alternate function (AF3 by default, ANALOG for low-power mode).
    • Configure PC3 as DFSDM DATA1 alternate function (AF3 by default, ANALOG for low-power mode).
dfsdm_clkout_pins_a: dfsdm-clkout-pins-0 {
	pins {
		pinmux = <STM32_PINMUX('B', 13, AF3)>;     /* DFSDM_CKOUT */
		bias-disable;
		drive-push-pull;
		slew-rate = <1>;
	};
};

dfsdm_clkout_sleep_pins_a: dfsdm-clkout-sleep-pins-0 {
	pins {
		pinmux = <STM32_PINMUX('B', 13, ANALOG)>;  /* DFSDM_CKOUT */
	};
};
dfsdm_data1_pins_a: dfsdm-data1-pins-0 {
	pins {
		pinmux = <STM32_PINMUX('C', 3, AF3)>;      /* DFSDM_DATA1 */
	};
};

dfsdm_data1_sleep_pins_a: dfsdm-data1-sleep-pins-0 {
	pins {
		pinmux = <STM32_PINMUX('C', 3, ANALOG)>;   /* DFSDM_DATA1 */
	};
};
  • Add sd-modulator[3] in the board dts file.
sd_adc1: adc-1 {
	compatible = "sd-modulator";
	#io-channel-cells = <0>;
};
  • Configure and enable DFSDM, configure channel 1 to use SPI (rising edge), associate it to filter0.
&dfsdm {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&dfsdm_clkout_pins_a &dfsdm_data1_pins_a>;                        /* default pins */
	pinctrl-1 = <&dfsdm_clkout_sleep_pins_a &dfsdm_data1_sleep_pins_a>;            /* sleep pins for low-power mode */
	spi-max-frequency = <2048000>;                                                 /* desired maximum clock rate */
	status = "okay";
	dfsdm0: filter@0 {
		st,adc-channels = <1>;                                                 /* Assign channel 1 to this filter */
		st,adc-channel-names = "in1";                                          /* Give it a name */
		st,adc-channel-types = "SPI_R";                                        /* SPI data on rising edge */
		st,adc-channel-clk-src = "CLKOUT_F";                                   /* internal clock source used for conversion */
		io-channels = <&sd_adc1>;                                              /* phandle to the external sd-modulator */
		st,filter-order = <1>;
		status = "okay";
	};
};

How to configure the DT using STM32CubeMX

The STM32CubeMX tool can be used to configure the STM32MPU device and get the corresponding platform configuration device tree files.
The STM32CubeMX may not support all the properties described in the above DT bindings documentation paragraph. If so, the tool inserts user sections in the generated device tree. These sections can then be edited to add some properties and they are preserved from one generation to another. Refer to STM32CubeMX user manual for further information.

References

Please refer to the following links for additional information:

<securetransclude src="ProtectedTemplate:PublicationRequestId" params="9881 | 2018-12-05 | AlainF"></securetransclude> <securetransclude src="ProtectedTemplate:ArticleBasedOnModel" params="Peripheral or framework device tree configuration model"></securetransclude>