“SPI device tree configuration”的版本间的差异
(未显示2个用户的9个中间版本) | |||
第1行: | 第1行: | ||
− | [[ | + | == Article purpose == |
− | + | 本文介绍了如何配置“SPI内部外设”<ref name="SPI internal peripheral"> [[SPI internal peripheral]] </ref> ''' 将外围设备分配给<sup>®</sup> 操作系统时''', 特别是: | |
− | + | * 如何配置STM32 SPI外设 | |
+ | * 如何配置板上或硬件扩展上存在的STM32外部SPI器件。 | ||
+ | |||
+ | 使用 '''设备树机制'''执行配置<ref> [[Device tree]]</ref>. | ||
+ | |||
+ | 它由''STM32 SPI Linux<sup>®</sup> 驱动程序''使用,该驱动程序在[[SPI overview|SPI]] 框架中注册相关信息。 | ||
+ | |||
+ | 如果将外围设备分配给另一个执行上下文,请参阅[ [[How to assign an internal peripheral to a runtime context]] 文章,以获取有关外围设备分配和配置的准则。 | ||
+ | |||
+ | == DT bindings documentation == | ||
+ | |||
+ | SPI总线及其关联的设备表示为: | ||
+ | * ''SPI总线的通用设备树绑定''<ref name="spi-bus.txt">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/spi/spi-bus.txt}}, SPI总线的通用设备树绑定</ref> | ||
+ | * ''STM32 SPI控制器设备树绑定''<ref name="spi-stm32.txt ">{{CodeSource |Linux kernel | Documentation/devicetree/bindings/spi/spi-stm32.txt}}</ref> | ||
+ | |||
+ | == DT configuration == | ||
+ | 该硬件描述是'''STM32微处理器'''设备树文件(扩展名为.dtsi)和'''板子'''设备树文件(扩展名为.dts)的组合。有关设备树文件分割的说明,请参见[[Device tree]]。 | ||
+ | '''STM32CubeMX'''可用于生成板卡设备树。有关更多详细信息,请参考[[#How_to_configure_the_DT_using_STM32CubeMX|How to configure the DT using STM32CubeMX]]。 | ||
+ | |||
+ | ===DT configuration (STM32 level) === | ||
+ | 在设备级别,每个SPI控制器的声明如下: | ||
+ | <pre> | ||
+ | spi1: spi@44004000 { | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>; | ||
+ | compatible = "st,stm32h7-spi"; | ||
+ | reg = <0x44004000 0x400>; | ||
+ | interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; | ||
+ | clocks = <&rcc SPI1_K>; | ||
+ | resets = <&rcc SPI1_R>; | ||
+ | dmas = <&dmamux1 37 0x400 0x05>, | ||
+ | <&dmamux1 38 0x400 0x05>; | ||
+ | dma-names = "rx", "tx"; | ||
+ | power-domains = <&pd_core>; | ||
+ | status = "disabled"; | ||
+ | }; | ||
+ | </pre> | ||
+ | {{Warning|该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。}} | ||
+ | |||
+ | 请参阅DTS文件:stm32mp157c.dtsi<ref name=DTS>{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157c.dtsi}}</ref> | ||
+ | |||
+ | === DT configuration (board level) === | ||
+ | |||
+ | <pre> | ||
+ | &spi1 { | ||
+ | pinctrl-names = "default", "sleep"; | ||
+ | pinctrl-0 = <&spi1_pins_a>; | ||
+ | pinctrl-1 = <&spi1_sleep_pins_a>; | ||
+ | cs-gpios = <&gpioz 3 0>; | ||
+ | status = "okay"; | ||
+ | |||
+ | foo@0 { | ||
+ | compatible = "spi-foo"; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>; | ||
+ | reg = <0>; /* CS #0 */ | ||
+ | spi-max-frequency = <10000000>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | 有两个级别的配置: | ||
+ | * SPI总线属性的配置: | ||
+ | ** '''{{highlight|pinctrl-0&1}}''' 配置取决于硬件板配置以及SPI设备如何连接至MOSI,MISO和Clk引脚。<br/>有关引脚配置的更多详细信息,请参见:[[Pinctrl device tree configuration]] | ||
+ | ** '''{{highlight|cs-gpios}}''' 代表用作芯片选择的GPIO列表。STM32MP1 SPI驱动程序不支持由NULL值定义的本机控制器芯片选择。<br/>此处提供有关GPIO配置的更多详细信息:[[GPIO device tree configuration]] | ||
+ | ** '''{{highlight|dmas}}''':默认情况下,为所有SPI实例指定DMA。 如果不需要,则由用户决定“删除”。 ''{{highlight|/delete-property/}}''用于删除SPI的DMA使用。 必须插入 '''{{highlight|/delete-property/dma-names}}'''和 '''{{highlight|/delete-property/dma}}''' 来摆脱DMA。 | ||
+ | |||
+ | * 总线上连接的SPI设备的属性的配置: | ||
+ | ** '''{{highlight|compatible }}''' 表示SPI设备驱动程序的名称。 | ||
+ | ** '''{{highlight|reg}}''' 表示与此SPI设备关联的GPIO芯片选择的索引。 | ||
+ | ** '''{{highlight|spi-max-frequency}}''' 表示设备的最大SPI时钟速度(以Hz为单位)。 | ||
+ | |||
+ | 有关SPI总线和SPI设备绑定的更多信息,请参考spi-bus.txt。<ref name="spi-bus.txt"/> | ||
+ | |||
+ | === DT configuration example === | ||
+ | '''示例:'''外部TPM设备: | ||
+ | &spi1 { | ||
+ | pinctrl-names = "default", "sleep"; | ||
+ | pinctrl-0 = <&spi1_pins_a>; | ||
+ | pinctrl-1 = <&spi1_sleep_pins_a>; | ||
+ | cs-gpios = {{highlight|<&gpioz 3 0>}}; | ||
+ | status = "okay"; | ||
+ | |||
+ | st33zp24{{highlight|@0}} { | ||
+ | compatible = "st,st33htpm-spi"; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>; | ||
+ | reg = {{highlight|<0>}}; {{highlight|/* CS #0 */}} | ||
+ | spi-max-frequency = <10000000>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | 上面的示例在spi1总线上注册了TPM设备,该设备由芯片选择0(也称为GPIO-Z3)选择。 该实例与使用相同的兼容属性(st,st33htpm-spi)注册的驱动程序兼容。<br/> | ||
+ | |||
+ | ==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 /> |
2020年11月8日 (日) 15:27的最新版本
目录
Article purpose
本文介绍了如何配置“SPI内部外设”[1] 将外围设备分配给® 操作系统时, 特别是:
- 如何配置STM32 SPI外设
- 如何配置板上或硬件扩展上存在的STM32外部SPI器件。
使用 设备树机制执行配置[2].
它由STM32 SPI Linux® 驱动程序使用,该驱动程序在SPI 框架中注册相关信息。
如果将外围设备分配给另一个执行上下文,请参阅[ How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。
DT configuration
该硬件描述是STM32微处理器设备树文件(扩展名为.dtsi)和板子设备树文件(扩展名为.dts)的组合。有关设备树文件分割的说明,请参见Device tree。 STM32CubeMX可用于生成板卡设备树。有关更多详细信息,请参考How to configure the DT using STM32CubeMX。
DT configuration (STM32 level)
在设备级别,每个SPI控制器的声明如下:
spi1: spi@44004000 { #address-cells = <1>; #size-cells = <0>; compatible = "st,stm32h7-spi"; reg = <0x44004000 0x400>; interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; clocks = <&rcc SPI1_K>; resets = <&rcc SPI1_R>; dmas = <&dmamux1 37 0x400 0x05>, <&dmamux1 38 0x400 0x05>; dma-names = "rx", "tx"; power-domains = <&pd_core>; status = "disabled"; };
该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。 |
请参阅DTS文件:stm32mp157c.dtsi[5]
DT configuration (board level)
&spi1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi1_pins_a>; pinctrl-1 = <&spi1_sleep_pins_a>; cs-gpios = <&gpioz 3 0>; status = "okay"; foo@0 { compatible = "spi-foo"; #address-cells = <1>; #size-cells = <0>; reg = <0>; /* CS #0 */ spi-max-frequency = <10000000>; }; };
有两个级别的配置:
- SPI总线属性的配置:
-
pinctrl-0&1 配置取决于硬件板配置以及SPI设备如何连接至MOSI,MISO和Clk引脚。
有关引脚配置的更多详细信息,请参见:Pinctrl device tree configuration -
cs-gpios 代表用作芯片选择的GPIO列表。STM32MP1 SPI驱动程序不支持由NULL值定义的本机控制器芯片选择。
此处提供有关GPIO配置的更多详细信息:GPIO device tree configuration - dmas:默认情况下,为所有SPI实例指定DMA。 如果不需要,则由用户决定“删除”。 /delete-property/用于删除SPI的DMA使用。 必须插入 /delete-property/dma-names和 /delete-property/dma 来摆脱DMA。
-
pinctrl-0&1 配置取决于硬件板配置以及SPI设备如何连接至MOSI,MISO和Clk引脚。
- 总线上连接的SPI设备的属性的配置:
- compatible 表示SPI设备驱动程序的名称。
- reg 表示与此SPI设备关联的GPIO芯片选择的索引。
- spi-max-frequency 表示设备的最大SPI时钟速度(以Hz为单位)。
有关SPI总线和SPI设备绑定的更多信息,请参考spi-bus.txt。[3]
DT configuration example
示例:外部TPM设备:
&spi1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi1_pins_a>; pinctrl-1 = <&spi1_sleep_pins_a>; cs-gpios = <&gpioz 3 0>; status = "okay"; st33zp24@0 { compatible = "st,st33htpm-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0>; /* CS #0 */ spi-max-frequency = <10000000>; }; };
上面的示例在spi1总线上注册了TPM设备,该设备由芯片选择0(也称为GPIO-Z3)选择。 该实例与使用相同的兼容属性(st,st33htpm-spi)注册的驱动程序兼容。
How to configure the DT using STM32CubeMX
STM32CubeMX工具可用于配置STM32MPU设备并获取相应的platform configuration device tree 文件。
STM32CubeMX可能不支持以上 DT bindings documentation段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入用户部分 。然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见STM32CubeMX用户手册。
References
请参考以下链接以获取更多信息:
- ↑ SPI internal peripheral
- ↑ Device tree
- ↑ 3.03.1 Documentation/devicetree/bindings/spi/spi-bus.txt| |}} Documentation/devicetree/bindings/spi/spi-bus.txt , SPI总线的通用设备树绑定
- ↑ Documentation/devicetree/bindings/spi/spi-stm32.txt| |}} Documentation/devicetree/bindings/spi/spi-stm32.txt
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi| |}} arch/arm/boot/dts/stm32mp157c.dtsi