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