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