154 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			154 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/**********************************************************************
							 | 
						||
| 
								 | 
							
								* $Id$      lpc17xx_iap.h           2012-04-18
							 | 
						||
| 
								 | 
							
								*//**
							 | 
						||
| 
								 | 
							
								* @file     lpc17xx_iap.h
							 | 
						||
| 
								 | 
							
								* @brief    Contains all functions support for IAP
							 | 
						||
| 
								 | 
							
								*           on lpc17xx
							 | 
						||
| 
								 | 
							
								* @version  1.0
							 | 
						||
| 
								 | 
							
								* @date     18. April. 2012
							 | 
						||
| 
								 | 
							
								* @author   NXP MCU SW Application Team
							 | 
						||
| 
								 | 
							
								* 
							 | 
						||
| 
								 | 
							
								* Copyright(C) 2011, NXP Semiconductor
							 | 
						||
| 
								 | 
							
								* All rights reserved.
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								***********************************************************************
							 | 
						||
| 
								 | 
							
								* Software that is described herein is for illustrative purposes only
							 | 
						||
| 
								 | 
							
								* which provides customers with programming information regarding the
							 | 
						||
| 
								 | 
							
								* products. This software is supplied "AS IS" without any warranties.
							 | 
						||
| 
								 | 
							
								* NXP Semiconductors assumes no responsibility or liability for the
							 | 
						||
| 
								 | 
							
								* use of the software, conveys no license or title under any patent,
							 | 
						||
| 
								 | 
							
								* copyright, or mask work right to the product. NXP Semiconductors
							 | 
						||
| 
								 | 
							
								* reserves the right to make changes in the software without
							 | 
						||
| 
								 | 
							
								* notification. NXP Semiconductors also make no representation or
							 | 
						||
| 
								 | 
							
								* warranty that such application will be suitable for the specified
							 | 
						||
| 
								 | 
							
								* use without further testing or modification.
							 | 
						||
| 
								 | 
							
								* Permission to use, copy, modify, and distribute this software and its
							 | 
						||
| 
								 | 
							
								* documentation is hereby granted, under NXP Semiconductors'
							 | 
						||
| 
								 | 
							
								* relevant copyright 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 _LPC17xx_IAP_H
							 | 
						||
| 
								 | 
							
								#define _LPC17xx_IAP_H
							 | 
						||
| 
								 | 
							
								#include "lpc_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @defgroup IAP   IAP (In Application Programming)
							 | 
						||
| 
								 | 
							
								 * @ingroup LPC1700CMSIS_FwLib_Drivers
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @defgroup IAP_Public_Macros IAP Public Macros
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** IAP entry location */
							 | 
						||
| 
								 | 
							
								#define IAP_LOCATION              (0x1FFF1FF1UL)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @defgroup IAP_Public_Types IAP Public Types
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief IAP command code definitions
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef enum
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    IAP_PREPARE = 50,       // Prepare sector(s) for write operation
							 | 
						||
| 
								 | 
							
								    IAP_COPY_RAM2FLASH = 51,     // Copy RAM to Flash
							 | 
						||
| 
								 | 
							
								    IAP_ERASE = 52,              // Erase sector(s)
							 | 
						||
| 
								 | 
							
								    IAP_BLANK_CHECK = 53,        // Blank check sector(s)
							 | 
						||
| 
								 | 
							
								    IAP_READ_PART_ID = 54,       // Read chip part ID
							 | 
						||
| 
								 | 
							
								    IAP_READ_BOOT_VER = 55,      // Read chip boot code version
							 | 
						||
| 
								 | 
							
								    IAP_COMPARE = 56,            // Compare memory areas
							 | 
						||
| 
								 | 
							
								    IAP_REINVOKE_ISP = 57,       // Reinvoke ISP
							 | 
						||
| 
								 | 
							
								    IAP_READ_SERIAL_NUMBER = 58, // Read serial number
							 | 
						||
| 
								 | 
							
								}  IAP_COMMAND_CODE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief IAP 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.
							 | 
						||
| 
								 | 
							
								} IAP_STATUS_CODE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief IAP write length definitions
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								  IAP_WRITE_256  = 256,
							 | 
						||
| 
								 | 
							
								  IAP_WRITE_512  = 512,
							 | 
						||
| 
								 | 
							
								  IAP_WRITE_1024 = 1024,
							 | 
						||
| 
								 | 
							
								  IAP_WRITE_4096 = 4096,
							 | 
						||
| 
								 | 
							
								} IAP_WRITE_SIZE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief IAP command structure
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;   // Command
							 | 
						||
| 
								 | 
							
								    uint32_t param[4];      // Parameters
							 | 
						||
| 
								 | 
							
								    uint32_t status;        // status code
							 | 
						||
| 
								 | 
							
								    uint32_t result[4];     // Result
							 | 
						||
| 
								 | 
							
								} IAP_COMMAND_Type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								/* Public Functions ----------------------------------------------------------- */
							 | 
						||
| 
								 | 
							
								/** @defgroup IAP_Public_Functions IAP Public Functions
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**  Get sector number of an address */
							 | 
						||
| 
								 | 
							
								uint32_t GetSecNum (uint32_t adr);
							 | 
						||
| 
								 | 
							
								/**  Prepare sector(s) for write operation */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE PrepareSector(uint32_t start_sec, uint32_t end_sec);
							 | 
						||
| 
								 | 
							
								/**  Copy RAM to Flash */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE CopyRAM2Flash(uint8_t * dest, uint8_t* source, IAP_WRITE_SIZE size);
							 | 
						||
| 
								 | 
							
								/**  Prepare sector(s) for write operation */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE EraseSector(uint32_t start_sec, uint32_t end_sec);
							 | 
						||
| 
								 | 
							
								/**  Blank check sectors */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE BlankCheckSector(uint32_t start_sec, uint32_t end_sec,
							 | 
						||
| 
								 | 
							
								                                 uint32_t *first_nblank_loc, 
							 | 
						||
| 
								 | 
							
								                                 uint32_t *first_nblank_val);
							 | 
						||
| 
								 | 
							
								/**  Read part identification number */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE ReadPartID(uint32_t *partID);
							 | 
						||
| 
								 | 
							
								/**  Read boot code version */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE ReadBootCodeVer(uint8_t *major, uint8_t* minor);
							 | 
						||
| 
								 | 
							
								/**  Read Device serial number */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE ReadDeviceSerialNum(uint32_t *uid);
							 | 
						||
| 
								 | 
							
								/**  Compare memory */
							 | 
						||
| 
								 | 
							
								IAP_STATUS_CODE Compare(uint8_t *addr1, uint8_t *addr2, uint32_t size);
							 | 
						||
| 
								 | 
							
								/**  Invoke ISP */
							 | 
						||
| 
								 | 
							
								void InvokeISP(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /*_LPC17xx_IAP_H*/
							 | 
						||
| 
								 | 
							
								
							 |