Kinetis Bootloader  2.0.0
Common bootloader for Kinetis devices
qspi.h
1 /*
2  * Copyright (c) 2013-2016, Freescale Semiconductor, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * o Redistributions of source code must retain the above copyright notice, this list
9  * of conditions and the following disclaimer.
10  *
11  * o Redistributions in binary form must reproduce the above copyright notice, this
12  * list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef __QSPI_H__
32 #define __QSPI_H__
33 
34 #include "memory/memory.h"
35 #include "bootloader_common.h"
36 
42 // Definitions
45 #define QSPI_LUT_MAX_ENTRIES 64
46 #define QSPI_PRE_CMD_CNT 4
47 #define QSPI_FEATURE_ENABLE 1
48 
49 #define QSPI_VERSION_NAME 'Q'
50 
52 {
54  kQspiConfigTag = FOUR_CHAR_CODE('k', 'q', 'c', 'f'),
57  kQspiVersionTag = FOUR_CHAR_CODE(0, 2, 1, 'Q'),
58 };
59 
61 typedef enum _qspiflash_mode_option
62 {
66 
68 typedef enum _qspiflash_pad
69 {
75 
77 typedef enum _qspi_serial_clock_freq
78 {
83 
85 typedef enum _qspiflash_property
86 {
87  kQspiFlashProperty_InitStatus = 0,
93 
96 
98 typedef enum _qspi_endianness
99 {
105 
107 typedef enum _qspi_port_enable
108 {
112 
114 typedef enum _qspi_ahb_data_transfer_size
115 {
120 
122 typedef enum _qspiflash_status
123 {
141 
144 
146  // commands in LUT
149 
151 typedef struct __sflash_configuration_parameter
152 {
153  uint32_t tag;
155  uint32_t lengthInBytes;
157 
158  uint32_t dqs_loopback;
159  uint32_t data_hold_time;
160  uint32_t reserved0[2];
162  uint32_t device_cmd;
163  uint32_t write_cmd_ipcr;
164  uint32_t word_addressable;
165 
166  uint32_t cs_hold_time;
167  uint32_t cs_setup_time;
168  uint32_t sflash_A1_size;
169  uint32_t sflash_A2_size;
170  uint32_t sflash_B1_size;
171  uint32_t sflash_B2_size;
172  uint32_t sclk_freq;
173  uint32_t busy_bit_offset;
174  uint32_t sflash_type;
175  uint32_t sflash_port;
176  uint32_t ddr_mode_enable;
177  uint32_t dqs_enable;
179  uint32_t portA_cs1;
180  uint32_t portB_cs1;
181  uint32_t fsphs;
182  uint32_t fsdly;
183  uint32_t ddrsmp;
184  uint32_t
185  look_up_table[QSPI_LUT_MAX_ENTRIES];
187  uint32_t config_cmd_en;
188  uint32_t config_cmds[QSPI_PRE_CMD_CNT];
189  uint32_t config_cmds_args[QSPI_PRE_CMD_CNT];
192  uint32_t dqs_inverse_sel;
195  uint32_t dqs_phase_sel;
198  uint32_t reserved1[2];
199  uint32_t pagesize;
200  uint32_t sectorsize;
201 
203  uint32_t ips_command_second_divider;
205  uint32_t need_multi_phases;
213  uint32_t reserved2[3];
214 
215 } qspi_config_t, *SFLASH_CONFIGURATION_PARAM_PTR;
216 
218 // API
220 
221 #if defined(__cplusplus)
222 extern "C" {
223 #endif
224 
233 status_t quadspi_get_property(uint32_t whichProperty, uint32_t *value);
234 
245 status_t quadspi_page_program(uint32_t dst_addr, const uint32_t *src, uint32_t lengthInBytes);
246 
255 status_t quadspi_init(qspi_config_t *config_base);
256 
263 bool is_quadspi_configured(void);
264 
275 
284 
289 
295 status_t quadspi_erase_sector(uint32_t address);
296 
301 
302 #if defined(__cplusplus)
303 }
304 
307 #endif // #ifndef __QSPI_H__
308 
309 #endif
310 
312 // EOF
uint32_t pagesize
page Size of Serial Flash
Definition: qspi.h:199
Octal-pad spi flash.
Definition: qspi.h:73
Error code which represents that the address is invalid.
Definition: qspi.h:129
uint32_t pre_erase_cmd_address_offset
Address for PreErase command.
Definition: qspi.h:211
status_t quadspi_get_property(uint32_t whichProperty, uint32_t *value)
Get Property from QSPI driver.
Definition: qspi.c:346
QuadSPI module works at mid frequency.
Definition: qspi.h:80
Enable Both PoartA and PortB.
Definition: qspi.h:110
Single-pad spi flash.
Definition: qspi.h:70
Dual-pad spi flash.
Definition: qspi.h:71
uint32_t cs_setup_time
CS setup time in terms of serial clock.(for example 1 serial clock cyle)
Definition: qspi.h:167
status_t quadspi_erase_all(void)
Erase the entire spi flash devices.
Definition: qspi.c:772
AHB data transfer size is 256bytes.
Definition: qspi.h:117
uint32_t config_cmd_en
Enable config commands.
Definition: qspi.h:187
uint32_t differential_clock_pin_enable
Differential flash clock pins enable.
Definition: qspi.h:190
uint32_t dqs_loopback_internal
0: dqs loopback from pad, 1: dqs loopback internally
Definition: qspi.h:194
uint32_t sflash_port
0–Only Port-A, 1–Both PortA and PortB
Definition: qspi.h:175
uint32_t is_spansion_hyperflash
Determine if connected spi flash device belongs to Hyperflash family.
Definition: qspi.h:206
uint32_t fsphs
Full speed delay selection for SDR instructions.
Definition: qspi.h:181
Tag used to retrieve total flash size in terms of KByte.
Definition: qspi.h:89
QuadSPI Config block structure.
Definition: qspi.h:151
qspi_serial_clock_freq_t
QSPI Serial Clock Frequency options.
Definition: qspi.h:77
uint32_t cs_hold_time
CS hold time in terms of serial clock.(for example 1 serial clock cyle)
Definition: qspi.h:166
status_t quadspi_erase_sector(uint32_t address)
Erase one sector from the provided address.
Definition: qspi.c:844
uint32_t dqs_inverse_sel
Select clock source for internal DQS generation.
Definition: qspi.h:192
status_t quadspi_cache_clear(void)
Flush QSPI cache.
Definition: qspi.c:1376
uint32_t write_cmd_ipcr
IPCR value of Write command.
Definition: qspi.h:163
uint32_t ddr_mode_enable
Enable DDR mode if set to TRUE.
Definition: qspi.h:176
status_t quadspi_init(qspi_config_t *config_base)
Intialize QSPI module according to parameters passed in.
Definition: qspi.c:1340
uint32_t busy_bit_offset
Flash device busy bit offset in status register.
Definition: qspi.h:173
Tag value used to validate the qspi config block.
Definition: qspi.h:54
Serial mode.
Definition: qspi.h:63
uint32_t erase_all_cmd_address_offset
Address for EraseAll command.
Definition: qspi.h:212
uint32_t sflash_A1_size
Size of flash connected on QSPI0A Ports and QSPI0A_SS0, in terms of Bytes.
Definition: qspi.h:168
qspi_endianess_t
Endianess supported by QSPI module.
Definition: qspi.h:98
bool is_quadspi_configured(void)
Get the status of quadspi configuration.
Definition: qspi.c:1370
Error code which represents that QSPI cannot perform write operation at expected frequency.
Definition: qspi.h:143
uint32_t sclk_freq
In 00 - 24MHz, 01 - 48MHz, 10 - 96MHz,(only for SDR Mode)
Definition: qspi.h:172
uint32_t sectorsize
sector Size of Serial Flash
Definition: qspi.h:200
uint32_t pre_unlock_cmd_address_offset
Address for PreWriteEnable command.
Definition: qspi.h:208
uint32_t sflash_B2_size
Size of flash connected on QSPI0B Ports and QSPI0B_SS1, in terms of Bytes.
Definition: qspi.h:171
Error code which represents that operation is timeout.
Definition: qspi.h:140
uint32_t portA_cs1
Enable PORTA CS1.
Definition: qspi.h:179
QSPI driver status group number.
Definition: bootloader_common.h:157
qspiflash_pad_t
External spi flash pad definition.
Definition: qspi.h:68
uint32_t dqs_loopback
Sets DQS LoopBack Mode to enable Dummy Pad MCR[24].
Definition: qspi.h:158
uint32_t data_hold_time
Serial flash data In Hold time, valid value: 0/1/2.
Definition: qspi.h:159
64-bit Big Endian
Definition: qspi.h:100
uint32_t device_cmd
Command to be tranferred to device.
Definition: qspi.h:162
uint32_t dqs_phase_sel
dqs phase sel
Definition: qspi.h:195
Error code which represents that start address for programming is not page aligned.
Definition: qspi.h:127
Error code which represents that the operation is not successfully executed.
Definition: qspi.h:131
uint32_t word_addressable
Determine if the serial flash is word addressable.
Definition: qspi.h:164
Error code which represents that a command is not supported under certain mode.
Definition: qspi.h:138
Only PORTA is enabled.
Definition: qspi.h:109
qspiflash_property_t
QSPI flash property tag values.
Definition: qspi.h:85
Error code which represents that the property is not supported.
Definition: qspi.h:133
Tag used to retrieve sector size in term of byte.
Definition: qspi.h:91
32-bit Little Endian
Definition: qspi.h:101
uint32_t need_multi_phases
Determine if multiple hases command are needed.
Definition: qspi.h:205
uint32_t dqs_fb_delay_chain_sel
dqs fb delay chain selection
Definition: qspi.h:197
AHB data transfer size is 64bytes.
Definition: qspi.h:116
qspiflash_status_t
Error codes of QuadSPI driver.
Definition: qspi.h:122
Structure of version property.
Definition: bootloader_common.h:168
Tag used to retrieve start address.
Definition: qspi.h:88
uint32_t sflash_type
SPI flash type: 0-Single,1–Dual 2–Quad, 3– Octal.
Definition: qspi.h:174
uint32_t flash_CK2_clock_pin_enable
Flash CK2 clock pin enable.
Definition: qspi.h:191
uint32_t pre_program_cmd_address_offset
Address for PreProgram command.
Definition: qspi.h:210
AHB data transfer size is 512bytes.
Definition: qspi.h:118
qspi_port_enable_t
Port Enablement Option.
Definition: qspi.h:107
Parallel mode.
Definition: qspi.h:64
uint32_t dqs_enable
Enable DQS mode if set to TRUE.
Definition: qspi.h:177
void quadspi_serial_clock_configure(qspi_serial_clock_freq_t freq)
Configure QSPI serial clock frquency.
Tag used to retrieve total flash size in terms of byte.
Definition: qspi.h:94
uint32_t timeout_milliseconds
Definition: qspi.h:202
Quad-pad spi flash.
Definition: qspi.h:72
uint32_t pre_read_status_cmd_address_offset
Address for PreReadStatus command.
Definition: qspi.h:207
uint32_t fsdly
Full speed phase selection for SDR instructions.
Definition: qspi.h:182
uint32_t sflash_B1_size
Size of flash connected on QSPI0B Ports and QSPI0B_SS0, in terms of Bytes.
Definition: qspi.h:170
Error code which represents that flash size is error.
Definition: qspi.h:125
uint32_t ddrsmp
Select the sampling point for incomming data when serial flash is in DDR mdoe.
Definition: qspi.h:183
uint32_t parallel_mode_enable
Enable Individual or parrallel mode.
Definition: qspi.h:178
QuadSPI module works at low frequency.
Definition: qspi.h:79
uint32_t portB_cs1
Enable PORTB CS1.
Definition: qspi.h:180
status_t quadspi_iomux_configuration(qspi_config_t *config_base)
Configure pinmux of QSPI module according to parameters passed in.
qspiflash_mode_option_t
QSPI Flash mode options.
Definition: qspi.h:61
__qspi_config_block_tags
Definition: qspi.h:51
Tag used to retrieve block size in terms of byte.
Definition: qspi.h:92
uint32_t dqs_fa_delay_chain_sel
dqs fa delay chain selection
Definition: qspi.h:196
Error code which represents that the QSPI module is busy, which may be caused by incorrect.
Definition: qspi.h:147
uint32_t unlock_cmd_address_offset
Address for WriteEnable command.
Definition: qspi.h:209
32-bit Big Endian
Definition: qspi.h:102
64-bit Little Endian
Definition: qspi.h:103
uint32_t column_address_space
The width of the column address.
Definition: qspi.h:186
standard_version_t version
Definition: qspi.h:154
uint32_t tag
Set to magic number of 'kqcf'.
Definition: qspi.h:153
Error code which represents that qspi module is not configured yet.
Definition: qspi.h:135
int32_t status_t
Type used for all status and error return values.
Definition: fsl_common.h:121
qspi_ahb_data_transfer_size_t
Definition for AHB data tranfer size.
Definition: qspi.h:114
uint32_t device_mode_config_en
Determine if it is required to config working mode of external spi flash.
Definition: qspi.h:161
status_t quadspi_page_program(uint32_t dst_addr, const uint32_t *src, uint32_t lengthInBytes)
Page program to external spi flash.
QuadSPI module works at high frequency.
Definition: qspi.h:81
uint32_t dqs_latency_enable
DQS Latency Enable.
Definition: qspi.h:193
uint32_t sflash_A2_size
Size of flash connected on QSPI0A Ports and QSPI0A_SS1, in terms of Bytes.
Definition: qspi.h:169
Tag used to retreive page size in terms of byte.
Definition: qspi.h:90