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