542 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			542 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * @brief LPC13xx Flash/EEPROM programming driver | ||
|  |  * | ||
|  |  * @note | ||
|  |  * Copyright(C) NXP Semiconductors, 2012 | ||
|  |  * All rights reserved. | ||
|  |  * | ||
|  |  * @par | ||
|  |  * Software that is described herein is for illustrative purposes only | ||
|  |  * which provides customers with programming information regarding the | ||
|  |  * LPC products.  This software is supplied "AS IS" without any warranties of | ||
|  |  * any kind, and NXP Semiconductors and its licensor disclaim any and | ||
|  |  * all warranties, express or implied, including all implied warranties of | ||
|  |  * merchantability, fitness for a particular purpose and non-infringement of | ||
|  |  * intellectual property rights.  NXP Semiconductors assumes no responsibility | ||
|  |  * or liability for the use of the software, conveys no license or rights under any | ||
|  |  * patent, copyright, mask work right, or any other intellectual property rights in | ||
|  |  * or to any products. NXP Semiconductors reserves the right to make changes | ||
|  |  * in the software without notification. NXP Semiconductors also makes no | ||
|  |  * representation or warranty that such application will be suitable for the | ||
|  |  * specified use without further testing or modification. | ||
|  |  * | ||
|  |  * @par | ||
|  |  * Permission to use, copy, modify, and distribute this software and its | ||
|  |  * documentation is hereby granted, under NXP Semiconductors' and its | ||
|  |  * licensor's relevant copyrights in the software, without fee, provided that it | ||
|  |  * is used in conjunction with NXP Semiconductors microcontrollers.  This | ||
|  |  * copyright, permission, and disclaimer notice must appear in all copies of | ||
|  |  * this code. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef __FLASH_EEPROM_13XX_H_
 | ||
|  | #define __FLASH_EEPROM_13XX_H_
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /** @defgroup FLASH_EEPROM_13XX CHIP: LPC13xx FLASH/EEPROM Programming driver
 | ||
|  |  * @ingroup CHIP_13XX_Drivers | ||
|  |  * @{ | ||
|  |  */ | ||
|  | 
 | ||
|  | #if defined(CHIP_LPC1347)
 | ||
|  | #define ERASE_PAGE_SUPPORT
 | ||
|  | #define EEPROM_RW_SUPPORT
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /** Flash Programming Entry Location */ | ||
|  | #define FLASH_ENTRY_LOCATION    (0x1fff1ff1)
 | ||
|  | 
 | ||
|  | /** The maximum number of flash programing parameters */ | ||
|  | #define FLASH_PARAMETER_NUM     (5)
 | ||
|  | 
 | ||
|  | /** The maximum number of flash programing results */ | ||
|  | #define FLASH_RESULT_NUM        (4)
 | ||
|  | 
 | ||
