HPM SDK
HPMicro Software Development Kit
hpm_serial_nor_host.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef _HPM_SERIAL_NOR_HOST_H
9 #define _HPM_SERIAL_NOR_HOST_H
10 #include "hpm_common.h"
11 #include "sfdp_def.h"
12 
13 #ifndef SERIAL_NOR_USE_DMA_MGR
14 #define SERIAL_NOR_USE_DMA_MGR 0
15 #endif
16 
17 #if (SERIAL_NOR_USE_DMA_MGR == 1)
18 #include "hpm_dma_mgr.h"
19 #endif
20 
21 #define SERIAL_NOR_HOST_SUPPORT_SINGLE_IO_MODE (1UL << 0)
22 #define SERIAL_NOR_HOST_SUPPORT_DUAL_IO_MODE (1UL << 1)
23 #define SERIAL_NOR_HOST_SUPPORT_QUAD_IO_MODE (1UL << 2)
24 #define SERIAL_NOR_HOST_SUPPORT_SPI_INTERFACE (1UL << 3)
25 #define SERIAL_NOR_HOST_SUPPORT_DMA (1UL << 8)
26 #define SERIAL_NOR_HOST_CS_CONTROL_AUTO (1UL << 9)
27 
31 typedef enum {
36 
40 typedef enum {
44 
48 typedef enum {
52 
56 typedef struct {
57  uint8_t en_dev_mode_cfg;
58  uint8_t sfdp_version;
60  uint8_t block_erase_cmd;
61  uint32_t size_in_kbytes;
62  uint16_t page_size;
66 
71 typedef struct {
72  uint8_t rx_dma_req;
73  uint8_t tx_dma_req;
74 #if (SERIAL_NOR_USE_DMA_MGR == 0)
75  uint8_t rx_dma_ch;
76  uint8_t tx_dma_ch;
77  void *dma_base;
78  void *dmamux_base;
79 #else
80  dma_resource_t txdma_resource;
81  dma_resource_t rxdma_resource;
82 #endif
84 
85 
89 typedef struct {
90  uint8_t pin_or_cs_index;
92  uint32_t clock_name;
93  uint32_t frequency;
95  void *host_base;
96  void (*set_cs)(uint32_t cs_pin, uint8_t state);
97  void (*set_frequency)(void *host, uint32_t freq);
99 
103 typedef struct {
104  uint8_t read_cmd;
110 
114 typedef struct {
120 
124 typedef struct {
125  uint32_t flags;
127  void *user_data;
129 
136 typedef struct {
137  /* can choose whether to use DMA in a transfer, even if the flags has DMA*/
138  uint8_t use_dma;
139 
140  struct {
141  uint8_t cmd;
142  } cmd_phase;
143 
144  struct {
145  bool enable;
148  uint32_t addr;
149  } addr_phase;
150 
151  struct {
152  uint8_t dummy_count;
153  } dummy_phase;
154 
155  struct {
156  /* the operation direction of the data phase, it's include write and read */
158  /* the SPI operation mode of the data phase, it's include SPI/DUAL SPI/QUAD SPI and so on */
160  uint32_t len;
161  uint8_t *buf;
162  } data_phase;
163 
165 
169 typedef struct {
170  hpm_stat_t (*init)(void *host);
171 
172  hpm_stat_t (*transfer)(void *host, hpm_serial_nor_transfer_seq_t *command_seq);
173 
174  void (*set_cs)(uint32_t cs_pin, uint8_t state);
175 
176  void (*set_frequency)(void *host, uint32_t freq);
177 
178  void *user_data;
180 
184 typedef struct {
187  void *user_data;
189 
193 typedef struct {
199 
200 #ifdef __cplusplus
201 extern "C" {
202 #endif
203 
210 
211 #ifdef __cplusplus
212 }
213 #endif
214 
215 #endif
static void init(hpm_panel_t *panel, const hpm_panel_timing_t *timing)
Definition: cc10128007.c:86
uint32_t hpm_stat_t
Definition: hpm_common.h:135
@ cs_pin
Definition: hpm_spi_drv.h:276
struct _dma_resource dma_resource_t
DMA Resource Structure.
hpm_serial_nor_seq_io_mode_t
IO mode of serial nor flash sequence.
Definition: hpm_serial_nor_host.h:31
@ dual_io_mode
Definition: hpm_serial_nor_host.h:33
@ quad_io_mode
Definition: hpm_serial_nor_host.h:34
@ single_io_mode
Definition: hpm_serial_nor_host.h:32
hpm_stat_t serial_nor_host_ops_use_spi(hpm_serial_nor_t *dev)
serial nor host operation is use spi operation
Definition: hpm_serial_nor_host_spi.c:50
hpm_serial_nor_seq_addr_bit_t
number of address bits of serial nor flash sequence
Definition: hpm_serial_nor_host.h:40
@ flash_addrlen_32bit
Definition: hpm_serial_nor_host.h:42
@ flash_addrlen_24bit
Definition: hpm_serial_nor_host.h:41
hpm_serial_nor_seq_direction_t
transfer direction serial nor flash sequence
Definition: hpm_serial_nor_host.h:48
@ write_direction
Definition: hpm_serial_nor_host.h:49
@ read_direction
Definition: hpm_serial_nor_host.h:50
static hpm_stat_t transfer(void *host, hpm_serial_nor_transfer_seq_t *command_seq)
Definition: hpm_serial_nor_host_spi.c:62
dma control param of serial nor flash host
Definition: hpm_serial_nor_host.h:71
uint8_t tx_dma_ch
Definition: hpm_serial_nor_host.h:76
uint8_t rx_dma_ch
Definition: hpm_serial_nor_host.h:75
void * dma_base
Definition: hpm_serial_nor_host.h:77
uint8_t rx_dma_req
Definition: hpm_serial_nor_host.h:72
uint8_t tx_dma_req
Definition: hpm_serial_nor_host.h:73
void * dmamux_base
Definition: hpm_serial_nor_host.h:78
param and operation of serial nor flash host
Definition: hpm_serial_nor_host.h:89
hpm_nor_host_dma_control_t dma_control
Definition: hpm_serial_nor_host.h:91
uint32_t clock_name
Definition: hpm_serial_nor_host.h:92
uint8_t pin_or_cs_index
Definition: hpm_serial_nor_host.h:90
uint32_t transfer_max_size
Definition: hpm_serial_nor_host.h:94
uint32_t frequency
Definition: hpm_serial_nor_host.h:93
void * host_base
Definition: hpm_serial_nor_host.h:95
param of serial nor flash host
Definition: hpm_serial_nor_host.h:124
uint32_t flags
Definition: hpm_serial_nor_host.h:125
hpm_nor_host_param_t param
Definition: hpm_serial_nor_host.h:126
void * user_data
Definition: hpm_serial_nor_host.h:127
serial nor flash host parameters structure
Definition: hpm_serial_nor_host.h:184
void * user_data
Definition: hpm_serial_nor_host.h:187
serial_nor_host_ops_t host_ops
Definition: hpm_serial_nor_host.h:186
hpm_serial_nor_host_param_t host_param
Definition: hpm_serial_nor_host.h:185
information of serial nor flash
Definition: hpm_serial_nor_host.h:56
uint32_t size_in_kbytes
Definition: hpm_serial_nor_host.h:61
uint8_t block_erase_cmd
Definition: hpm_serial_nor_host.h:60
uint16_t sector_size_kbytes
Definition: hpm_serial_nor_host.h:63
uint8_t en_dev_mode_cfg
Definition: hpm_serial_nor_host.h:57
uint16_t block_size_kbytes
Definition: hpm_serial_nor_host.h:64
uint8_t sector_erase_cmd
Definition: hpm_serial_nor_host.h:59
uint16_t page_size
Definition: hpm_serial_nor_host.h:62
uint8_t sfdp_version
Definition: hpm_serial_nor_host.h:58
serial nor flash parameters structure
Definition: hpm_serial_nor_host.h:193
hpm_sfdp_program_para_t nor_program_para
Definition: hpm_serial_nor_host.h:196
hpm_serial_nor_host_t host
Definition: hpm_serial_nor_host.h:194
hpm_serial_nor_info_t flash_info
Definition: hpm_serial_nor_host.h:197
hpm_sfdp_read_para_t nor_read_para
Definition: hpm_serial_nor_host.h:195
operation sequence of serial nor flash
Definition: hpm_serial_nor_host.h:136
uint8_t cmd
Definition: hpm_serial_nor_host.h:141
bool enable
Definition: hpm_serial_nor_host.h:145
hpm_serial_nor_seq_io_mode_t data_io_mode
Definition: hpm_serial_nor_host.h:159
uint32_t addr
Definition: hpm_serial_nor_host.h:148
uint8_t use_dma
Definition: hpm_serial_nor_host.h:138
hpm_serial_nor_seq_io_mode_t addr_io_mode
Definition: hpm_serial_nor_host.h:147
uint32_t len
Definition: hpm_serial_nor_host.h:160
hpm_serial_nor_seq_addr_bit_t addr_bit
Definition: hpm_serial_nor_host.h:146
uint8_t * buf
Definition: hpm_serial_nor_host.h:161
hpm_serial_nor_seq_direction_t direction
Definition: hpm_serial_nor_host.h:157
uint8_t dummy_count
Definition: hpm_serial_nor_host.h:152
spi nor program parameters structure
Definition: hpm_serial_nor_host.h:114
uint8_t page_program_cmd
Definition: hpm_serial_nor_host.h:118
bool has_4b_addressing_inst_table
Definition: hpm_serial_nor_host.h:115
bool support_1_4_4_page_program
Definition: hpm_serial_nor_host.h:116
bool support_1_1_4_page_program
Definition: hpm_serial_nor_host.h:117
spi nor read parameters structure
Definition: hpm_serial_nor_host.h:103
hpm_serial_nor_seq_addr_bit_t addr_bit
Definition: hpm_serial_nor_host.h:106
hpm_serial_nor_seq_io_mode_t data_phase_format
Definition: hpm_serial_nor_host.h:107
hpm_serial_nor_seq_io_mode_t addr_phase_format
Definition: hpm_serial_nor_host.h:108
uint8_t read_cmd
Definition: hpm_serial_nor_host.h:104
uint8_t data_dummy_count
Definition: hpm_serial_nor_host.h:105
operation of serial nor flash host
Definition: hpm_serial_nor_host.h:169
void * user_data
Definition: hpm_serial_nor_host.h:178