You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

690 lines
17 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2007 by Benedikt Sauter *
  3. * sauter@ixbat.de *
  4. * *
  5. * This program is free software; you can redistribute it and/or modify *
  6. * it under the terms of the GNU General Public License as published by *
  7. * the Free Software Foundation; either version 2 of the License, or *
  8. * (at your option) any later version. *
  9. * *
  10. * This program is distributed in the hope that it will be useful, *
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  13. * GNU General Public License for more details. *
  14. * *
  15. * You should have received a copy of the GNU General Public License *
  16. * along with this program; if not, write to the *
  17. * Free Software Foundation, Inc., *
  18. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  19. ***************************************************************************/
  20. /*
  21. * This file is based on Dominic Rath's amt_jtagaccel.c.
  22. *
  23. * usbprog is a free programming adapter. You can easily install
  24. * different firmware versions from an "online pool" over USB.
  25. * The adapter can be used for programming and debugging AVR and ARM
  26. * processors, as USB to RS232 converter, as JTAG interface or as
  27. * simple I/O interface (5 lines).
  28. *
  29. * http://www.embedded-projects.net/usbprog
  30. */
  31. #ifdef HAVE_CONFIG_H
  32. #include "config.h"
  33. #endif
  34. #define INCLUDE_JTAG_INTERFACE_H
  35. #include "interface.h"
  36. #include <usb.h>
  37. #define VID 0x1781
  38. #define PID 0x0c63
  39. /* Pins at usbprog */
  40. #define TDO_BIT 0
  41. #define TDI_BIT 3
  42. #define TCK_BIT 2
  43. #define TMS_BIT 1
  44. static int usbprog_execute_queue(void);
  45. static int usbprog_speed(int speed);
  46. static int usbprog_register_commands(struct command_context_s *cmd_ctx);
  47. static int usbprog_init(void);
  48. static int usbprog_quit(void);
  49. static void usbprog_end_state(tap_state_t state);
  50. static void usbprog_state_move(void);
  51. static void usbprog_path_move(pathmove_command_t *cmd);
  52. static void usbprog_runtest(int num_cycles);
  53. static void usbprog_scan(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size);
  54. jtag_interface_t usbprog_interface =
  55. {
  56. .name = "usbprog",
  57. .execute_queue = usbprog_execute_queue,
  58. .speed = usbprog_speed,
  59. .register_commands = usbprog_register_commands,
  60. .init = usbprog_init,
  61. .quit = usbprog_quit
  62. };
  63. #define UNKOWN_COMMAND 0x00
  64. #define PORT_DIRECTION 0x01
  65. #define PORT_SET 0x02
  66. #define PORT_GET 0x03
  67. #define PORT_SETBIT 0x04
  68. #define PORT_GETBIT 0x05
  69. #define WRITE_TDI 0x06
  70. #define READ_TDO 0x07
  71. #define WRITE_AND_READ 0x08
  72. #define WRITE_TMS 0x09
  73. #define WRITE_TMS_CHAIN 0x0A
  74. struct usbprog_jtag
  75. {
  76. struct usb_dev_handle* usb_handle;
  77. };
  78. static struct usbprog_jtag * usbprog_jtag_handle;
  79. static struct usbprog_jtag* usbprog_jtag_open(void);
  80. //static void usbprog_jtag_close(struct usbprog_jtag *usbprog_jtag);
  81. static void usbprog_jtag_init(struct usbprog_jtag *usbprog_jtag);
  82. static unsigned char usbprog_jtag_message(struct usbprog_jtag *usbprog_jtag, char *msg, int msglen);
  83. static void usbprog_jtag_read_tdo(struct usbprog_jtag *usbprog_jtag, char * buffer, int size);
  84. static void usbprog_jtag_write_tdi(struct usbprog_jtag *usbprog_jtag, char * buffer, int size);
  85. static void usbprog_jtag_write_and_read(struct usbprog_jtag *usbprog_jtag, char * buffer, int size);
  86. static void usbprog_jtag_write_tms(struct usbprog_jtag *usbprog_jtag, char tms_scan);
  87. static char tms_chain[64];
  88. static int tms_chain_index;
  89. static void usbprog_jtag_tms_collect(char tms_scan);
  90. static void usbprog_jtag_tms_send(struct usbprog_jtag *usbprog_jtag);
  91. static void usbprog_write(int tck, int tms, int tdi);
  92. static void usbprog_reset(int trst, int srst);
  93. static void usbprog_jtag_set_direction(struct usbprog_jtag *usbprog_jtag, unsigned char direction);
  94. static void usbprog_jtag_write_slice(struct usbprog_jtag *usbprog_jtag,unsigned char value);
  95. //static unsigned char usbprog_jtag_get_port(struct usbprog_jtag *usbprog_jtag);
  96. static void usbprog_jtag_set_bit(struct usbprog_jtag *usbprog_jtag,int bit, int value);
  97. //static int usbprog_jtag_get_bit(struct usbprog_jtag *usbprog_jtag, int bit);
  98. static int usbprog_speed(int speed)
  99. {
  100. return ERROR_OK;
  101. }
  102. static int usbprog_register_commands(struct command_context_s *cmd_ctx)
  103. {
  104. return ERROR_OK;
  105. }
  106. static int usbprog_execute_queue(void)
  107. {
  108. jtag_command_t *cmd = jtag_command_queue; /* currently processed command */
  109. int scan_size;
  110. enum scan_type type;
  111. u8 *buffer;
  112. while (cmd)
  113. {
  114. switch (cmd->type)
  115. {
  116. case JTAG_RESET:
  117. #ifdef _DEBUG_JTAG_IO_
  118. LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
  119. #endif
  120. if (cmd->cmd.reset->trst == 1)
  121. {
  122. tap_set_state(TAP_RESET);
  123. }
  124. usbprog_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
  125. break;
  126. case JTAG_RUNTEST:
  127. #ifdef _DEBUG_JTAG_IO_
  128. LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state);
  129. #endif
  130. usbprog_end_state(cmd->cmd.runtest->end_state);
  131. usbprog_runtest(cmd->cmd.runtest->num_cycles);
  132. break;
  133. case JTAG_STATEMOVE:
  134. #ifdef _DEBUG_JTAG_IO_
  135. LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
  136. #endif
  137. usbprog_end_state(cmd->cmd.statemove->end_state);
  138. usbprog_state_move();
  139. break;
  140. case JTAG_PATHMOVE:
  141. #ifdef _DEBUG_JTAG_IO_
  142. LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states,
  143. cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
  144. #endif
  145. usbprog_path_move(cmd->cmd.pathmove);
  146. break;
  147. case JTAG_SCAN:
  148. #ifdef _DEBUG_JTAG_IO_
  149. LOG_DEBUG("scan end in %i", cmd->cmd.scan->end_state);
  150. #endif
  151. usbprog_end_state(cmd->cmd.scan->end_state);
  152. scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
  153. type = jtag_scan_type(cmd->cmd.scan);
  154. usbprog_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
  155. if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK)
  156. return ERROR_JTAG_QUEUE_FAILED;
  157. if (buffer)
  158. free(buffer);
  159. break;
  160. case JTAG_SLEEP:
  161. #ifdef _DEBUG_JTAG_IO_
  162. LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
  163. #endif
  164. jtag_sleep(cmd->cmd.sleep->us);
  165. break;
  166. default:
  167. LOG_ERROR("BUG: unknown JTAG command type encountered");
  168. exit(-1);
  169. }
  170. cmd = cmd->next;
  171. }
  172. return ERROR_OK;
  173. }
  174. static int usbprog_init(void)
  175. {
  176. usbprog_jtag_handle = usbprog_jtag_open();
  177. tms_chain_index = 0;
  178. if (usbprog_jtag_handle == 0)
  179. {
  180. LOG_ERROR("Can't find USB JTAG Interface! Please check connection and permissions.");
  181. return ERROR_JTAG_INIT_FAILED;
  182. }
  183. LOG_INFO("USB JTAG Interface ready!");
  184. usbprog_jtag_init(usbprog_jtag_handle);
  185. usbprog_reset(0, 0);
  186. usbprog_write(0, 0, 0);
  187. return ERROR_OK;
  188. }
  189. static int usbprog_quit(void)
  190. {
  191. return ERROR_OK;
  192. }
  193. /*************** jtag execute commands **********************/
  194. static void usbprog_end_state(tap_state_t state)
  195. {
  196. if (tap_is_state_stable(state))
  197. tap_set_end_state(state);
  198. else
  199. {
  200. LOG_ERROR("BUG: %i is not a valid end state", state);
  201. exit(-1);
  202. }
  203. }
  204. static void usbprog_state_move(void)
  205. {
  206. int i = 0, tms = 0;
  207. u8 tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
  208. int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
  209. usbprog_jtag_write_tms(usbprog_jtag_handle, (char)tms_scan);
  210. for (i = 0; i < tms_count; i++)
  211. {
  212. tms = (tms_scan >> i) & 1;
  213. }
  214. tap_set_state(tap_get_end_state());
  215. }
  216. static void usbprog_path_move(pathmove_command_t *cmd)
  217. {
  218. int num_states = cmd->num_states;
  219. int state_count;
  220. /* There may be queued transitions, and before following a specified
  221. path, we must flush those queued transitions */
  222. usbprog_jtag_tms_send(usbprog_jtag_handle);
  223. state_count = 0;
  224. while (num_states)
  225. {
  226. if (tap_state_transition(tap_get_state(), false) == cmd->path[state_count])
  227. {
  228. /* LOG_INFO("1"); */
  229. usbprog_write(0, 0, 0);
  230. usbprog_write(1, 0, 0);
  231. }
  232. else if (tap_state_transition(tap_get_state(), true) == cmd->path[state_count])
  233. {
  234. /* LOG_INFO("2"); */
  235. usbprog_write(0, 1, 0);
  236. usbprog_write(1, 1, 0);
  237. }
  238. else
  239. {
  240. LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(tap_get_state()), tap_state_name(cmd->path[state_count]));
  241. exit(-1);
  242. }
  243. tap_set_state(cmd->path[state_count]);
  244. state_count++;
  245. num_states--;
  246. }
  247. tap_set_end_state(tap_get_state());
  248. }
  249. static void usbprog_runtest(int num_cycles)
  250. {
  251. int i;
  252. /* only do a state_move when we're not already in IDLE */
  253. if (tap_get_state() != TAP_IDLE)
  254. {
  255. usbprog_end_state(TAP_IDLE);
  256. usbprog_state_move();
  257. }
  258. /* execute num_cycles */
  259. if (num_cycles > 0)
  260. {
  261. usbprog_jtag_tms_send(usbprog_jtag_handle);
  262. usbprog_write(0, 0, 0);
  263. }
  264. else
  265. {
  266. usbprog_jtag_tms_send(usbprog_jtag_handle);
  267. /* LOG_INFO("NUM CYCLES %i",num_cycles); */
  268. }
  269. for (i = 0; i < num_cycles; i++)
  270. {
  271. usbprog_write(1, 0, 0);
  272. usbprog_write(0, 0, 0);
  273. }
  274. #ifdef _DEBUG_JTAG_IO_
  275. LOG_DEBUG("runtest: cur_state %s end_state %s", tap_state_name(tap_get_state()), tap_state_name(tap_get_end_state()));
  276. #endif
  277. /* finish in end_state */
  278. /*
  279. usbprog_end_state(saved_end_state);
  280. if (tap_get_state() != tap_get_end_state())
  281. usbprog_state_move();
  282. */
  283. }
  284. static void usbprog_scan(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size)
  285. {
  286. tap_state_t saved_end_state = tap_get_end_state();
  287. if (ir_scan)
  288. usbprog_end_state(TAP_IRSHIFT);
  289. else
  290. usbprog_end_state(TAP_DRSHIFT);
  291. /* Only move if we're not already there */
  292. if (tap_get_state() != tap_get_end_state())
  293. usbprog_state_move();
  294. usbprog_end_state(saved_end_state);
  295. usbprog_jtag_tms_send(usbprog_jtag_handle);
  296. void (*f)(struct usbprog_jtag *usbprog_jtag, char * buffer, int size);
  297. switch (type) {
  298. case SCAN_OUT: f = &usbprog_jtag_write_tdi; break;
  299. case SCAN_IN: f = &usbprog_jtag_read_tdo; break;
  300. case SCAN_IO: f = &usbprog_jtag_write_and_read; break;
  301. default:
  302. LOG_ERROR("unknown scan type: %i", type);
  303. exit(-1);
  304. }
  305. f(usbprog_jtag_handle, (char *)buffer, scan_size);
  306. /* The adapter does the transition to PAUSE internally */
  307. if (ir_scan)
  308. tap_set_state(TAP_IRPAUSE);
  309. else
  310. tap_set_state(TAP_DRPAUSE);
  311. if (tap_get_state() != tap_get_end_state())
  312. usbprog_state_move();
  313. }
  314. /*************** jtag wrapper functions *********************/
  315. static void usbprog_write(int tck, int tms, int tdi)
  316. {
  317. unsigned char output_value=0x00;
  318. if (tms)
  319. output_value |= (1<<TMS_BIT);
  320. if (tdi)
  321. output_value |= (1<<TDI_BIT);
  322. if (tck)
  323. output_value |= (1<<TCK_BIT);
  324. usbprog_jtag_write_slice(usbprog_jtag_handle,output_value);
  325. }
  326. /* (1) assert or (0) deassert reset lines */
  327. static void usbprog_reset(int trst, int srst)
  328. {
  329. LOG_DEBUG("trst: %i, srst: %i", trst, srst);
  330. if (trst)
  331. usbprog_jtag_set_bit(usbprog_jtag_handle, 5, 0);
  332. else
  333. usbprog_jtag_set_bit(usbprog_jtag_handle, 5, 1);
  334. if (srst)
  335. usbprog_jtag_set_bit(usbprog_jtag_handle, 4, 0);
  336. else
  337. usbprog_jtag_set_bit(usbprog_jtag_handle, 4, 1);
  338. }
  339. /*************** jtag lowlevel functions ********************/
  340. struct usb_bus *busses;
  341. struct usbprog_jtag* usbprog_jtag_open(void)
  342. {
  343. struct usb_bus *bus;
  344. struct usb_device *dev;
  345. struct usbprog_jtag *tmp;
  346. tmp = (struct usbprog_jtag*)malloc(sizeof(struct usbprog_jtag));
  347. usb_set_debug(10);
  348. usb_init();
  349. usb_find_busses();
  350. usb_find_devices();
  351. busses = usb_get_busses();
  352. /* find usbprog_jtag device in usb bus */
  353. for (bus = busses; bus; bus = bus->next)
  354. {
  355. for (dev = bus->devices; dev; dev = dev->next)
  356. {
  357. /* condition for sucessfully hit (too bad, I only check the vendor id)*/
  358. if (dev->descriptor.idVendor == VID && dev->descriptor.idProduct == PID)
  359. {
  360. tmp->usb_handle = usb_open(dev);
  361. usb_set_configuration(tmp->usb_handle, 1);
  362. usb_claim_interface(tmp->usb_handle, 0);
  363. usb_set_altinterface(tmp->usb_handle, 0);
  364. return tmp;
  365. }
  366. }
  367. }
  368. return 0;
  369. }
  370. #if 0
  371. static void usbprog_jtag_close(struct usbprog_jtag *usbprog_jtag)
  372. {
  373. usb_close(usbprog_jtag->usb_handle);
  374. free(usbprog_jtag);
  375. }
  376. #endif
  377. static unsigned char usbprog_jtag_message(struct usbprog_jtag *usbprog_jtag, char *msg, int msglen)
  378. {
  379. int res = usb_bulk_write(usbprog_jtag->usb_handle, 3, msg,msglen, 100);
  380. if ((msg[0] == 2) || (msg[0] == 1) || (msg[0] == 4) || (msg[0] == 0) || \
  381. (msg[0] == 6) || (msg[0] == 0x0A) || (msg[0] == 9))
  382. return 1;
  383. if (res == msglen)
  384. {
  385. /* LOG_INFO("HALLLLOOO %i",(int)msg[0]); */
  386. res = usb_bulk_read(usbprog_jtag->usb_handle, 0x82, msg, 2, 100);
  387. if (res > 0)
  388. return (unsigned char)msg[1];
  389. else
  390. return -1;
  391. }
  392. else
  393. return -1;
  394. return 0;
  395. }
  396. static void usbprog_jtag_init(struct usbprog_jtag *usbprog_jtag)
  397. {
  398. usbprog_jtag_set_direction(usbprog_jtag, 0xFE);
  399. }
  400. static void usbprog_jtag_write_and_read(struct usbprog_jtag *usbprog_jtag, char * buffer, int size)
  401. {
  402. char tmp[64]; /* fastes packet size for usb controller */
  403. int send_bits, bufindex = 0, fillindex = 0, i, loops;
  404. char swap;
  405. /* 61 byte can be transfered (488 bit) */
  406. while (size > 0)
  407. {
  408. if (size > 488)
  409. {
  410. send_bits = 488;
  411. size = size - 488;
  412. loops = 61;
  413. }
  414. else
  415. {
  416. send_bits = size;
  417. loops = size / 8;
  418. loops++;
  419. size = 0;
  420. }
  421. tmp[0] = WRITE_AND_READ;
  422. tmp[1] = (char)(send_bits >> 8); /* high */
  423. tmp[2] = (char)(send_bits); /* low */
  424. i = 0;
  425. for (i = 0; i < loops; i++)
  426. {
  427. tmp[3 + i] = buffer[bufindex];
  428. bufindex++;
  429. }
  430. if (usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000) == 64)
  431. {
  432. /* LOG_INFO("HALLLLOOO2 %i",(int)tmp[0]); */
  433. usleep(1);
  434. int timeout = 0;
  435. while (usb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 1000) < 1)
  436. {
  437. timeout++;
  438. if (timeout > 10)
  439. break;
  440. }
  441. for (i = 0; i < loops; i++)
  442. {
  443. swap = tmp[3 + i];
  444. buffer[fillindex++] = swap;
  445. }
  446. }
  447. }
  448. }
  449. static void usbprog_jtag_read_tdo(struct usbprog_jtag *usbprog_jtag, char * buffer, int size)
  450. {
  451. char tmp[64]; /* fastes packet size for usb controller */
  452. int send_bits, fillindex = 0, i, loops;
  453. char swap;
  454. /* 61 byte can be transfered (488 bit) */
  455. while (size > 0)
  456. {
  457. if (size > 488)
  458. {
  459. send_bits = 488;
  460. size = size - 488;
  461. loops = 61;
  462. }
  463. else
  464. {
  465. send_bits = size;
  466. loops = size / 8;
  467. loops++;
  468. size = 0;
  469. }
  470. tmp[0] = WRITE_AND_READ;
  471. tmp[1] = (char)(send_bits >> 8); /* high */
  472. tmp[2] = (char)(send_bits); /* low */
  473. usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 3, 1000);
  474. /* LOG_INFO("HALLLLOOO3 %i",(int)tmp[0]); */
  475. int timeout = 0;
  476. usleep(1);
  477. while (usb_bulk_read(usbprog_jtag->usb_handle, 0x82, tmp, 64, 10) < 1)
  478. {
  479. timeout++;
  480. if (timeout > 10)
  481. break;
  482. }
  483. for (i = 0; i < loops; i++)
  484. {
  485. swap = tmp[3 + i];
  486. buffer[fillindex++] = swap;
  487. }
  488. }
  489. }
  490. static void usbprog_jtag_write_tdi(struct usbprog_jtag *usbprog_jtag, char * buffer, int size)
  491. {
  492. char tmp[64]; /* fastes packet size for usb controller */
  493. int send_bits, bufindex = 0, i, loops;
  494. /* 61 byte can be transfered (488 bit) */
  495. while (size > 0)
  496. {
  497. if (size > 488)
  498. {
  499. send_bits = 488;
  500. size = size - 488;
  501. loops = 61;
  502. }
  503. else
  504. {
  505. send_bits = size;
  506. loops = size/8;
  507. /* if(loops==0) */
  508. loops++;
  509. size = 0;
  510. }
  511. tmp[0] = WRITE_TDI;
  512. tmp[1] = (char)(send_bits >> 8); /* high */
  513. tmp[2] = (char)(send_bits); /* low */
  514. i = 0;
  515. for (i = 0; i < loops; i++)
  516. {
  517. tmp[3 + i] = buffer[bufindex];
  518. bufindex++;
  519. }
  520. usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, 64, 1000);
  521. }
  522. }
  523. static void usbprog_jtag_write_tms(struct usbprog_jtag *usbprog_jtag, char tms_scan)
  524. {
  525. usbprog_jtag_tms_collect(tms_scan);
  526. }
  527. static void usbprog_jtag_set_direction(struct usbprog_jtag *usbprog_jtag, unsigned char direction)
  528. {
  529. char tmp[2];
  530. tmp[0] = PORT_DIRECTION;
  531. tmp[1] = (char)direction;
  532. usbprog_jtag_message(usbprog_jtag, tmp, 2);
  533. }
  534. static void usbprog_jtag_write_slice(struct usbprog_jtag *usbprog_jtag,unsigned char value)
  535. {
  536. char tmp[2];
  537. tmp[0] = PORT_SET;
  538. tmp[1] = (char)value;
  539. usbprog_jtag_message(usbprog_jtag, tmp, 2);
  540. }
  541. #if 0
  542. static unsigned char usbprog_jtag_get_port(struct usbprog_jtag *usbprog_jtag)
  543. {
  544. char tmp[2];
  545. tmp[0] = PORT_GET;
  546. tmp[1] = 0x00;
  547. return usbprog_jtag_message(usbprog_jtag, tmp, 2);
  548. }
  549. #endif
  550. static void usbprog_jtag_set_bit(struct usbprog_jtag *usbprog_jtag,int bit, int value)
  551. {
  552. char tmp[3];
  553. tmp[0] = PORT_SETBIT;
  554. tmp[1] = (char)bit;
  555. if (value == 1)
  556. tmp[2] = 0x01;
  557. else
  558. tmp[2] = 0x00;
  559. usbprog_jtag_message(usbprog_jtag, tmp, 3);
  560. }
  561. #if 0
  562. static int usbprog_jtag_get_bit(struct usbprog_jtag *usbprog_jtag, int bit)
  563. {
  564. char tmp[2];
  565. tmp[0] = PORT_GETBIT;
  566. tmp[1] = (char)bit;
  567. if (usbprog_jtag_message(usbprog_jtag, tmp, 2) > 0)
  568. return 1;
  569. else
  570. return 0;
  571. }
  572. #endif
  573. static void usbprog_jtag_tms_collect(char tms_scan)
  574. {
  575. tms_chain[tms_chain_index] = tms_scan;
  576. tms_chain_index++;
  577. }
  578. static void usbprog_jtag_tms_send(struct usbprog_jtag *usbprog_jtag)
  579. {
  580. int i;
  581. /* LOG_INFO("TMS SEND"); */
  582. if (tms_chain_index > 0)
  583. {
  584. char tmp[tms_chain_index + 2];
  585. tmp[0] = WRITE_TMS_CHAIN;
  586. tmp[1] = (char)(tms_chain_index);
  587. for (i = 0; i < tms_chain_index + 1; i++)
  588. tmp[2 + i] = tms_chain[i];
  589. usb_bulk_write(usbprog_jtag->usb_handle, 3, tmp, tms_chain_index + 2, 1000);
  590. tms_chain_index = 0;
  591. }
  592. }