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.
 
 
 
 
 
 

79 lines
3.7 KiB

  1. /**************************************************************************
  2. * Copyright (C) 2012 by Andreas Fritiofson *
  3. * andreas.fritiofson@gmail.com *
  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, see <http://www.gnu.org/licenses/>. *
  17. ***************************************************************************/
  18. #ifndef OPENOCD_JTAG_DRIVERS_MPSSE_H
  19. #define OPENOCD_JTAG_DRIVERS_MPSSE_H
  20. #include <stdbool.h>
  21. #include "helper/binarybuffer.h"
  22. /* Mode flags */
  23. #define POS_EDGE_OUT 0x00
  24. #define NEG_EDGE_OUT 0x01
  25. #define POS_EDGE_IN 0x00
  26. #define NEG_EDGE_IN 0x04
  27. #define MSB_FIRST 0x00
  28. #define LSB_FIRST 0x08
  29. enum ftdi_chip_type {
  30. TYPE_FT2232C,
  31. TYPE_FT2232H,
  32. TYPE_FT4232H,
  33. TYPE_FT232H,
  34. };
  35. struct mpsse_ctx;
  36. /* Device handling */
  37. struct mpsse_ctx *mpsse_open(const uint16_t *vid, const uint16_t *pid, const char *description,
  38. const char *serial, const char *location, int channel);
  39. void mpsse_close(struct mpsse_ctx *ctx);
  40. bool mpsse_is_high_speed(struct mpsse_ctx *ctx);
  41. /* Command queuing. These correspond to the MPSSE commands with the same names, but no need to care
  42. * about bit/byte transfer or data length limitation. Read data is guaranteed to be available only
  43. * after the following mpsse_flush(). */
  44. void mpsse_clock_data_out(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_offset,
  45. unsigned length, uint8_t mode);
  46. void mpsse_clock_data_in(struct mpsse_ctx *ctx, uint8_t *in, unsigned in_offset, unsigned length,
  47. uint8_t mode);
  48. void mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_offset, uint8_t *in,
  49. unsigned in_offset, unsigned length, uint8_t mode);
  50. void mpsse_clock_tms_cs_out(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_offset,
  51. unsigned length, bool tdi, uint8_t mode);
  52. void mpsse_clock_tms_cs(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_offset, uint8_t *in,
  53. unsigned in_offset, unsigned length, bool tdi, uint8_t mode);
  54. void mpsse_set_data_bits_low_byte(struct mpsse_ctx *ctx, uint8_t data, uint8_t dir);
  55. void mpsse_set_data_bits_high_byte(struct mpsse_ctx *ctx, uint8_t data, uint8_t dir);
  56. void mpsse_read_data_bits_low_byte(struct mpsse_ctx *ctx, uint8_t *data);
  57. void mpsse_read_data_bits_high_byte(struct mpsse_ctx *ctx, uint8_t *data);
  58. void mpsse_loopback_config(struct mpsse_ctx *ctx, bool enable);
  59. void mpsse_set_divisor(struct mpsse_ctx *ctx, uint16_t divisor);
  60. int mpsse_divide_by_5_config(struct mpsse_ctx *ctx, bool enable);
  61. int mpsse_rtck_config(struct mpsse_ctx *ctx, bool enable);
  62. /* Helper to set frequency in Hertz. Returns actual realizable frequency or negative error.
  63. * Frequency 0 means RTCK. */
  64. int mpsse_set_frequency(struct mpsse_ctx *ctx, int frequency);
  65. /* Queue handling */
  66. int mpsse_flush(struct mpsse_ctx *ctx);
  67. void mpsse_purge(struct mpsse_ctx *ctx);
  68. #endif /* OPENOCD_JTAG_DRIVERS_MPSSE_H */