summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMariano Alvira <mar@devl.org>2010-02-27 22:52:34 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2010-02-27 22:52:34 -0800
commit63763345d94b11f106c832c23e8ad730a4485723 (patch)
treecc0de7a0c935fc884b321f086e873ec348655cd8 /src
parente4a40d257d6c8fa393929cda50c0a1d777787da2 (diff)
downloadopenocd_libswd-63763345d94b11f106c832c23e8ad730a4485723.tar.gz
openocd_libswd-63763345d94b11f106c832c23e8ad730a4485723.tar.bz2
openocd_libswd-63763345d94b11f106c832c23e8ad730a4485723.tar.xz
openocd_libswd-63763345d94b11f106c832c23e8ad730a4485723.zip
add board/redbee-econotag.cfg and JTAG support
The Redbee Econotag is an open hardware development kit from Redwire, LLC (www.redwirellc.com/store), for the Freescale MC13224V ARM7TDMI + 802.15.4 radio. It includes both an MC13224V and an FT2232H (for JTAG and UART support). It has flexible power supply options. Additional features are: - inverted-F pcb antenna - 36 GPIO brought out to 0.1" pin header (includes all peripheral pins) - Reset button - Two push buttons (on kbi1-5 and kbi0-4) - USB-A connector, powered from USB - up to 16V external input - pads for optional buck inductor - pads for optional 32.768kHz crystal - 2x LEDS on TX_ON and RX_ON [ dbrownell@users.sourceforge.net: shrink lines; texi ] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/drivers/ft2232.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index 5c6b655c..d2e96d07 100644
--- a/src/jtag/drivers/ft2232.c
+++ b/src/jtag/drivers/ft2232.c
@@ -162,6 +162,7 @@ static int icebear_jtag_init(void);
static int cortino_jtag_init(void);
static int signalyzer_h_init(void);
static int ktlink_init(void);
+static int redbee_init(void);
/* reset procedures for supported layouts */
static void usbjtag_reset(int trst, int srst);
@@ -176,6 +177,7 @@ static void sheevaplug_reset(int trst, int srst);
static void icebear_jtag_reset(int trst, int srst);
static void signalyzer_h_reset(int trst, int srst);
static void ktlink_reset(int trst, int srst);
+static void redbee_reset(int trst, int srst);
/* blink procedures for layouts that support a blinking led */
static void olimex_jtag_blink(void);
@@ -263,6 +265,10 @@ static const struct ft2232_layout ft2232_layouts[] =
.reset = ktlink_reset,
.blink = ktlink_blink
},
+ { .name = "redbee-econotag",
+ .init = redbee_init,
+ .reset = redbee_reset,
+ },
{ .name = NULL, /* END OF TABLE */ },
};
@@ -1577,6 +1583,36 @@ static void sheevaplug_reset(int trst, int srst)
LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output, high_direction);
}
+static void redbee_reset(int trst, int srst)
+{
+ if (trst == 1)
+ {
+ tap_set_state(TAP_RESET);
+ high_output &= ~nTRST;
+ }
+ else if (trst == 0)
+ {
+ high_output |= nTRST;
+ }
+
+ if (srst == 1)
+ {
+ high_output &= ~nSRST;
+ }
+ else if (srst == 0)
+ {
+ high_output |= nSRST;
+ }
+
+ /* command "set data bits low byte" */
+ buffer_write(0x82);
+ buffer_write(high_output);
+ buffer_write(high_direction);
+ LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, "
+ "high_direction: 0x%2.2x", trst, srst, high_output,
+ high_direction);
+}
+
static int ft2232_execute_runtest(struct jtag_command *cmd)
{
int retval;
@@ -2478,6 +2514,73 @@ static int axm0432_jtag_init(void)
return ERROR_OK;
}
+static int redbee_init(void)
+{
+ uint8_t buf[3];
+ uint32_t bytes_written;
+
+ low_output = 0x08;
+ low_direction = 0x2b;
+
+ /* initialize low byte for jtag */
+ /* command "set data bits low byte" */
+ buf[0] = 0x80;
+ /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+ buf[2] = low_direction;
+ /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE = out */
+ buf[1] = low_output;
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK)
+ || (bytes_written != 3))
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'redbee' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ nTRST = 0x08;
+ nTRSTnOE = 0x0; /* No output enable for TRST*/
+ nSRST = 0x04;
+ nSRSTnOE = 0x0; /* No output enable for SRST*/
+
+ high_output = 0x0;
+ high_direction = 0x0c;
+
+ enum reset_types jtag_reset_config = jtag_get_reset_config();
+ if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
+ {
+ LOG_ERROR("can't set nTRSTOE to push-pull on redbee");
+ }
+ else
+ {
+ high_output |= nTRST;
+ }
+
+ if (jtag_reset_config & RESET_SRST_PUSH_PULL)
+ {
+ LOG_ERROR("can't set nSRST to push-pull on redbee");
+ }
+ else
+ {
+ high_output |= nSRST;
+ }
+
+ /* initialize high port */
+ buf[0] = 0x82; /* command "set data bits high byte" */
+ buf[1] = high_output; /* value */
+ buf[2] = high_direction; /* all outputs (xRST and xRSTnOE) */
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if (((ft2232_write(buf, 3, &bytes_written)) != ERROR_OK)
+ || (bytes_written != 3))
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'redbee' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ return ERROR_OK;
+}
+
static int jtagkey_init(void)
{
uint8_t buf[3];