mirror of
https://github.com/greatscottgadgets/hackrf.git
synced 2026-03-13 02:38:39 +01:00
124 lines
5.1 KiB
C
124 lines
5.1 KiB
C
/*
|
||
* Copyright 2013 Benjamin Vernoux <titanmkd@gmail.com>
|
||
*
|
||
* This file is part of HackRF.
|
||
*
|
||
* This program is free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation; either version 2, or (at your option)
|
||
* any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program; see the file COPYING. If not, write to
|
||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||
* Boston, MA 02110-1301, USA.
|
||
*/
|
||
|
||
#ifndef __ROM_IAP__
|
||
#define __ROM_IAP__
|
||
|
||
#include <stdint.h>
|
||
|
||
typedef enum
|
||
{
|
||
/* TODO define other commands */
|
||
|
||
IAP_CMD_INIT_IAP = 49,
|
||
/* Command Init IAP
|
||
Input Command code: 49 (decimal)
|
||
Return Code CMD_SUCCESS
|
||
Result None
|
||
Description Initializes and prepares the flash for erase and write operations.
|
||
Stack usage 88 B */
|
||
|
||
IAP_CMD_READ_PART_ID_NO = 54,
|
||
/* Read part identification number
|
||
Command Read part identification number
|
||
Input Command code: 54 (decimal)
|
||
Parameters:None
|
||
Return Code CMD_SUCCESS |
|
||
Result Result0:Part Identification Number.
|
||
Result1:Part Identification Number.
|
||
Description This command is used to read the part identification number. See Table 1082
|
||
<09>LPC43xx part identification numbers<72>.
|
||
The command returns two words: word0 followed by word1. Word 0 corresponds
|
||
to the part id and word1 indicates the flash configuration or contains 0x0 for
|
||
flashless parts.
|
||
Stack usage 8 B */
|
||
|
||
IAP_CMD_READ_SERIAL_NO = 58
|
||
/* Read device serial number
|
||
Input Command code: 58 (decimal)
|
||
Parameters: None
|
||
Return Code CMD_SUCCESS
|
||
Result Result0:First 32-bit word of Device Identification Number (at the lowest address)
|
||
Result1:Second 32-bit word of Device Identification Number
|
||
Result2:Third 32-bit word of Device Identification Number
|
||
Result3:Fourth 32-bit word of Device Identification Number
|
||
Description This command is used to read the device identification number. The serial number
|
||
may be used to uniquely identify a single unit among all LPC43xx devices.
|
||
Stack usage 8 B */
|
||
} iap_cmd_code_t;
|
||
|
||
/* ISP/IAP Return Code */
|
||
typedef enum
|
||
{
|
||
CMD_SUCCESS = 0x00000000, /* CMD_SUCCESS Command is executed successfully. Sent by ISP handler only when command given by the host has been completely and successfully executed. */
|
||
INVALID_COMMAND = 0x00000001, /* Invalid command. */
|
||
SRC_ADDR_ERROR = 0x00000002, /* Source address is not on word boundary. */
|
||
DST_ADDR_ERROR = 0x00000003, /* Destination address not on word or 256 byte boundary. */
|
||
SRC_ADDR_NOT_MAPPED = 0x00000004, /* Source address is not mapped in the memory map. Count value is taken into consideration where applicable. */
|
||
DST_ADDR_NOT_MAPPED = 0x00000005, /* Destination address is not mapped in the memory map. Count value is taken into consideration where applicable.*/
|
||
COUNT_ERROR = 0x00000006, /* Byte count is not multiple of 4 or is not a permitted value. */
|
||
INVALID_SECTOR = 0x00000007, /* Sector number is invalid or end sector number is greater than start sector number. */
|
||
SECTOR_NOT_BLANK = 0x00000008, /* Sector is not blank. */
|
||
SECTOR_NOT_PREP_WRITE_OP = 0x00000009, /* Command to prepare sector for write operation was not executed. */
|
||
COMPARE_ERROR = 0x0000000A, /* Source and destination data not equal. */
|
||
BUSY = 0x0000000B, /* Flash programming hardware interface is busy. */
|
||
PARAM_ERROR = 0x0000000C, /* Insufficient number of parameters or invalid parameter. */
|
||
ADDR_ERROR = 0x0000000D, /* Address is not on word boundary. */
|
||
ADDR_NOT_MAPPED = 0x0000000E, /* Address is not mapped in the memory map. Count value is taken in to consideration where applicable. */
|
||
CMD_LOCKED = 0x0000000F, /* Command is locked. */
|
||
INVALID_CODE = 0x00000010, /* Unlock code is invalid. */
|
||
INVALID_BAUD_RATE = 0x00000011, /* Invalid baud rate setting. */
|
||
INVALID_STOP_BIT = 0x00000012, /* Invalid stop bit setting. */
|
||
CODE_READ_PROTECTION_ENABLED = 0x00000013, /* Code read protection enabled. */
|
||
INVALID_FLASH_UNIT = 0x00000014, /* Invalid flash unit. */
|
||
USER_CODE_CHECKSUM = 0x00000015,
|
||
ERROR_SETTING_ACTIVE_PARTITION = 0x00000016,
|
||
|
||
/* Special Error */
|
||
ERROR_IAP_NOT_IMPLEMENTED = 0x00000100 /* IAP is not implemented in this part */
|
||
} isp_iap_ret_code_t;
|
||
|
||
typedef struct
|
||
{
|
||
/* Input Command/Param */
|
||
struct
|
||
{
|
||
iap_cmd_code_t command_code;
|
||
uint32_t iap_param[5];
|
||
} cmd_param;
|
||
|
||
/* Output Status/Result */
|
||
struct
|
||
{
|
||
isp_iap_ret_code_t status_ret;
|
||
uint32_t iap_result[4];
|
||
} status_res;
|
||
} iap_cmd_res_t;
|
||
|
||
/* Check if IAP is implemented */
|
||
bool iap_is_implemented(void);
|
||
|
||
isp_iap_ret_code_t iap_cmd_call(iap_cmd_res_t* iap_cmd_res);
|
||
|
||
void write_USB_vid_pid(void);
|
||
|
||
#endif//__ROM_IAP__
|