1 /* 2 * Copyright 2022 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 #ifndef __SPI_MEM_ADAPTER_H__ 8 #define __SPI_MEM_ADAPTER_H__ 9 10 #include "fsl_common.h" 11 12 /******************************************************************************* 13 * Definitions 14 ******************************************************************************/ 15 //!@brief SPI Master Configuration for Adapter 16 typedef struct 17 { 18 uint32_t whichPcs; //!< PCS index 19 uint32_t clockFreq; //!< Clock requency for SPI 20 uint32_t baudRate; //!< Baudrate for SPI 21 } spi_master_config_t; 22 23 //!@brief SPI Memory transfer mode defintions 24 typedef enum _spi_mem_xfer_mode 25 { 26 kSpiMem_Xfer_CommandOnly, //!< Command Only 27 kSpiMem_Xfer_CommandWriteData, //!< Command then Write Data 28 kSpiMem_Xfer_CommandReadData, //!< Comamdn then Read Data 29 } spi_mem_xfer_mode_t; 30 31 //!@brief SPI Memory Transfer Context 32 typedef struct __spi_mem_xfer 33 { 34 uint8_t *cmd; //!< Command buffer 35 uint8_t *data; //!< Data Buffer 36 size_t cmdSize; //!< Command buffer size 37 size_t dataSize; //!< Data buffer size 38 spi_mem_xfer_mode_t mode; //!< Transfer mode 39 } spi_mem_xfer_t; 40 41 //!@brief Flash ID definition 42 typedef struct _flash_id 43 { 44 uint8_t mid; //!< Manufacturer Identifier 45 uint8_t did[2]; //!< Device Identifier 46 uint8_t reserved[17]; 47 } flash_id_t; 48 49 typedef enum 50 { 51 kSpiIomux_SpiMode, 52 kSpiIomux_DefaultMode 53 } spi_pin_mode_t; 54 55 typedef enum 56 { 57 kSpiClockMode_Spi, 58 kSpiClockMode_Default 59 } spi_clock_mode_t; 60 61 typedef enum 62 { 63 kSize_ErasePage = 0x1, 64 kSize_Erase4K = 0x2, 65 kSize_Erase32K = 0x3, 66 kSize_Erase64K = 0x4, 67 kSize_EraseAll = 0x5, 68 } eraseOptions_t; 69 70 /******************************************************************************* 71 * API 72 ******************************************************************************/ 73 74 #if defined(__cplusplus) 75 extern "C" { 76 #endif /* __cplusplus */ 77 78 //!@brief Initialize SPI Memory 79 status_t LPSPI_MemInit(spi_master_config_t *config, LPSPI_Type *base); 80 81 //!@brief Issue SPI Memory Transfer 82 status_t LPSPI_MemXfer(spi_mem_xfer_t *xfer, LPSPI_Type *base); 83 84 //!@brief Read SPI Memory ID 85 status_t LPSPI_MemReadId(flash_id_t *flashId, LPSPI_Type *base); 86 87 //!@brief Read Data from SPI Memory 88 status_t LPSPI_MemRead(uint32_t addr, uint8_t *buffer, uint32_t lengthInBytes, bool isFastRead, LPSPI_Type *base); 89 90 //!@brief Enable SPI flash writes 91 status_t LPSPI_MemWriteEnable(LPSPI_Type *base); 92 93 //!@brief Write Data to SPI Memory 94 status_t LPSPI_MemWritePage(uint32_t addr, uint8_t *buffer, uint32_t lengthInBytes, bool blocking, LPSPI_Type *base); 95 96 //!@brief Erase data from SPI Memory to 0xFF 97 status_t LPSPI_MemErase(uint32_t addr, eraseOptions_t option, bool blocking, LPSPI_Type *base); 98 99 //!@brief Get the busy status of the NOR flash. 100 status_t LPSPI_MemIsBusy(LPSPI_Type *base, bool *isBusy); 101 102 //!@brief Deinitialize the SPI memory 103 status_t LPSPI_MemDeinit(LPSPI_Type *base); 104 105 #if defined(__cplusplus) 106 } 107 #endif /* __cplusplus */ 108 109 #endif // SPI_ADAPTER_H__ 110