blob: 5594b11d0993df0606b3709fcad6420438df5505 [file] [log] [blame]
# 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
required: false # required when 'EXTMOD' is enabled
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.