Expose JTAG NRST

pull/36/head
Uwe Bonnes 2011-12-12 15:22:19 +01:00
rodzic b1e89edb57
commit 28956cf2c9
4 zmienionych plików z 43 dodań i 0 usunięć

Wyświetl plik

@ -470,6 +470,11 @@ void stlink_reset(stlink_t *sl) {
sl->backend->reset(sl);
}
void stlink_jtag_reset(stlink_t *sl, int value) {
DLOG("*** stlink_jtag_reset ***\n");
sl->backend->jtag_reset(sl, value);
}
void stlink_run(stlink_t *sl) {
DLOG("*** stlink_run ***\n");
sl->backend->run(sl);

Wyświetl plik

@ -70,6 +70,7 @@ extern "C" {
// TODO - possible poor names...
#define STLINK_SWD_ENTER 0x30
#define STLINK_SWD_READCOREID 0x32 // TBD
#define STLINK_JTAG_DRIVE_NRST 0x3c
// cortex m3 technical reference manual
#define CM3_REG_CPUID 0xE000ED00
@ -267,6 +268,7 @@ extern "C" {
void (*exit_dfu_mode) (stlink_t * stl);
void (*core_id) (stlink_t * stl);
void (*reset) (stlink_t * stl);
void (*jtag_reset) (stlink_t * stl, int value);
void (*run) (stlink_t * stl);
void (*status) (stlink_t * stl);
void (*version) (stlink_t *sl);
@ -330,6 +332,7 @@ extern "C" {
void stlink_close(stlink_t *sl);
uint32_t stlink_core_id(stlink_t *sl);
void stlink_reset(stlink_t *sl);
void stlink_jtag_reset(stlink_t *sl, int value);
void stlink_run(stlink_t *sl);
void stlink_status(stlink_t *sl);
void stlink_version(stlink_t *sl);

Wyświetl plik

@ -537,6 +537,19 @@ void _stlink_sg_reset(stlink_t *sl) {
stlink_stat(sl, "core reset");
}
// Arm-core reset -> halted state.
void _stlink_sg_jtag_reset(stlink_t *sl, int value) {
struct stlink_libsg *sg = sl->backend_data;
clear_cdb(sg);
sg->cdb_cmd_blk[1] = STLINK_JTAG_DRIVE_NRST;
sg->cdb_cmd_blk[2] = (value)?0:1;
sl->q_len = 3;
sg->q_addr = 2;
stlink_q(sl);
stlink_stat(sl, "core reset");
}
// Arm-core status: halted or running.
void _stlink_sg_status(stlink_t *sl) {
@ -820,6 +833,7 @@ stlink_backend_t _stlink_sg_backend = {
_stlink_sg_exit_dfu_mode,
_stlink_sg_core_id,
_stlink_sg_reset,
_stlink_sg_jtag_reset,
_stlink_sg_run,
_stlink_sg_status,
_stlink_sg_version,

Wyświetl plik

@ -348,6 +348,26 @@ void _stlink_usb_reset(stlink_t * sl) {
}
void _stlink_usb_jtag_reset(stlink_t * sl, int value) {
struct stlink_libusb * const slu = sl->backend_data;
unsigned char* const data = sl->q_buf;
unsigned char* const cmd = sl->c_buf;
ssize_t size;
int rep_len = 2;
int i = fill_command(sl, SG_DXFER_FROM_DEV, rep_len);
cmd[i++] = STLINK_DEBUG_COMMAND;
cmd[i++] = STLINK_JTAG_DRIVE_NRST;
cmd[i++] = (value)?0:1;
size = send_recv(slu, 1, cmd, slu->cmd_len, data, rep_len);
if (size == -1) {
printf("[!] send_recv\n");
return;
}
}
void _stlink_usb_step(stlink_t* sl) {
struct stlink_libusb * const slu = sl->backend_data;
unsigned char* const data = sl->q_buf;
@ -533,6 +553,7 @@ stlink_backend_t _stlink_usb_backend = {
_stlink_usb_exit_dfu_mode,
_stlink_usb_core_id,
_stlink_usb_reset,
_stlink_usb_jtag_reset,
_stlink_usb_run,
_stlink_usb_status,
_stlink_usb_version,