DFSDM device tree configuration

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2020年11月9日 (一) 16:35的版本 →‎DT configuration

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

该硬件描述是STM32微处理器和电路板设备树文件的组合。 有关设备树文件分割的更多说明,请参见 Device tree

STM32CubeMX可用于生成板卡设备树。 有关更多详细信息,请参考How to configure the DT using STM32CubeMX

DT configuration (STM32 level)

DFSDM节点在stm32mp157c.dtsi中声明[4].

  • DT根节点('dfsdm')描述ADC硬件模块参数,例如寄存器区域,时钟。
  • DT子节点('dfsdm0', 'dfsdm1', ...) 分别描述每个过滤器:兼容的字符串,中断,DMA。
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 该设备树部分与STM32微处理器有关。它应该保持原样,而不要由最终用户修改。

DT configuration (board level)

请按照以下章节中描述的顺序在板上配置和启用DFSDM。

Common resources for all DFSDM filters

配置'dfsdm'DT根节点

  • 通过设置status =“ okay”为DFSDM启用DT根节点。
  • 通过设置pinctrl-0pinctrl-1pinctrl-names,通过pinctrl配置使用中的引脚。
  • 通过设置spi-max-frequency(可选:仅用于SPI主模式),配置SPI时钟输出频率。
  • 通过设置clocksclock-names(可选:为音频使用更准确的时钟),配置要使用的音频时钟。


Private resources for each DFSDM filter

配置过滤器 DT子节点

  • 通过设置status =“ okay”,为正在使用的DFSDM过滤器启用DT子节点。
  • 通过设置“ st,stm32-dfsdm-dmic”(可选:仅适用于音频数字麦克风)覆盖compatible字符串。
  • 通过设置st,adc-channels = <0 1 2 ...>来启用通道。
  • 通过设置st,adc-channel-namesst,adc-channel-types(例如SPI或曼彻斯特)和st,adc-channel来配置通道 -clk-src(例如外部或内部)。
  • 通过设置st,filter-order配置过滤器顺序。

Additional configuration for DFSDM ADC

DFSDM ADC器件具有一个外部模拟前端“ sigma delta调制器”。

为每个通道配置外部sigma delta调制器(可选,音频数字麦克风不需要):

  • 在板载dts文件中添加your_sd_modulatorDT节点(请参见下面的通用sd-modulator[3] 示例)。
  • io-channels = <&your_sd_modulator> 添加到DFSDM过滤器子节点,以便将其分配给过滤器通道。

Additional configuration for DFSDM audio

必须为音频soundcard configuration添加其他子节点。

DT configuration examples

下面的示例显示如何配置分配给DFSDM过滤器0的DFSDM ADC通道1:

  • 声明pinctrl DT节点中使用的引脚 (请参见Pinctrl device tree configuration):
    • 将PB13配置为DFSDM CLKOUT备用功能(默认情况下为AF3,对于低功耗模式为ANALOG)。
    • 将PC3配置为DFSDM DATA1备用功能(默认情况下为AF3,对于低功耗模式为ANALOG)。
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 */
	};
};
  • 在板dts文件中添加sd-modulator [3]
sd_adc1: adc-1 {
	compatible = "sd-modulator";
	#io-channel-cells = <0>;
};
  • 配置并启用DFSDM,将channel 1配置为使用SPI(上升沿),并将其关联到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>