1 /* 2 * Copyright (c) 2016, Freescale Semiconductor, Inc. 3 * Copyright 2016-2021 NXP 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #ifndef _MX25R_FLASH_H_ 10 #define _MX25R_FLASH_H_ 11 12 #include <stdbool.h> 13 #include <stdint.h> 14 #include <stdio.h> 15 16 typedef enum mx25r_err 17 { 18 mx25r_err_ok = 0, 19 mx25r_err_out_of_range, 20 mx25r_err_alignement, 21 } mx25r_err_t; 22 23 typedef void (*transfer_cb_t)(void *transfer_prv, uint8_t *tx_data, uint8_t *rx_data, size_t dataSize, bool eof); 24 25 struct mx25r_instance 26 { 27 void *prv; 28 transfer_cb_t callback; 29 uint8_t cmd[5]; 30 }; 31 32 #if defined(__GNUC__) 33 #else 34 __packed 35 #endif 36 struct mx25r_rdid_result 37 { 38 char manufacturer; 39 char device[2]; 40 #if defined(__GNUC__) 41 } __attribute__((packed)); 42 #else 43 }; 44 #endif 45 46 #if defined(__GNUC__) 47 #else 48 __packed 49 #endif 50 struct mx25r_rdsr_result 51 { 52 char sr0; 53 char sr1; 54 #if defined(__GNUC__) 55 } __attribute__((packed)); 56 #else 57 }; 58 #endif 59 60 #if defined(__GNUC__) 61 #else 62 __packed 63 #endif 64 struct mx25r_read_result 65 { 66 uint32_t word[4]; 67 #if defined(__GNUC__) 68 } __attribute__((packed)); 69 #else 70 }; 71 #endif 72 73 union mx25r_result 74 { 75 struct mx25r_rdid_result rdid; 76 struct mx25r_rdsr_result rdsr; 77 struct mx25r_read_result read; 78 }; 79 80 mx25r_err_t mx25r_init(struct mx25r_instance *instance, transfer_cb_t callback, void *callback_prv); 81 mx25r_err_t mx25r_cmd_rdid(struct mx25r_instance *instance, struct mx25r_rdid_result *result); 82 mx25r_err_t mx25r_cmd_read(struct mx25r_instance *instance, uint32_t address, uint8_t *buffer, uint32_t size); 83 mx25r_err_t mx25r_cmd_nop(struct mx25r_instance *instance); 84 mx25r_err_t mx25r_cmd_rdsr(struct mx25r_instance *instance, struct mx25r_rdsr_result *result); 85 mx25r_err_t mx25r_cmd_wrdi(struct mx25r_instance *instance); 86 mx25r_err_t mx25r_cmd_wren(struct mx25r_instance *instance); 87 mx25r_err_t mx25r_cmd_write(struct mx25r_instance *instance, 88 uint32_t address_256_align, 89 uint8_t *buffer, 90 uint32_t size_256_max); 91 mx25r_err_t mx25r_cmd_sector_erase(struct mx25r_instance *instance, uint32_t address); 92 93 #endif 94