1 /*********************************************************************
2  *
3  *   LPC ISP Commands
4  *
5  *
6  * Written by Nathael Pajani <nathael.pajani@nathael.net>
7  *
8  * This programm is released under the terms of the GNU GPLv3 licence
9  * as can be found on the GNU website : <http://www.gnu.org/licenses/>
10  *
11  *********************************************************************/
13 #ifndef ISP_COMMANDS_H
14 #define ISP_COMMANDS_H
17 extern char* error_codes[];
19 #define CMD_SUCCESS 0
20 #define INVALID_COMMAND 1
21 #define SRC_ADDR_ERROR 2
22 #define DST_ADDR_ERROR 3
23 #define SRC_ADDR_NOT_MAPPED 4
24 #define DST_ADDR_NOT_MAPPED 5
25 #define COUNT_ERROR 6
26 #define INVALID_SECTOR 7
27 #define SECTOR_NOT_BLANK 8
28 #define SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 9
29 #define COMPARE_ERROR 10
30 #define BUSY 11
31 #define PARAM_ERROR 12
32 #define ADDR_ERROR 13
33 #define ADDR_NOT_MAPPED 14
34 #define CMD_LOCKED 15
35 #define INVALID_CODE 16
36 #define INVALID_BAUD_RATE 17
37 #define INVALID_STOP_BIT 18
38 #define CODE_READ_PROTECTION_ENABLED 19
41 /* Connect or reconnect to the target.
42  * Return positive or NULL value when connection is OK, or negative value otherwise.
43  */
44 int isp_connect(unsigned int crystal_freq, int quiet);
47 /*
48  * Helper functions
49  */
50 int isp_send_cmd_no_args(char* cmd_name, char* cmd, int quiet);
51 int isp_send_cmd_two_args(char* cmd_name, char cmd, unsigned int arg1, unsigned int arg2);
52 int isp_send_cmd_address(char cmd, uint32_t addr1, uint32_t addr2, uint32_t length, char* name);
53 int isp_send_cmd_sectors(char* name, char cmd, int first_sector, int last_sector, int quiet);
56 int isp_cmd_unlock(int quiet);
58 int isp_cmd_read_uid(void);
60 int isp_cmd_part_id(int quiet);
62 int isp_cmd_boot_version(void);
64 /*
65  * read-memory
66  * aruments : address count file
67  * read 'count' bytes from 'address', store then in 'file'
68  */
69 int isp_cmd_read_memory(int arg_count, char** args);
70 /*
71  * perform read-memory operation
72  * read 'count' bytes from 'addr' to 'data' buffer
73  */
74 int isp_read_memory(char* data, uint32_t addr, unsigned int count);
76 /*
77  * write-to-ram
78  * aruments : address file
79  * send 'file' to 'address' in ram
80  */
81 int isp_cmd_write_to_ram(int arg_count, char** args);
82 /*
83  * perform write-to-ram operation
84  * send 'count' bytes from 'data' to 'addr' in RAM
85  */
86 int isp_send_buf_to_ram(char* data, unsigned long int addr, unsigned int count, unsigned int perform_uuencode);
89 int isp_cmd_compare(int arg_count, char** args);
91 int isp_cmd_copy_ram_to_flash(int arg_count, char** args);
93 /*
94  * go
95  * aruments : address mode
96  * execute programm at 'address' (> 0x200) in 'mode' ('arm' or 'thumb')
97  */
98 int isp_cmd_go(int arg_count, char** args);
99 /*
100  * perform go operation
101  * start user programm at 'addr' in 'mode'
102  * mode is 'T' for thumb or 'A' for arm.
103  */
104 int isp_send_cmd_go(uint32_t addr, char mode);
106 int isp_cmd_blank_check(int arg_count, char** args);
108 int isp_cmd_prepare_for_write(int arg_count, char** args);
110 int isp_cmd_erase(int arg_count, char** args);
113 #endif /* ISP_COMMANDS_H */