|  | /** Flash programming function type */ | ||
|  | typedef void (*FLASH_ENTRY_T)(unsigned int[], unsigned int[]); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Flash command code definitions | ||
|  |  */ | ||
|  | typedef enum { | ||
|  | 	FLASH_PREPARE = 50,				/*!< Prepare sector(s) for write operation */ | ||
|  | 	FLASH_COPY_RAM_TO_FLASH = 51,	/*!< Copy RAM to Flash */ | ||
|  | 	FLASH_ERASE = 52,				/*!< Erase sector(s) */ | ||
|  | 	FLASH_BLANK_CHECK = 53,			/*!< Blank check sector(s) */ | ||
|  | 	FLASH_READ_PART_ID = 54,		/*!< Read chip part ID */ | ||
|  | 	FLASH_READ_BOOT_VER = 55,		/*!< Read chip boot code version */ | ||
|  | 	FLASH_COMPARE = 56,				/*!< Compare memory areas */ | ||
|  | 	FLASH_REINVOKE_ISP = 57,		/*!< Reinvoke ISP */ | ||
|  | 	FLASH_READ_UID = 58,			/*!< Read UID */ | ||
|  | #if defined(ERASE_PAGE_SUPPORT)
 | ||
|  | 	FLASH_ERASE_PAGE = 59,			/*!< Erase page */ | ||
|  | #endif
 | ||
|  | #if defined(EEPROM_RW_SUPPORT)
 | ||
|  | 	FLASH_EEPROM_WRITE = 61,		/*!< EEPROM Write */ | ||
|  | 	FLASH_EEPROM_READ = 62,			/*!< EEPROM Read */ | ||
|  | #endif
 | ||
|  | }  FLASH_CMD_CODE_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Flash status code definitions | ||
|  |  */ | ||
|  | typedef enum { | ||
|  | 	CMD_SUCCESS,				/*!< Command is executed successfully. */ | ||
|  | 	INVALID_COMMAND,			/*!< Invalid command. */ | ||
|  | 	SRC_ADDR_ERROR,				/*!< Source address is not on a word boundary. */ | ||
|  | 	DST_ADDR_ERROR,				/*!< Destination address is not on a correct boundary. */ | ||
|  | 	SRC_ADDR_NOT_MAPPED,		/*!< Source address is not mapped in the memory map. */ | ||
|  | 	DST_ADDR_NOT_MAPPED,		/*!< Destination address is not mapped in the memory map. */ | ||
|  | 	COUNT_ERROR,				/*!< Byte count is not multiple of 4 or is not a permitted value. */ | ||
|  | 	INVALID_SECTOR,				/*!< Sector number is invalid. */ | ||
|  | 	SECTOR_NOT_BLANK,				/*!< Sector is not blank. */ | ||
|  | 	SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION,	/*!< Command to prepare sector for write operation was not executed. */ | ||
|  | 	COMPARE_ERROR,				/*!< Source and destination data is not same. */ | ||
|  | 	BUSY,						/*!< Flash programming hardware interface is busy. */ | ||
|  | } FLASH_STATUS_CODE_T; | ||
|  | 
 | ||
|  | #if defined(EEPROM_RW_SUPPORT)
 | ||
|  | /** EEPROM size */ | ||
|  | #define EEPROM_SIZE                 (4 << 10)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;			/*!< Command code */ | ||
|  | 	uint32_t pParams[FLASH_PARAMETER_NUM];	/*!< Parameters*/ | ||
|  | } FLASH_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;		/*!< Status code */ | ||
|  | 	uint32_t pResult[FLASH_RESULT_NUM];		/*!< Results*/ | ||
|  | } FLASH_OUTPUT_T; | ||
|  | 
 | ||
