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_ */
							 |