Merge branch 'main' into nx_support
authorGregory Davill <greg.davill@gmail.com>
Sat, 4 Dec 2021 07:44:52 +0000 (18:14 +1030)
committerGitHub <noreply@github.com>
Sat, 4 Dec 2021 07:44:52 +0000 (18:14 +1030)
1  2 
ecpprog/ecpprog.c
ecpprog/jtag_tap.c

index 87a7200505e2165c605d9e8dd13c66e60ad47a12,316000da27551e94b6b5d760afbd8d95d1cee096..7d2037000ec0108cec3bb32d3b41ae7bc0a2f8af
@@@ -732,12 -611,10 +743,13 @@@ static void help(const char *progname
        fprintf(stderr, "  -o <offset in bytes>  start address for read/write [default: 0]\n");
        fprintf(stderr, "                          (append 'k' to the argument for size in kilobytes,\n");
        fprintf(stderr, "                          or 'M' for size in megabytes)\n");
 -      fprintf(stderr, "  -s                    slow SPI (50 kHz instead of 6 MHz)\n");
 +      fprintf(stderr, "  -k <divider>          divider for SPI clock [default: 1]\n");
 +      fprintf(stderr, "                          clock speed is 6MHz/divider");
 +      fprintf(stderr, "  -s                    slow SPI. (50 kHz instead of 6 MHz)\n");
 +      fprintf(stderr, "                          Equivalent to -k 30\n");
        fprintf(stderr, "  -v                    verbose output\n");
        fprintf(stderr, "  -i [4,32,64]          select erase block size [default: 64k]\n");
+       fprintf(stderr, "  -a                    reinitialize the device after any operation\n");
        fprintf(stderr, "\n");
        fprintf(stderr, "Mode of operation:\n");
        fprintf(stderr, "  [default]             write file contents to flash, then verify\n");
@@@ -789,8 -666,8 +801,9 @@@ int main(int argc, char **argv
        int erase_block_size = 64;
        int erase_size = 0;
        int rw_offset = 0;
 +      int clkdiv = 1;
  
+       bool reinitialize = false;
        bool read_mode = false;
        bool check_mode = false;
        bool erase_mode = false;
index f791bdc981206aeeb43c3be4763ad7c24bd20df7,538d675bca676383ff337e368defa691c3552e79..a6d508d78c0a9a77e7eb7ae2b56bfcdafbc75870
@@@ -130,12 -130,12 +130,12 @@@ void jtag_deinit()
  /**
   * Performs any start-of-day tasks necessary to talk JTAG to our FPGA.
   */
 -void jtag_init(int ifnum, const char *devstr, bool slow_clock)
 +void jtag_init(int ifnum, const char *devstr, int clkdiv)
  {
 -      mpsse_init(ifnum, devstr, slow_clock);
 +      mpsse_init(ifnum, devstr, clkdiv);
  
        jtag_set_current_state(STATE_TEST_LOGIC_RESET);
-     jtag_go_to_state(STATE_TEST_LOGIC_RESET);
+       jtag_go_to_state(STATE_TEST_LOGIC_RESET);
  }
  
  uint8_t data[32*1024];
@@@ -146,9 -146,9 +146,9 @@@ extern struct ftdi_context mpsse_ftdic
  
  static inline void jtag_pulse_clock_and_read_tdo(bool tms, bool tdi)
  {
-     *ptr++ = MC_DATA_TMS | MC_DATA_IN | MC_DATA_LSB | MC_DATA_BITS | MC_DATA_OCN | MC_DATA_ICN;
 -      *ptr++ = MC_DATA_TMS | MC_DATA_IN | MC_DATA_LSB | MC_DATA_BITS | MC_DATA_OCN;
++  *ptr++ = MC_DATA_TMS | MC_DATA_IN | MC_DATA_LSB | MC_DATA_BITS | MC_DATA_OCN | MC_DATA_ICN;
        *ptr++ =  0;        
-     *ptr++ = (tdi ? 0x80 : 0) | (tms ? 0x01 : 0);
+       *ptr++ = (tdi ? 0x80 : 0) | (tms ? 0x01 : 0);
        rx_cnt++;
  }