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 on board. Channel A is
connected to the mc13224v's JTAG interface and Channel B is
connected to UART1. 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
---
src/jtag/drivers/ft2232.c | 97 +++++++++++++++++++++++++++++++++++++++++
tcl/board/redbee-econotag.cfg | 8 +++
2 files changed, 105 insertions(+), 0 deletions(-)
create mode 100644 tcl/board/redbee-econotag.cfg
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index 5c6b655..3213851 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,35 @@ 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 +2513,68 @@ 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 */
+ buf[0] = 0x80; /* command "set data bits low byte" */
+ buf[1] = low_output; /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+ buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO =
in, nOE = out */
+ 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];
diff --git a/tcl/board/redbee-econotag.cfg b/tcl/board/redbee-econotag.cfg
new file mode 100644
index 0000000..bda347e
--- /dev/null
+++ b/tcl/board/redbee-econotag.cfg
@@ -0,0 +1,8 @@
+source [find target/mc13224v.cfg]
+
+# The redbee-econotag has an onboard ft2232h with channel A wired
+# to the JTAG pins on the mc13224v
+# channel B is wired to UART1
+interface ft2232
+ft2232_layout redbee-econotag
+ft2232_vid_pid 0x0403 0x6010
--
1.5.6.5
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development