|  | /* Flash Programming Command Description
 | ||
|  |    Command                  Parameters              Return Code                                 Result | ||
|  |    ---------------------------------------------------------------------------------------------------------- | ||
|  |    FLASH_PREPARE            Start Sector Number     CMD_SUCCESS                                 None | ||
|  |                             End Sector Number       BUSY | ||
|  |                                                     INVALID_SECTOR | ||
|  |    FLASH_COPY_RAM2FLASH     Destination Flash Addr  CMD_SUCCESS                                 None | ||
|  |                             Source RAM Addr         SRC_ADDR_ERROR | ||
|  |                             Number of bytes written SRC_ADDR_NOT_MAPPED | ||
|  |                             CCLK in kHz             DST_ADDR_NOT_MAPPED | ||
|  |                                                     COUNT_ERROR | ||
|  |                                                     SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | ||
|  |                                                     BUSY | ||
|  |    FLASH_ERASE              Start Sector Number     CMD_SUCCESS                                 None | ||
|  |                             Emd Sector Number       BUSY | ||
|  |                             CCLK in kHz             SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | ||
|  |                                                     INVALID_SECTOR | ||
|  |    FLASH_BLANK_CHECK        Start Sector Number     CMD_SUCCESS                                 Non Blank Sector Offset(if Status code is SECTOR_NOT_BLANK) | ||
|  |                             End Sector Number       BUSY                                        Content of non blank word location | ||
|  |                                                     SECTOR_NOT_BLANK | ||
|  |                                                     INVALID_SECTOR | ||
|  |    FLASH_READ_PART_ID       None                    CMD_SUCCESS                                 Part ID | ||
|  |    FLASH_READ_BOOT_VER      None                    CMD_SUCCESS                                 <byte1(Major)>.<byte0(Minor)> | ||
|  |    FLASH_COMPARE            Destination Addr        CMD_SUCCESS                                 Offset of the first mismatch | ||
|  |                             Source Address          COMPARE_ERROR | ||
|  |                             Number of bytes compared COUNT_ERROR | ||
|  |                                                     ADDR_ERROR | ||
|  |                                                     ADDR_NOT_MAPPED | ||
|  |    FLASH_REINVOKE_ISP       None                    None                                        None | ||
|  |    FLASH_READ_UID           None                    CMD_SUCCESS                                 The first 32-bit word | ||
|  |                                                                                                 The second 32-bit word. | ||
|  |                                                                                                 The third 32-bit word. | ||
|  |                                                                                                 The fourth 32-bit word | ||
|  |    FLASH_ERASE_PAGE         Start Page Number       CMD_SUCCESS                                 None | ||
|  |                             End Page Number         BUSY | ||
|  |                             CCLK in kHz             SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION | ||
|  |                                                     INVALID_SECTOR | ||
|  |    FLASH_EEPROM_WRITE       EEPROM Addr             CMD_SUCCESS                                 None | ||
|  |                             RAM Addr                SRC_ADDR_NOT_MAPPED | ||
|  |                             Number of bytes written DST_ADDR_NOT_MAPPED | ||
|  |                             CCLK in kHz | ||
|  |    FLASH_EEPROM_READ        EEPROM Addr             CMD_SUCCESS                                 None | ||
|  |                             RAM Addr                SRC_ADDR_NOT_MAPPED | ||
|  |                             Number of bytes read    DST_ADDR_NOT_MAPPED | ||
|  |                             CCLK in kHz | ||
|  |  */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Prepare sectors] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t start;		/*!< Start Sector Number */ | ||
|  | 	uint32_t end;		/*!<End Sector Number (should be greater than or equal to start sector number).*/ | ||
|  | } FLASH_PREPARE_SECTORS_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Prepare sectors] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;			/*!< Status code */ | ||
|  | } FLASH_PREPARE_SECTORS_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Copy Ram to Flash] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t dst;		/*!< Destination flash address where data bytes are to be written (256 byte boundary) */ | ||
|  | 	uint32_t src;		/*!<Source RAM address from which data bytes are to be read (a word boudary).*/ | ||
|  | 	uint32_t byteNum;	/*!<Number of bytes to be written. Should be 256 | 512 | 1024 | 4096.*/ | ||
|  | 	uint32_t cclk;		/*!<System Clock Frequency (CCLK) in kHz.*/ | ||
|  | } FLASH_COPY_RAM_TO_FLASH_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Copy Ram to Flash] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;			/*!< Status code */ | ||
|  | } FLASH_COPY_RAM_TO_FLASH_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Erase Sector(s)] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t start;		/*!< Start Sector Number */ | ||
|  | 	uint32_t end;		/*!<End Sector Number (should be greater than or equal to start sector number).*/ | ||
|  | 	uint32_t cclk;		/*!<System Clock Frequency (CCLK) in kHz.*/ | ||
|  | } FLASH_ERASE_SECTORS_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Erase Sector(s)] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;			/*!< Status code */ | ||
|  | } FLASH_ERASE_SECTORS_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Blank check sector(s)] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t start;		/*!< Start Sector Number */ | ||
|  | 	uint32_t end;		/*!<End Sector Number (should be greater than or equal to start sector number).*/ | ||
|  | } FLASH_BLANK_CHECK_SECTORS_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Blank check sector(s)] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;			/*!< Status code */ | ||
|  | 	uint32_t firstNonBlankLoc;	/*!< Offset of the first non blank word location if the Status Code is SECTOR_NOT_BLANK.*/ | ||
|  | 	uint32_t firstNonBlankVal;	/*!<Contents of non blank word location.*/ | ||
|  | } FLASH_BLANK_CHECK_SECTORS_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read Part Identification number] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | } FLASH_READ_PART_ID_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read Part Identification number] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | 	uint32_t partID;	/*!< Part Identification Number*/ | ||
|  | } FLASH_READ_PART_ID_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read Boot code version number] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | } FLASH_READ_BOOTCODE_VER_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read Boot code version number] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | 	uint8_t minor;		/*!< Minor*/ | ||
|  | 	uint8_t major;		/*!< Major*/ | ||
|  | } FLASH_READ_BOOTCODE_VER_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Compare memory] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t dst;		/*!<Starting flash or RAM address of data bytes to be compared (a word boundary) */ | ||
|  | 	uint32_t src;		/*!<Starting flash or RAM address of data bytes to be compared (a word boudary).*/ | ||
|  | 	uint32_t byteNum;	/*!<Number of bytes to be compared; should be a multiple of 4.*/ | ||
|  | } FLASH_COMPARE_MEM_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Compare memory] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | 	uint32_t offset;	/*!< Offset of the first mismatch if the Status Code is COMPARE_ERROR.*/ | ||
|  | } FLASH_COMPARE_MEM_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Reinvoke ISP] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | } FLASH_REINVOKE_ISP_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Reinvoke ISP] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | } FLASH_REINVOKE_ISP_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [ReadUID] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | } FLASH_READ_UID_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [ReadUID] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | 	uint32_t id[4];		/*!< UID*/ | ||
|  | } FLASH_READ_UID_OUTPUT_T; | ||
|  | 
 | ||
|  | #if defined(ERASE_PAGE_SUPPORT)
 | ||
|  | /**
 | ||
|  |  * @brief [Erase page(s)] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t start;		/*!< Start Page Number */ | ||
|  | 	uint32_t end;		/*!<End Page Number (should be greater than or equal to start page number).*/ | ||
|  | 	uint32_t cclk;		/*!<System Clock Frequency (CCLK) in kHz.*/ | ||
|  | } FLASH_ERASE_PAGES_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Erase page(s)] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | } FLASH_ERASE_PAGES_OUTPUT_T; | ||
|  | 
 | ||
|  | #endif /* defined(ERASE_PAGE_SUPPORT) */
 | ||
|  | 
 | ||
|  | #if defined(EEPROM_RW_SUPPORT)
 | ||
|  | /**
 | ||
|  |  * @brief [Write EEPROM] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;			/*!< Command code */ | ||
|  | 	uint32_t eepromAddr;	/*!< EEPROM address.*/ | ||
|  | 	uint32_t ramAddr;		/*!< RAM address.*/ | ||
|  | 	uint32_t byteNum;		/*!<Number of bytes to be written.*/ | ||
|  | 	uint32_t cclk;			/*!<System Clock Frequency (CCLK) in kHz.*/ | ||
|  | } EEPROM_WRITE_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Write EEPROM] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | } EEPROM_WRITE_OUTPUT_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read EEPROM] command parameter table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t cmd;		/*!< Command code */ | ||
|  | 	uint32_t eepromAddr;	/*!< EEPROM address.*/ | ||
|  | 	uint32_t ramAddr;		/*!< RAM address.*/ | ||
|  | 	uint32_t byteNum;		/*!<Number of bytes to be written.*/ | ||
|  | 	uint32_t cclk;			/*!<System Clock Frequency (CCLK) in kHz.*/ | ||
|  | } EEPROM_READ_COMMAND_T; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief [Read EEPROM] command result table structure | ||
|  |  */ | ||
|  | typedef struct { | ||
|  | 	uint32_t status;	/*!< Status code */ | ||
|  | } EEPROM_READ_OUTPUT_T; | ||
|  | 
 | ||
