FMC device tree configuration

来自百问网嵌入式Linux wiki

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 用户手册。