“FMC device tree configuration”的版本间的差异
(未显示2个用户的6个中间版本) | |||
第1行: | 第1行: | ||
− | [[ | + | == Article purpose == |
− | + | 本文介绍如何在将 [[FMC internal peripheral|'''FMC''' internal peripheral]] 分配给Linux<sup>®</sup> 操作系统时对其进行配置。 在这种情况下,它由[[MTD overview|MTD framework]]控制。 | |
− | + | ||
+ | 使用[[Device tree|device tree]] 机制执行配置,该机制提供STM32 FMC Linux驱动程序和MTD框架使用的FMC外设的硬件描述。 | ||
+ | |||
+ | == DT bindings documentation == | ||
+ | |||
+ | FMC设备树绑定由以下组成: | ||
+ | |||
+ | * 通用MTD nand绑定 <ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/mtd/nand.txt}}</ref>. | ||
+ | |||
+ | * FMC驱动程序绑定 <ref> {{CodeSource | Linux kernel | Documentation/devicetree/bindings/mtd/stm32-fmc2-nand.txt}} </ref>. | ||
+ | |||
+ | == DT configuration == | ||
+ | 该硬件描述是“''STM32微处理器”''设备树文件(扩展名为.dtsi)和“''板子”设备树文件(扩展名为.dts)的组合。 有关设备树文件分割的说明,请参见[[Device tree]]。 | ||
+ | |||
+ | '''STM32CubeMX'''可用于生成板卡设备树。 有关更多详细信息,请参考[[#How_to_configure_the_DT_using_STM32CubeMX [[#How_to_configure_the_DT_using_STM32CubeMX|How to configure the DT using STM32CubeMX]] . | ||
+ | |||
+ | ===DT configuration (STM32 level) === | ||
+ | FMC外设节点位于“ stm32mp157c.dtsi”中。<ref>{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157c.dtsi}}</ref>文件。 | ||
+ | |||
+ | fmc: nand-controller@58002000 { {{highlight|Comments}} | ||
+ | compatible = "st,stm32mp15-fmc2"; | ||
+ | reg = <0x58002000 0x1000>, {{highlight|--> First region contains the register location}} | ||
+ | <0x80000000 0x1000>, {{highlight|--> Régions 2 to 4 respectively contain the data, command and address space for CS0}} | ||
+ | <0x88010000 0x1000>, | ||
+ | <0x88020000 0x1000>, | ||
+ | <0x81000000 0x1000>, {{highlight|--> Régions 5 to 7 contain the same areas for CS1}} | ||
+ | <0x89010000 0x1000>, | ||
+ | <0x89020000 0x1000>; | ||
+ | interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; {{highlight|--> The interrupt number used}} | ||
+ | dmas = <&mdma1 20 0x10 0x12000A02 0x0 0x0 0>, {{highlight|--> DMA specifiers <ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/dma/stm32-mdma.txt}}</ref>}} | ||
+ | <&mdma1 20 0x10 0x12000A08 0x0 0x0 0>, | ||
+ | <&mdma1 21 0x10 0x12000A0A 0x0 0x0 0>; | ||
+ | dma-names = "tx", "rx", "ecc"; | ||
+ | clocks = <&rcc FMC_K>; | ||
+ | resets = <&rcc FMC_R>; | ||
+ | status = "disabled"; | ||
+ | }; | ||
+ | |||
+ | {{Warning|与STM32相关的设备树部分应保持原样,客户不应对其进行修改。}} | ||
+ | |||
+ | === DT configuration (board level) === | ||
+ | FMC外设可以连接到一个SLC NAND闪存(每个封装最多2个管芯)。 | ||
+ | |||
+ | &fmc { {{highlight|Comments}} | ||
+ | pinctrl-names = "default", "sleep"; {{highlight|--> For pinctrl configuration, please refer to [[Pinctrl device tree configuration]]}} | ||
+ | pinctrl-0 = <&fmc2_pins_a>; | ||
+ | pinctrl-1 = <&fmc2_sleep_pins_a>; | ||
+ | status = "okay"; {{highlight|--> Enable the node}} | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>;<br> | ||
+ | nand: nand@0 { | ||
+ | reg = <0>; {{highlight|--> Describe the CS line assigned to the NAND chip}} | ||
+ | nand-on-flash-bbt; {{highlight|--> Store the bad block table on NAND Flash memory}} | ||
+ | nand-ecc-strength = <8>; {{highlight|--> Number of bits to correct per ECC step}} | ||
+ | nand-ecc-step-size = <512>; {{highlight|--> Number of data bytes that are covered by a single ECC step}} | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <1>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | 支持的ECC强度和步长为: | ||
+ | * nand-ecc-strength = <1>, nand-ecc-step-size = <512> (HAMMING). | ||
+ | * nand-ecc-strength = <4>, nand-ecc-step-size = <512> (BCH4). | ||
+ | * nand-ecc-strength = <8>, nand-ecc-step-size = <512> (BCH8). | ||
+ | |||
+ | === DT configuration examples === | ||
+ | 以下示例显示了在连接SLC 8位NAND闪存设备时(ECC要求:8位/ 512字节)如何配置FMC控制器. | ||
+ | |||
+ | &fmc { | ||
+ | pinctrl-names = "default", "sleep"; | ||
+ | pinctrl-0 = <&fmc2_pins_a>; | ||
+ | pinctrl-1 = <&fmc2_sleep_pins_a>; | ||
+ | status = "okay"; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>;<br> | ||
+ | nand: nand@0 { | ||
+ | reg = <0>; | ||
+ | nand-on-flash-bbt; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <1>;<br> | ||
+ | partition@0 { | ||
+ | ... | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | 下例显示了连接SLC 8位NAND闪存设备时的FMC控制器配置(ECC要求:4位/ 512字节). | ||
+ | |||
+ | &fmc { | ||
+ | pinctrl-names = "default", "sleep"; | ||
+ | pinctrl-0 = <&fmc2_pins_a>; | ||
+ | pinctrl-1 = <&fmc2_sleep_pins_a>; | ||
+ | status = "okay"; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <0>;<br> | ||
+ | nand: nand@0 { | ||
+ | reg = <0>; | ||
+ | nand-on-flash-bbt; | ||
+ | nand-ecc-strength = <4>; | ||
+ | nand-ecc-step-size = <512>; | ||
+ | #address-cells = <1>; | ||
+ | #size-cells = <1>;<br> | ||
+ | partition@0 { | ||
+ | ... | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | ==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月10日 (二) 11:57的最新版本
目录
Article purpose
本文介绍如何在将 FMC internal peripheral 分配给Linux® 操作系统时对其进行配置。 在这种情况下,它由MTD framework控制。
使用device tree 机制执行配置,该机制提供STM32 FMC Linux驱动程序和MTD框架使用的FMC外设的硬件描述。
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)
FMC外设节点位于“ stm32mp157c.dtsi”中。[3]文件。
fmc: nand-controller@58002000 { Comments compatible = "st,stm32mp15-fmc2"; reg = <0x58002000 0x1000>, --> First region contains the register location <0x80000000 0x1000>, --> Régions 2 to 4 respectively contain the data, command and address space for CS0 <0x88010000 0x1000>, <0x88020000 0x1000>, <0x81000000 0x1000>, --> Régions 5 to 7 contain the same areas for CS1 <0x89010000 0x1000>, <0x89020000 0x1000>; interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; --> The interrupt number used dmas = <&mdma1 20 0x10 0x12000A02 0x0 0x0 0>, --> DMA specifiers [4] <&mdma1 20 0x10 0x12000A08 0x0 0x0 0>, <&mdma1 21 0x10 0x12000A0A 0x0 0x0 0>; dma-names = "tx", "rx", "ecc"; clocks = <&rcc FMC_K>; resets = <&rcc FMC_R>; status = "disabled"; };
与STM32相关的设备树部分应保持原样,客户不应对其进行修改。 |
DT configuration (board level)
FMC外设可以连接到一个SLC NAND闪存(每个封装最多2个管芯)。
&fmc { Comments pinctrl-names = "default", "sleep"; --> For pinctrl configuration, please refer to Pinctrl device tree configuration pinctrl-0 = <&fmc2_pins_a>; pinctrl-1 = <&fmc2_sleep_pins_a>; status = "okay"; --> Enable the node #address-cells = <1>; #size-cells = <0>;
nand: nand@0 { reg = <0>; --> Describe the CS line assigned to the NAND chip nand-on-flash-bbt; --> Store the bad block table on NAND Flash memory nand-ecc-strength = <8>; --> Number of bits to correct per ECC step nand-ecc-step-size = <512>; --> Number of data bytes that are covered by a single ECC step #address-cells = <1>; #size-cells = <1>; }; };
支持的ECC强度和步长为:
- nand-ecc-strength = <1>, nand-ecc-step-size = <512> (HAMMING).
- nand-ecc-strength = <4>, nand-ecc-step-size = <512> (BCH4).
- nand-ecc-strength = <8>, nand-ecc-step-size = <512> (BCH8).
DT configuration examples
以下示例显示了在连接SLC 8位NAND闪存设备时(ECC要求:8位/ 512字节)如何配置FMC控制器.
&fmc { pinctrl-names = "default", "sleep"; pinctrl-0 = <&fmc2_pins_a>; pinctrl-1 = <&fmc2_sleep_pins_a>; status = "okay"; #address-cells = <1>; #size-cells = <0>;
nand: nand@0 { reg = <0>; nand-on-flash-bbt; #address-cells = <1>; #size-cells = <1>;
partition@0 { ... }; }; };
下例显示了连接SLC 8位NAND闪存设备时的FMC控制器配置(ECC要求:4位/ 512字节).
&fmc { pinctrl-names = "default", "sleep"; pinctrl-0 = <&fmc2_pins_a>; pinctrl-1 = <&fmc2_sleep_pins_a>; status = "okay"; #address-cells = <1>; #size-cells = <0>;
nand: nand@0 { reg = <0>; nand-on-flash-bbt; nand-ecc-strength = <4>; nand-ecc-step-size = <512>; #address-cells = <1>; #size-cells = <1>;
partition@0 { ... }; }; };
How to configure the DT using STM32CubeMX
STM32CubeMX 工具可用于配置STM32MPU设备并获取相应的platform configuration device tree 文件。
STM32CubeMX可能不支持以上DT bindings documentation 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入用户部分。 然后可以编辑这些部分以添加某些属性,并将它们代代相传。 有关详细信息,请参阅STM32CubeMX 用户手册。
References
有关完整说明,请参阅以下链接:
- ↑ Documentation/devicetree/bindings/mtd/nand.txt| |}} Documentation/devicetree/bindings/mtd/nand.txt
- ↑ Documentation/devicetree/bindings/mtd/stm32-fmc2-nand.txt| |}} Documentation/devicetree/bindings/mtd/stm32-fmc2-nand.txt
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi| |}} arch/arm/boot/dts/stm32mp157c.dtsi
- ↑ Documentation/devicetree/bindings/dma/stm32-mdma.txt| |}} Documentation/devicetree/bindings/dma/stm32-mdma.txt