1 /*********************************************************************
2  *
3  *   LPC ISP Commands
4  *
5  *
6  *  Copyright (C) 2012 Nathael Pajani <nathael.pajani@nathael.net>
7  *
8  *  This program is free software: you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation, either version 3 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  *********************************************************************/
23 #ifndef ISP_COMMANDS_H
24 #define ISP_COMMANDS_H
27 extern char* error_codes[];
29 #define CMD_SUCCESS 0
30 #define INVALID_COMMAND 1
31 #define SRC_ADDR_ERROR 2
32 #define DST_ADDR_ERROR 3
33 #define SRC_ADDR_NOT_MAPPED 4
34 #define DST_ADDR_NOT_MAPPED 5
35 #define COUNT_ERROR 6
36 #define INVALID_SECTOR 7
37 #define SECTOR_NOT_BLANK 8
38 #define SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 9
39 #define COMPARE_ERROR 10
40 #define BUSY 11
41 #define PARAM_ERROR 12
42 #define ADDR_ERROR 13
43 #define ADDR_NOT_MAPPED 14
44 #define CMD_LOCKED 15
45 #define INVALID_CODE 16
46 #define INVALID_BAUD_RATE 17
47 #define INVALID_STOP_BIT 18
48 #define CODE_READ_PROTECTION_ENABLED 19
51 /* Connect or reconnect to the target.
52  * Return positive or NULL value when connection is OK, or negative value otherwise.
53  */
54 int isp_connect(unsigned int crystal_freq, int quiet);
57 /*
58  * Helper functions
59  */
60 int isp_send_cmd_no_args(char* cmd_name, char* cmd, int quiet);
61 int isp_send_cmd_two_args(char* cmd_name, char cmd, unsigned int arg1, unsigned int arg2);
62 int isp_send_cmd_address(char cmd, uint32_t addr1, uint32_t addr2, uint32_t length, char* name);
63 int isp_send_cmd_sectors(char* name, char cmd, int first_sector, int last_sector, int quiet);
66 int isp_cmd_unlock(int quiet);
68 int isp_cmd_read_uid(void);
70 int isp_cmd_part_id(int quiet);
72 int isp_cmd_boot_version(void);
74 /*
75  * read-memory
76  * aruments : address count file
77  * read 'count' bytes from 'address', store then in 'file'
78  */
79 int isp_cmd_read_memory(int arg_count, char** args);
80 /*
81  * perform read-memory operation
82  * read 'count' bytes from 'addr' to 'data' buffer
83  */
84 int isp_read_memory(char* data, uint32_t addr, unsigned int count, unsigned int uuencoded);
86 /*
87  * write-to-ram
88  * aruments : address file
89  * send 'file' to 'address' in ram
90  */
91 int isp_cmd_write_to_ram(int arg_count, char** args);
92 /*
93  * perform write-to-ram operation
94  * send 'count' bytes from 'data' to 'addr' in RAM
95  */
96 int isp_send_buf_to_ram(char* data, unsigned long int addr, unsigned int count, unsigned int perform_uuencode);
99 int isp_cmd_compare(int arg_count, char** args);
101 int isp_cmd_copy_ram_to_flash(int arg_count, char** args);
103 /*
104  * go
105  * aruments : address mode
106  * execute program at 'address' (> 0x200) in 'mode' ('arm' or 'thumb')
107  */
108 int isp_cmd_go(int arg_count, char** args);
109 /*
110  * perform go operation
111  * start user program at 'addr' in 'mode'
112  * mode is 'T' for thumb or 'A' for arm.
113  */
114 int isp_send_cmd_go(uint32_t addr, char mode);
116 int isp_cmd_blank_check(int arg_count, char** args);
118 int isp_cmd_prepare_for_write(int arg_count, char** args);
120 int isp_cmd_erase(int arg_count, char** args);
123 #endif /* ISP_COMMANDS_H */