|  | #endif /* defined(EEPROM_RW_SUPPORT) */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Get sector number of the specified address | ||
|  |  * @param	adr		: flash address. | ||
|  |  * @return	sector number | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_FLASH_GetSecNum(uint32_t adr) | ||
|  | { | ||
|  | 	return adr >> 12; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Execute flash programming command | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_Execute(FLASH_COMMAND_T *pCommand, FLASH_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	((FLASH_ENTRY_T) FLASH_ENTRY_LOCATION)((unsigned int *) pCommand, (unsigned int *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Prepare sector(s) for write operation | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  * @note	This command must be executed before executing "Copy RAM to flash" or "Erase Sector(s)" command. <br> | ||
|  |  *			The boot sector can not be prepared by this command. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_PrepareSectors(FLASH_PREPARE_SECTORS_COMMAND_T *pCommand, | ||
|  | 											 FLASH_PREPARE_SECTORS_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Copy RAM to flash | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  * @note	The affected sectors should be prepared first by calling "Prepare Sector for Write Operation" command.<br> | ||
|  |  *		The boot sector can not be written by this command. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_CopyRamToFlash(FLASH_COPY_RAM_TO_FLASH_COMMAND_T *pCommand, | ||
|  | 											 FLASH_COPY_RAM_TO_FLASH_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Erase Sector(s) | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  * @note	 The boot sector can not be erased by this command. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_EraseSectors(FLASH_ERASE_SECTORS_COMMAND_T *pCommand, | ||
|  | 										   FLASH_ERASE_SECTORS_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Blank check sector(s) | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_BlankCheckSectors(FLASH_BLANK_CHECK_SECTORS_COMMAND_T *pCommand, | ||
|  | 												FLASH_BLANK_CHECK_SECTORS_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read Part Identification number | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_FLASH_ReadPartID(FLASH_READ_PART_ID_OUTPUT_T *pOutput); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read Boot code version number | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_FLASH_ReadBootCodeVersion(FLASH_READ_BOOTCODE_VER_OUTPUT_T *pOutput); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Compare memory | ||
|  |  * @param	pCommand	: parameters | ||
|  |  * @param	pOutput	: results | ||
|  |  * @return	Nothing | ||
|  |  * @note	The result may not be correct when the source or destination includes any | ||
|  |  * of the first 512 bytes starting from address zero. The first 512 bytes can be re-mapped to RAM. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_CompareMem(FLASH_COMPARE_MEM_COMMAND_T *pCommand, | ||
|  | 										 FLASH_COMPARE_MEM_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Reinvoke ISP | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_FLASH_ReInvokeISP(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read UID | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_FLASH_ReadUID(FLASH_READ_UID_OUTPUT_T *pOutput); | ||
|  | 
 | ||
|  | #if defined(ERASE_PAGE_SUPPORT)
 | ||
|  | /**
 | ||
|  |  * @brief	Erase Page(s) | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_FLASH_ErasePages(FLASH_ERASE_PAGES_COMMAND_T *pCommand, | ||
|  | 										 FLASH_ERASE_PAGES_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | #endif /* defined(ERASE_PAGE_SUPPORT) */
 | ||
|  | 
 | ||
|  | #if defined(EEPROM_RW_SUPPORT)
 | ||
|  | /**
 | ||
|  |  * @brief	Write EEPROM | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  * @note		The top 64 bytes of the EEPROM memory are reserved and cannot be written to. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_EEPROM_Write(EEPROM_WRITE_COMMAND_T *pCommand, | ||
|  | 									 EEPROM_WRITE_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read EEPROM | ||
|  |  * @param	pCommand	: Command information | ||
|  |  * @param	pOutput	: Output information | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_EEPROM_Read(EEPROM_READ_COMMAND_T *pCommand, | ||
|  | 									EEPROM_READ_OUTPUT_T *pOutput) | ||
|  | { | ||
|  | 	Chip_FLASH_Execute((FLASH_COMMAND_T *) pCommand, (FLASH_OUTPUT_T *) pOutput); | ||
|  | } | ||
|  | 
 | ||
|  | #endif /*defined(EEPROM_RW_SUPPORT)*/
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @} | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* __FLASH_EEPROM_13XX_H_ */
 |