XCORE SDK
XCORE Software Development Kit
rtos_qspi_flash.h
1 // Copyright 2020-2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_QSPI_FLASH_H_
5 #define RTOS_QSPI_FLASH_H_
6 
14 #include "qspi_flash.h"
15 
16 #include "rtos_osal.h"
17 #include "rtos_driver_rpc.h"
18 
19 #define RTOS_QSPI_FLASH_READ_CHUNK_SIZE (24*1024)
20 
25 
32  rtos_driver_rpc_t *rpc_config;
33 
34  __attribute__((fptrgroup("rtos_qspi_flash_read_fptr_grp")))
35  void (*read)(rtos_qspi_flash_t *, uint8_t *, unsigned, size_t);
36 
37  __attribute__((fptrgroup("rtos_qspi_flash_write_fptr_grp")))
38  void (*write)(rtos_qspi_flash_t *, const uint8_t *, unsigned, size_t);
39 
40  __attribute__((fptrgroup("rtos_qspi_flash_erase_fptr_grp")))
41  void (*erase)(rtos_qspi_flash_t *, unsigned, size_t);
42 
43  __attribute__((fptrgroup("rtos_qspi_flash_lock_fptr_grp")))
44  void (*lock)(rtos_qspi_flash_t *);
45 
46  __attribute__((fptrgroup("rtos_qspi_flash_unlock_fptr_grp")))
47  void (*unlock)(rtos_qspi_flash_t *);
48 
49  qspi_flash_ctx_t ctx;
50  size_t flash_size;
51 
52  unsigned op_task_priority;
53  rtos_osal_thread_t op_task;
54  rtos_osal_queue_t op_queue;
55  rtos_osal_semaphore_t data_ready;
56  rtos_osal_mutex_t mutex;
57  volatile int spinlock;
58 };
59 
60 #include "rtos_qspi_flash_rpc.h"
61 
88  rtos_qspi_flash_t *ctx)
89 {
90  ctx->lock(ctx);
91 }
92 
100  rtos_qspi_flash_t *ctx)
101 {
102  ctx->unlock(ctx);
103 }
104 
120  rtos_qspi_flash_t *ctx,
121  uint8_t *data,
122  unsigned address,
123  size_t len)
124 {
125  ctx->read(ctx, data, address, len);
126 }
127 
155  rtos_qspi_flash_t *ctx,
156  uint8_t *data,
157  unsigned address,
158  size_t len);
159 
185  rtos_qspi_flash_t *ctx,
186  const uint8_t *data,
187  unsigned address,
188  size_t len)
189 {
190  ctx->write(ctx, data, address, len);
191 }
192 
218  rtos_qspi_flash_t *ctx,
219  unsigned address,
220  size_t len)
221 {
222  ctx->erase(ctx, address, len);
223 }
224 
233  rtos_qspi_flash_t *qspi_flash_ctx)
234 {
235  return qspi_flash_ctx->flash_size;
236 }
237 
246  rtos_qspi_flash_t *qspi_flash_ctx)
247 {
248  return qspi_flash_ctx->ctx.page_size_bytes;
249 }
250 
259  rtos_qspi_flash_t *qspi_flash_ctx)
260 {
261  return qspi_flash_ctx->ctx.page_count;
262 }
263 
272  rtos_qspi_flash_t *qspi_flash_ctx)
273 {
274  return qspi_flash_erase_type_size(&qspi_flash_ctx->ctx, qspi_flash_erase_1);
275 }
276 
292  rtos_qspi_flash_t *ctx,
293  unsigned priority);
294 
347  rtos_qspi_flash_t *ctx,
348  xclock_t clock_block,
349  port_t cs_port,
350  port_t sclk_port,
351  port_t sio_port,
352  qspi_io_source_clock_t source_clock,
353  int full_speed_clk_divisor,
354  uint32_t full_speed_sclk_sample_delay,
355  qspi_io_sample_edge_t full_speed_sclk_sample_edge,
356  uint32_t full_speed_sio_pad_delay,
357  int spi_read_clk_divisor,
358  uint32_t spi_read_sclk_sample_delay,
359  qspi_io_sample_edge_t spi_read_sclk_sample_edge,
360  uint32_t spi_read_sio_pad_delay,
361  qspi_flash_page_program_cmd_t quad_page_program_cmd);
362 
365 #endif /* RTOS_QSPI_FLASH_H_ */
qspi_flash_page_program_cmd_t
Definition: qspi_flash.h:28
@ qspi_flash_erase_1
Definition: qspi_flash.h:126
qspi_io_source_clock_t
Definition: qspi_io.h:33
qspi_io_sample_edge_t
Definition: qspi_io.h:25
void rtos_qspi_flash_erase(rtos_qspi_flash_t *ctx, unsigned address, size_t len)
Definition: rtos_qspi_flash.h:217
void rtos_qspi_flash_read(rtos_qspi_flash_t *ctx, uint8_t *data, unsigned address, size_t len)
Definition: rtos_qspi_flash.h:119
void rtos_qspi_flash_lock(rtos_qspi_flash_t *ctx)
Definition: rtos_qspi_flash.h:87
size_t rtos_qspi_flash_page_size_get(rtos_qspi_flash_t *qspi_flash_ctx)
Definition: rtos_qspi_flash.h:245
size_t rtos_qspi_flash_size_get(rtos_qspi_flash_t *qspi_flash_ctx)
Definition: rtos_qspi_flash.h:232
void rtos_qspi_flash_unlock(rtos_qspi_flash_t *ctx)
Definition: rtos_qspi_flash.h:99
int rtos_qspi_flash_read_ll(rtos_qspi_flash_t *ctx, uint8_t *data, unsigned address, size_t len)
Definition: rtos_qspi_flash.c:54
size_t rtos_qspi_flash_page_count_get(rtos_qspi_flash_t *qspi_flash_ctx)
Definition: rtos_qspi_flash.h:258
void rtos_qspi_flash_write(rtos_qspi_flash_t *ctx, const uint8_t *data, unsigned address, size_t len)
Definition: rtos_qspi_flash.h:184
size_t rtos_qspi_flash_sector_size_get(rtos_qspi_flash_t *qspi_flash_ctx)
Definition: rtos_qspi_flash.h:271
void rtos_qspi_flash_start(rtos_qspi_flash_t *ctx, unsigned priority)
Definition: rtos_qspi_flash.c:442
void rtos_qspi_flash_init(rtos_qspi_flash_t *ctx, xclock_t clock_block, port_t cs_port, port_t sclk_port, port_t sio_port, qspi_io_source_clock_t source_clock, int full_speed_clk_divisor, uint32_t full_speed_sclk_sample_delay, qspi_io_sample_edge_t full_speed_sclk_sample_edge, uint32_t full_speed_sio_pad_delay, int spi_read_clk_divisor, uint32_t spi_read_sclk_sample_delay, qspi_io_sample_edge_t spi_read_sclk_sample_edge, uint32_t spi_read_sio_pad_delay, qspi_flash_page_program_cmd_t quad_page_program_cmd)
Definition: rtos_qspi_flash.c:464
API for QSPI Flash.
Definition: qspi_flash.h:57
Definition: rtos_driver_rpc.h:23
Definition: rtos_qspi_flash.h:31