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

来自百问网嵌入式Linux wiki
 
(未显示2个用户的5个中间版本)
第1行: 第1行:
{{DISPLAYTITLE:FMC设备树配置}}
+
== Article purpose ==
 +
本文介绍如何在将 [[FMC internal peripheral|'''FMC''' internal peripheral]] 分配给Linux<sup>&reg;</sup> 操作系统时对其进行配置。 在这种情况下,它由[[MTD overview|MTD framework]]控制。
  
[[Category:Linux_Operating_System]]
+
使用[[Device tree|device tree]] 机制执行配置,该机制提供STM32 FMC Linux驱动程序和MTD框架使用的FMC外设的硬件描述。
[[Category:Persistent_storage]]
+
 
[[Category:Mass_storage]]
+
== 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 bindings documentation

FMC设备树绑定由以下组成:

  • 通用MTD nand绑定 [1].
  • FMC驱动程序绑定 [2].

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";
   };
Warning.png 与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 用户手册。