| # Copyright (c) 2022 Georgij Cernysiov |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| STM32 Flexible Memory Controller (NOR Flash/PSRAM/SRAM controller). |
| |
| The FMC generates the appropriate signal timings to drive the |
| following types of memories: |
| |
| * Asynchronous SRAM and ROM |
| - 8 bits |
| - 16 bits |
| - 32 bits |
| * PSRAM (Cellular RAM) |
| - Asynchronous mode |
| - Burst mode for synchronous accesses with configurable option to split burst |
| access when crossing boundary page for CRAM 1.5. |
| - Multiplexed or non-multiplexed |
| * NOR Flash memory |
| - Asynchronous mode |
| - Burst mode for synchronous accesses |
| - Multiplexed or non-multiplexed |
| |
| A unique Chip Select signal (NE) is used per bank. All the other |
| signals (addresses, data and control) are shared. A wide range of |
| devices is supported through programmable timings. |
| |
| Refer to the reference manual for more details. |
| |
| The FMC NOR/PSRAM controller is defined below the FMC node and banks are |
| defined as child nodes of the FMC NOR/PSRAM controller node. |
| |
| You can enable the controller in devicetree as follows: |
| |
| &fmc { |
| status = "okay"; |
| pinctrl-0 = <&fmc_nwe_pd5 &fmc_noe_pd4 ...>; |
| pinctrl-names = "default"; |
| |
| sram { |
| status = "okay"; |
| compatible = "st,stm32-fmc-nor-psram"; |
| |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| sram2@2 { |
| reg = <0x2>; |
| st,control = <STM32_FMC_DATA_ADDRESS_MUX_DISABLE |
| STM32_FMC_MEMORY_TYPE_SRAM |
| STM32_FMC_NORSRAM_MEM_BUS_WIDTH_16 |
| STM32_FMC_BURST_ACCESS_MODE_DISABLE |
| STM32_FMC_WAIT_SIGNAL_POLARITY_LOW |
| STM32_FMC_WAIT_TIMING_BEFORE_WS |
| STM32_FMC_WRITE_OPERATION_ENABLE |
| STM32_FMC_WAIT_SIGNAL_DISABLE |
| STM32_FMC_EXTENDED_MODE_DISABLE |
| STM32_FMC_ASYNCHRONOUS_WAIT_DISABLE |
| STM32_FMC_WRITE_BURST_DISABLE |
| STM32_FMC_CONTINUOUS_CLOCK_SYNC_ONLY |
| STM32_FMC_WRITE_FIFO_DISABLE |
| STM32_FMC_PAGE_SIZE_NONE>; |
| st,timing = <4 2 3 0 16 17 STM32_FMC_ACCESS_MODE_A>; |
| }; |
| }; |
| }; |
| |
| Use constants defined in dt-bindings/memory-controller/stm32-fmc-nor-psram.h. |
| |
| compatible: "st,stm32-fmc-nor-psram" |
| |
| include: base.yaml |
| |
| properties: |
| "#address-cells": |
| required: true |
| const: 1 |
| |
| "#size-cells": |
| required: true |
| const: 0 |
| |
| child-binding: |
| description: NOR/PSRAM bank. |
| |
| properties: |
| reg: |
| type: int |
| required: true |
| |
| st,control: |
| type: array |
| required: true |
| description: | |
| SRAM/NOR-Flash control register (FMC_BCRx). |
| |
| Contains control information of each memory bank, |
| used for SRAMs, PSRAM and NOR Flash memories. |
| |
| Expected fields, in order: |
| |
| * MUXEN - Address/data multiplexing enable bit. |
| * MTYP - Memory type. |
| * MWID - Memory data bus width. |
| * FACCEN - Flash access enable. |
| * BURSTEN - Burst enable bit. |
| * WAITPOL - Wait signal polarity bit. |
| * WAITCFG - Wait timing configuration. |
| * WREN - Write enable bit. |
| * WAITEN - Wait enable bit. |
| * EXTMOD - Extended mode enable. |
| If set, then 'st,timing-ext' shall be provided. |
| * ASYNCWAIT - Wait signal during asynchronous transfers. |
| * CPSIZE - Cellular RAM (CRAM) 1.5 Page Size. |
| * CBURSTRW - Write burst enable. |
| * CCLKEN - Continuous Clock Enable. |
| * WFDIS - Write FIFO Disable. |
| * BMAP - FMC bank mapping. |
| |
| st,timing: |
| type: array |
| required: true |
| description: | |
| SRAM/NOR-Flash (read) timing register (FMC_BTRx). |
| |
| If the EXTMOD is set (see control register FMC_BCRx), then |
| FMC_BTRx register is partitioned for write and read access. |
| That means, use this property to configure read accesses and |
| 'st,timing-ext' to configure write accesses. |
| |
| Expected fields, in order: |
| |
| * ADDSET - Address setup phase duration. |
| Number of HCLK cycles to configure the duration of |
| the address setup time. This parameter can be a value |
| between Min_Data = 0 and Max_Data = 15. |
| Note: Not used with synchronous NOR Flash memories. |
| * ADDHLD - Address-hold phase duration. |
| Number of HCLK cycles to configure the duration of |
| the address hold time. This parameter can be a value |
| between Min_Data = 1 and Max_Data = 15. |
| Note: Not used with synchronous NOR Flash memories. |
| * DATAST - Data-phase duration. |
| Number of HCLK cycles to configure the duration of |
| the data setup time. This parameter can be a value |
| between Min_Data = 1 and Max_Data = 255. |
| Note: Used for SRAMs, ROMs and asynchronous multiplexed |
| NOR Flash memories. |
| * BUSTURN - Bus turnaround phase duration. |
| Number of HCLK cycles to configure the duration of |
| the bus turnaround. This parameter can be a value |
| between Min_Data = 0 and Max_Data = 15. |
| Note: Only used for multiplexed NOR Flash memories. |
| * CLKDIV - Clock divide ratio (for FMC_CLK signal). |
| Period of CLK clock output signal, expressed in number of |
| HCLK cycles. This parameter can be a value |
| between Min_Data = 2 and Max_Data = 16. |
| Note: Not used for asynchronous NOR Flash, SRAM or ROM |
| accesses. |
| * DATLAT - Data latency for synchronous memory. |
| Number of memory clock cycles to issue to the memory |
| before getting the first data. |
| The value depends on the memory type as shown below: |
| - It must be set to 0 in case of a CRAM |
| - It is don't care in asynchronous NOR, SRAM or ROM accesses |
| - It may assume a value between Min_Data = 2 and Max_Data = 17 |
| in NOR Flash memories with synchronous burst mode enable |
| * ACCMOD - Access mode. |
| See access mode defines |
| in dt-bindings/memory-controller/stm32-fmc-nor-psram.h. |
| |
| st,timing-ext: |
| type: array |
| default: [0xF, 0xF, 0xFF, 0xF, 0x0] # reset state |
| description: | |
| SRAM/NOR-Flash (write) timing register (FMC_BWTRx). |
| |
| Expected fields, in order: |
| |
| * ADDSET - Address setup phase duration. |
| Reset state: 15 (0xF). |
| * ADDHLD - Address-hold phase duration. |
| Reset state: 15 (0xF). |
| * DATAST - Data-phase duration. |
| Reset state: 255 (0xFF). |
| * BUSTURN - Bus turnaround phase duration. |
| Reset state: 15 (0xF). |
| * ACCMOD - Access mode. |
| Reset state: 0 (0x0). |
| |
| Refer to 'st,timing' for detailed field descriptions. |
| |
| This property is applied only when EXTMOD is set |
| (see control register FMC_BCRx). |
| |
| If absent, then reset state values are used. |