“DFSDM device tree configuration”的版本间的差异
(未显示同一用户的1个中间版本) | |||
第125行: | 第125行: | ||
==How to configure the DT using STM32CubeMX== | ==How to configure the DT using STM32CubeMX== | ||
− | + | [[STM32CubeMX]]工具可用于配置STM32MPU设备并获取相应的 [[Device_tree#STM32|platform configuration device tree]]文件。<br /> | |
− | + | STM32CubeMX可能不支持以上[[#DT bindings documentation|DT bindings documentation]] 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入'''用户部分'''。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见[[STM32CubeMX]] 用户手册。 | |
==References== | ==References== | ||
− | + | 请参考以下链接以获取更多信息: | |
<references /> | <references /> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
2020年11月9日 (一) 16:37的最新版本
目录
Article purpose
本文的目的是说明在将外围设备分配给Linux® OS时如何配置 DFSDM internal peripheral,尤其是:
- 如何配置DFSDM外设以启用过滤器和关联的通道
- 如何配置电路板,例如 串行接口输入/输出引脚
使用 device tree mechanism执行配置。
DFSDM Linux driver 使用它在IIO 和ALSA框架中注册相关信息。
如果外围设备已分配给另一个执行上下文,请参阅 How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。
DT bindings documentation
DFSDM可以用作各种功能:ADC和DMIC(用于音频)。
每一个都由单独的兼容字符串表示,在此处记录:
外部模拟前端(例如,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 { ... }
该设备树部分与STM32微处理器有关。它应该保持原样,而不要由最终用户修改。 |
DT configuration (board level)
请按照以下章节中描述的顺序在板上配置和启用DFSDM。
Common resources for all DFSDM filters
配置'dfsdm'DT根节点:
- 通过设置status =“ okay”为DFSDM启用DT根节点。
- 通过设置pinctrl-0,pinctrl-1和pinctrl-names,通过pinctrl配置使用中的引脚。
- 通过设置spi-max-frequency(可选:仅用于SPI主模式),配置SPI时钟输出频率。
- 通过设置clocks和clock-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-names,st,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
STM32CubeMX工具可用于配置STM32MPU设备并获取相应的 platform configuration device tree文件。
STM32CubeMX可能不支持以上DT bindings documentation 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入用户部分。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见STM32CubeMX 用户手册。
References
请参考以下链接以获取更多信息:
- ↑ Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt| |}} Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.txt , STM32 DFSDM ADC device tree bindings
- ↑ Documentation/devicetree/bindings/sound/st,stm32-adfsdm.txt| |}} Documentation/devicetree/bindings/sound/st,stm32-adfsdm.txt , STM32 audio DFSDM device tree bindings
- ↑ 3.03.13.2 Documentation/devicetree/bindings/iio/adc/sigma-delta-modulator.txt| |}} Documentation/devicetree/bindings/iio/adc/sigma-delta-modulator.txt , Generic Device-Tree bindings for sigma delta modulator
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi| |}} arch/arm/boot/dts/stm32mp157c.dtsi , STM32MP157C device tree file