185 lines
7.8 KiB
C
185 lines
7.8 KiB
C
/*
|
|
* @brief Common IAP support functions
|
|
*
|
|
* @note
|
|
* Copyright(C) NXP Semiconductors, 2013
|
|
* 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 licenser 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 __IAP_H_
|
|
#define __IAP_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** @defgroup COMMON_IAP CHIP: Common Chip ISP/IAP commands and return codes
|
|
* @ingroup CHIP_Common
|
|
* @{
|
|
*/
|
|
|
|
/* IAP command definitions */
|
|
#define IAP_PREWRRITE_CMD 50 /*!< Prepare sector for write operation command */
|
|
#define IAP_WRISECTOR_CMD 51 /*!< Write Sector command */
|
|
#define IAP_ERSSECTOR_CMD 52 /*!< Erase Sector command */
|
|
#define IAP_BLANK_CHECK_SECTOR_CMD 53 /*!< Blank check sector */
|
|
#define IAP_REPID_CMD 54 /*!< Read PartID command */
|
|
#define IAP_READ_BOOT_CODE_CMD 55 /*!< Read Boot code version */
|
|
#define IAP_COMPARE_CMD 56 /*!< Compare two RAM address locations */
|
|
#define IAP_REINVOKE_ISP_CMD 57 /*!< Reinvoke ISP */
|
|
#define IAP_READ_UID_CMD 58 /*!< Read UID */
|
|
#define IAP_ERASE_PAGE_CMD 59 /*!< Erase page */
|
|
#define IAP_EEPROM_WRITE 61 /*!< EEPROM Write command */
|
|
#define IAP_EEPROM_READ 62 /*!< EEPROM READ command */
|
|
|
|
/* IAP response definitions */
|
|
#define IAP_CMD_SUCCESS 0 /*!< Command is executed successfully */
|
|
#define IAP_INVALID_COMMAND 1 /*!< Invalid command */
|
|
#define IAP_SRC_ADDR_ERROR 2 /*!< Source address is not on word boundary */
|
|
#define IAP_DST_ADDR_ERROR 3 /*!< Destination address is not on a correct boundary */
|
|
#define IAP_SRC_ADDR_NOT_MAPPED 4 /*!< Source address is not mapped in the memory map */
|
|
#define IAP_DST_ADDR_NOT_MAPPED 5 /*!< Destination address is not mapped in the memory map */
|
|
#define IAP_COUNT_ERROR 6 /*!< Byte count is not multiple of 4 or is not a permitted value */
|
|
#define IAP_INVALID_SECTOR 7 /*!< Sector number is invalid or end sector number is greater than start sector number */
|
|
#define IAP_SECTOR_NOT_BLANK 8 /*!< Sector is not blank */
|
|
#define IAP_SECTOR_NOT_PREPARED 9 /*!< Command to prepare sector for write operation was not executed */
|
|
#define IAP_COMPARE_ERROR 10 /*!< Source and destination data not equal */
|
|
#define IAP_BUSY 11 /*!< Flash programming hardware interface is busy */
|
|
#define IAP_PARAM_ERROR 12 /*!< nsufficient number of parameters or invalid parameter */
|
|
#define IAP_ADDR_ERROR 13 /*!< Address is not on word boundary */
|
|
#define IAP_ADDR_NOT_MAPPED 14 /*!< Address is not mapped in the memory map */
|
|
#define IAP_CMD_LOCKED 15 /*!< Command is locked */
|
|
#define IAP_INVALID_CODE 16 /*!< Unlock code is invalid */
|
|
#define IAP_INVALID_BAUD_RATE 17 /*!< Invalid baud rate setting */
|
|
#define IAP_INVALID_STOP_BIT 18 /*!< Invalid stop bit setting */
|
|
#define IAP_CRP_ENABLED 19 /*!< Code read protection enabled */
|
|
|
|
/* IAP_ENTRY API function type */
|
|
typedef void (*IAP_ENTRY_T)(unsigned int[5], unsigned int[4]);
|
|
|
|
/**
|
|
* @brief Prepare sector for write operation
|
|
* @param strSector : Start sector number
|
|
* @param endSector : End sector number
|
|
* @return Status code to indicate the command is executed successfully or not
|
|
* @note This command must be executed before executing "Copy RAM to flash"
|
|
* or "Erase Sector" command.
|
|
* The end sector must be greater than or equal to start sector number
|
|
*/
|
|
uint8_t Chip_IAP_PreSectorForReadWrite(uint32_t strSector, uint32_t endSector);
|
|
|
|
/**
|
|
* @brief Copy RAM to flash
|
|
* @param dstAdd : Destination flash address where data bytes are to be written
|
|
* @param srcAdd : Source flash address where data bytes are to be read
|
|
* @param byteswrt : Number of bytes to be written
|
|
* @return Status code to indicate the command is executed successfully or not
|
|
* @note The addresses should be a 256 byte boundary and the number of bytes
|
|
* should be 256 | 512 | 1024 | 4096
|
|
*/
|
|
uint8_t Chip_IAP_CopyRamToFlash(uint32_t dstAdd, uint32_t *srcAdd, uint32_t byteswrt);
|
|
|
|
/**
|
|
* @brief Erase sector
|
|
* @param strSector : Start sector number
|
|
* @param endSector : End sector number
|
|
* @return Status code to indicate the command is executed successfully or not
|
|
* @note The end sector must be greater than or equal to start sector number
|
|
*/
|
|
uint8_t Chip_IAP_EraseSector(uint32_t strSector, uint32_t endSector);
|
|
|
|
/**
|
|
* @brief Blank check a sector or multiples sector of on-chip flash memory
|
|
* @param strSector : Start sector number
|
|
* @param endSector : End sector number
|
|
* @return Offset of the first non blank word location if the status code is SECTOR_NOT_BLANK
|
|
* @note The end sector must be greater than or equal to start sector number
|
|
*/
|
|
// FIXME - There are two return value (result[0] & result[1]
|
|
// Result0:Offset of the first non blank word location if the Status Code is
|
|
// SECTOR_NOT_BLANK.
|
|
// Result1:Contents of non blank word location.
|
|
uint8_t Chip_IAP_BlankCheckSector(uint32_t strSector, uint32_t endSector);
|
|
|
|
/**
|
|
* @brief Read part identification number
|
|
* @return Part identification number
|
|
*/
|
|
uint32_t Chip_IAP_ReadPID(void);
|
|
|
|
/**
|
|
* @brief Read boot code version number
|
|
* @return Boot code version number
|
|
*/
|
|
uint8_t Chip_IAP_ReadBootCode(void);
|
|
|
|
/**
|
|
* @brief Compare the memory contents at two locations
|
|
* @param dstAdd : Destination of the RAM address of data bytes to be compared
|
|
* @param srcAdd : Source of the RAM address of data bytes to be compared
|
|
* @param bytescmp : Number of bytes to be compared
|
|
* @return Offset of the first mismatch of the status code is COMPARE_ERROR
|
|
* @note The addresses should be a word boundary and number of bytes should be
|
|
* a multiply of 4
|
|
*/
|
|
uint8_t Chip_IAP_Compare(uint32_t dstAdd, uint32_t srcAdd, uint32_t bytescmp);
|
|
|
|
/**
|
|
* @brief IAP reinvoke ISP to invoke the bootloader in ISP mode
|
|
* @return none
|
|
*/
|
|
uint8_t Chip_IAP_ReinvokeISP(void);
|
|
|
|
/**
|
|
* @brief Read the unique ID
|
|
* @return Status code to indicate the command is executed successfully or not
|
|
*/
|
|
uint32_t Chip_IAP_ReadUID(void);
|
|
|
|
/**
|
|
* @brief Erase a page or multiple papers of on-chip flash memory
|
|
* @param strPage : Start page number
|
|
* @param endPage : End page number
|
|
* @return Status code to indicate the command is executed successfully or not
|
|
* @note The page number must be greater than or equal to start page number
|
|
*/
|
|
// FIXME - There are four return value
|
|
// Result0:The first 32-bit word (at the lowest address)
|
|
// Result1:The second 32-bit word.
|
|
// Result2:The third 32-bit word.
|
|
// Result3:The fourth 32-bit word.
|
|
uint8_t Chip_IAP_ErasePage(uint32_t strPage, uint32_t endPage);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __IAP_H_ */
|