#define EMU_CAP_RAWTRACE 30
#define EMU_CAP_RESERVED_3 31
-static char *jlink_cap_str[] = {
+static const char * const jlink_cap_str[] = {
"Always 1.",
"Supports command EMU_CMD_GET_HARDWARE_VERSION",
"Supports command EMU_CMD_WRITE_DCC",
#define JLINK_MAX_SPEED 12000
/* J-Link hardware versions */
-#define JLINK_HW_TYPE_JLINK 0
-#define JLINK_HW_TYPE_JTRACE 1
-#define JLINK_HW_TYPE_FLASHER 2
-#define JLINK_HW_TYPE_JLINK_PRO 3
-#define JLINK_HW_TYPE_MAX 4
-
-static char *jlink_hw_type_str[] = {
+#define JLINK_HW_TYPE_JLINK 0
+#define JLINK_HW_TYPE_JTRACE 1
+#define JLINK_HW_TYPE_FLASHER 2
+#define JLINK_HW_TYPE_JLINK_PRO 3
+#define JLINK_HW_TYPE_JLINK_LITE_ADI 5
+#define JLINK_HW_TYPE_MAX 6
+
+static const char * const jlink_hw_type_str[] = {
"J-Link",
"J-Trace",
"Flasher",
"J-Link Pro",
+ "Unknown",
+ "J-Link Lite-ADI",
};
#define JLINK_TIF_JTAG 0
return ERROR_JTAG_INIT_FAILED;
}
- /*
- * The next three instructions were added after discovering a problem
- * while using an oscilloscope.
- * For the V8 SAM-ICE dongle (and likely other j-link device variants),
- * the reset line to the target microprocessor was found to cycle only
- * intermittently during emulator startup (even after encountering the
- * downstream reset instruction later in the code).
- * This was found to create two issues:
- * 1) In general it is a bad practice to not reset a CPU to a known
- * state when starting an emulator and
- * 2) something critical happens inside the dongle when it does the
- * first read following a new USB session.
- * Keeping the processor in reset during the first read collecting
- * version information seems to prevent errant
- * "J-Link command EMU_CMD_VERSION failed" issues.
- */
-
- LOG_INFO("J-Link initialization started / target CPU reset initiated");
- jlink_simple_command(EMU_CMD_HW_TRST0);
- jlink_simple_command(EMU_CMD_HW_RESET0);
- usleep(1000);
-
jlink_hw_jtag_version = 2;
if (jlink_get_version_info() == ERROR_OK) {
jtag_sleep(3000);
jlink_tap_init();
+ jlink_speed(jtag_get_speed_khz());
+
if (!swd_mode) {
/* v5/6 jlink seems to have an issue if the first tap move
* is not divisible by 8, so we send a TLR on first power up */
LOG_INFO("J-Link hw version %i", (int)jlink_hw_version);
if (jlink_hw_type >= JLINK_HW_TYPE_MAX)
- LOG_INFO("J-Link hw type uknown 0x%" PRIx32, jlink_hw_type);
+ LOG_INFO("J-Link hw type unknown 0x%" PRIx32, jlink_hw_type);
else
LOG_INFO("J-Link hw type %s", jlink_hw_type_str[jlink_hw_type]);
}
static int_least32_t jlink_swd_frequency(struct adiv5_dap *dap, int_least32_t hz)
{
if (hz > 0)
- jlink_speed(hz);
+ jlink_speed(hz / 1000);
return hz;
}