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>__archive__
parent
e4a40d257d
commit
63763345d9
|
@ -2130,6 +2130,7 @@ to debug some other target. It can support the SWO trace mechanism.
|
||||||
@item @b{olimex-jtag} Olimex ARM-USB-OCD and ARM-USB-Tiny
|
@item @b{olimex-jtag} Olimex ARM-USB-OCD and ARM-USB-Tiny
|
||||||
@item @b{oocdlink} OOCDLink
|
@item @b{oocdlink} OOCDLink
|
||||||
@c oocdlink ~= jtagkey_prototype_v1
|
@c oocdlink ~= jtagkey_prototype_v1
|
||||||
|
@item @b{redbee-econotag} Integrated with a Redbee development board.
|
||||||
@item @b{sheevaplug} Marvell Sheevaplug development kit
|
@item @b{sheevaplug} Marvell Sheevaplug development kit
|
||||||
@item @b{signalyzer} Xverve Signalyzer
|
@item @b{signalyzer} Xverve Signalyzer
|
||||||
@item @b{stm32stick} Hitex STM32 Performance Stick
|
@item @b{stm32stick} Hitex STM32 Performance Stick
|
||||||
|
|
|
@ -162,6 +162,7 @@ static int icebear_jtag_init(void);
|
||||||
static int cortino_jtag_init(void);
|
static int cortino_jtag_init(void);
|
||||||
static int signalyzer_h_init(void);
|
static int signalyzer_h_init(void);
|
||||||
static int ktlink_init(void);
|
static int ktlink_init(void);
|
||||||
|
static int redbee_init(void);
|
||||||
|
|
||||||
/* reset procedures for supported layouts */
|
/* reset procedures for supported layouts */
|
||||||
static void usbjtag_reset(int trst, int srst);
|
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 icebear_jtag_reset(int trst, int srst);
|
||||||
static void signalyzer_h_reset(int trst, int srst);
|
static void signalyzer_h_reset(int trst, int srst);
|
||||||
static void ktlink_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 */
|
/* blink procedures for layouts that support a blinking led */
|
||||||
static void olimex_jtag_blink(void);
|
static void olimex_jtag_blink(void);
|
||||||
|
@ -263,6 +265,10 @@ static const struct ft2232_layout ft2232_layouts[] =
|
||||||
.reset = ktlink_reset,
|
.reset = ktlink_reset,
|
||||||
.blink = ktlink_blink
|
.blink = ktlink_blink
|
||||||
},
|
},
|
||||||
|
{ .name = "redbee-econotag",
|
||||||
|
.init = redbee_init,
|
||||||
|
.reset = redbee_reset,
|
||||||
|
},
|
||||||
{ .name = NULL, /* END OF TABLE */ },
|
{ .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);
|
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)
|
static int ft2232_execute_runtest(struct jtag_command *cmd)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -2478,6 +2514,73 @@ static int axm0432_jtag_init(void)
|
||||||
return ERROR_OK;
|
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)
|
static int jtagkey_init(void)
|
||||||
{
|
{
|
||||||
uint8_t buf[3];
|
uint8_t buf[3];
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue