I have problems trying to update the gateware on my freshly received ARTIQ system from 6.7621.d9b01ed8 to 6.7661.ca67ae83 . I created a device_db.py from the JSON config file and was able to communicate with the system and run simple test scripts, excecuting TTL signal events on the DIO-BNC.
Due to the warning

WARNING:artiq.coredevice.comm_kernel:Mismatch between gateware (6.7621.d9b01ed8) and software (6.7661.ca67ae83) versions

I wanted to update the gateware. I followed the instructions for Windows/conda from the documentation (flashing-gateware-and-firmware-into-the-core-device).

  • I conntected the crate to the PC via the USB cable (USB 2.0 port).
  • I installed the WinUSB driver via Zadig.
  • I checked the latest gateware build for my system on https://nixbld.m-labs.hk/jobset/artiq/full/latest-eval and installed it via conda install artiq-board-kasli-bonn (Is this the recommended way with conda?). Conda lists it as version 6.7661.ca67ae83 as desired.
  • I tried to write the flash via artiq_flash -V bonn with the following error message:
    (artiq) qumercury_artiq> artiq_flash -V bonn
    Design: top;COMPRESS=TRUE;UserID=FFFFFFFF;Version=2021.2
    Part name: 7a100tfgg484
    Date: 2022/04/07
    Time: 15:13:30
    Bitstream payload length: 0x24d334
    Open On-Chip Debugger 0.10.0-00008-gb0b5147 (2018-01-15-20:50)
    Licensed under GNU GPL v2
    For bug reports, read
            http://openocd.org/doc/doxygen/bugs.html
    none separate
    adapter speed: 25000 kHz
    Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
    Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
    Info : clock speed 25000 kHz
    Info : JTAG tap: xc7.tap tap/device found: 0x13631093 (mfg: 0x049 (Xilinx), part: 0x3631, ver: 0x1)
    Info : gdb server disabled
    invalid command name "xadc_report"
    Traceback (most recent call last):
      File "C:\tools\miniconda3\envs\artiq\Scripts\artiq_flash-script.py", line 9, in <module>
        sys.exit(main())
      File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\frontend\artiq_flash.py", line 474, in main
        programmer.run()
      File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\frontend\artiq_flash.py", line 207, in run
        self._client.run_command(cmdline)
      File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\remoting.py", line 57, in run_command
        subprocess.check_call([arg.format(tmp=self._tmp, **kws) for arg in cmd])
      File "C:\tools\miniconda3\envs\artiq\lib\subprocess.py", line 364, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['openocd', '-s', 'C:\\tools\\miniconda3\\envs\\artiq\\Library\\share\\openocd\\scripts', '-c', 'source [find board/kasli.cfg]; target create xc7.spi0.proxy testee -chain-position xc7.tap; flash bank spi0 jtagspi 0 0 0 0 xc7.spi0.proxy 0x2; gdb_port disabled; tcl_port disabled; telnet_port disabled; init; xadc_report xc7.tap; pld load 0 {C:\\tools\\miniconda3\\envs\\artiq\\share\\bscan-spi-bitstreams\\bscan_spi_xc7a100t.bit}; flash probe spi0; flash erase_sector spi0 0 36; flash write_bank spi0 {C:\\Users\\QUMERC~1\\AppData\\Local\\Temp\\artiq_bsj9b3gk_top.bit} 0x0; flash verify_bank spi0 {C:\\Users\\QUMERC~1\\AppData\\Local\\Temp\\artiq_bsj9b3gk_top.bit} 0x0; flash probe spi0; flash erase_sector spi0 64 66; flash write_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\bootloader.bin} 0x400000; flash verify_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\bootloader.bin} 0x400000; flash probe spi0; flash erase_sector spi0 69 78; flash write_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\runtime.fbi} 0x450000; flash verify_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\runtime.fbi} 0x450000; xc7_program xc7.tap; exit']' returned non-zero exit status 1.
    As far as I can see this boils down to a libusb error Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED and a problem originating from calling openbcd with the error message invalid command name "xadc_report".

I don't have a linux machine at hand at the moment, but I tried to flash the gateware from WSL, but with failing early by not get nix daemon running without systemd. So I would like to make this work under Windows if possible.

Any help is appreciated. Thanks!

    ThorstenGroh failing early by not get nix daemon running without systemd

    I think the nix daemon is not necessary for a single-user Nix install. I don't know if OpenOCD works inside WSL though.

      sb10q
      Thanks. Yes, indeed a single-user Nix enables me to install ARTIQ as documented. I added artiq-full.artiq-board-kasli-bonn to the nix file for installation.

      Running artiq_flash -V bonn from within WSL however seems not find the board.

      [nix-shell:~]$ artiq_flash -V bonn
      Design: top;COMPRESS=TRUE;UserID=FFFFFFFF;Version=2021.2
      Part name: 7a100tfgg484
      Date: 2022/04/07
      Time: 15:13:30
      Bitstream payload length: 0x24d334
      Open On-Chip Debugger 0.11.0+dev-snapshot (2022-01-04-10:01)
      Licensed under GNU GPL v2
      For bug reports, read
              http://openocd.org/doc/doxygen/bugs.html
      Error: no device found
      Error: unable to open ftdi device with vid 0403, pid 6011, description 'Quad RS232-HS', serial '*' at bus location '*'
      
      Traceback (most recent call last):
        File "/nix/store/73jhsgwx20xyfmdqqk1cbmg27xv2cg8h-python3.8-artiq-6.7661.ca67ae83/bin/.artiq_flash-wrapped", line 9, in <module>
          sys.exit(main())
        File "/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/frontend/artiq_flash.py", line 474, in main
          programmer.run()
        File "/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/frontend/artiq_flash.py", line 207, in run
          self._client.run_command(cmdline)
        File "/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/remoting.py", line 57, in run_command
          subprocess.check_call([arg.format(tmp=self._tmp, **kws) for arg in cmd])
        File "/nix/store/j2hdhabhzvwy7zbw96pi7m7i066snh2i-python3-3.8.11/lib/python3.8/subprocess.py", line 364, in check_call
          raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command '['openocd', '-s', '/nix/store/sxf36v7mradwz1rdi179hi9s4mab0djl-openocd-bscanspi/share/openocd/scripts', '-c', 'source [find board/kasli.cfg]; target create xc7.spi0.proxy testee -chain-position xc7.tap; flash bank spi0 jtagspi 0 0 0 0 xc7.spi0.proxy 0x2; gdb_port disabled; tcl_port disabled; telnet_port disabled; init; xadc_report xc7.tap; pld load 0 {/nix/store/sxf36v7mradwz1rdi179hi9s4mab0djl-openocd-bscanspi/share/bscan-spi-bitstreams/bscan_spi_xc7a100t.bit}; flash probe spi0; flash erase_sector spi0 0 36; flash write_bank spi0 {/tmp/artiq_z6plutr7_top.bit} 0x0; flash verify_bank spi0 {/tmp/artiq_z6plutr7_top.bit} 0x0; flash probe spi0; flash erase_sector spi0 64 66; flash write_bank spi0 {/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/board-support/kasli-bonn/bootloader.bin} 0x400000; flash verify_bank spi0 {/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/board-support/kasli-bonn/bootloader.bin} 0x400000; flash probe spi0; flash erase_sector spi0 69 78; flash write_bank spi0 {/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/board-support/kasli-bonn/runtime.fbi} 0x450000; flash verify_bank spi0 {/nix/store/6nvdvfqy8xaqb9j8s47clz58ml7rhp5f-python3-3.8.11-env/lib/python3.8/site-packages/artiq/board-support/kasli-bonn/runtime.fbi} 0x450000; xc7_program xc7.tap; exit']' returned non-zero exit status 1.

      If you think this might be a Windows/conda issue I can try to get my hands on a linux machine in the next days, but I would really like to make this work under Windows as well.

      invalid command name "xadc_report" looks like a bad openocd package. Is that from the m-labs conda channel?

      Yes, the openocd is from the m-labs conda channel.

      (artiq) qumercury_artiq> mamba list openocd
      # packages in environment at C:\tools\miniconda3\envs\artiq:
      #
      # Name                    Version                   Build  Channel
      openocd                   0.10.0+git2          hf4984f1_0    m-labs

      Reinstalled it via mamba install openocd -c m-labs --force-reinstall, but this did not help.

      With the 0.10.0+git1 or 0.10.0.git versions of openocd I however get a Can't find board/kasli.cfg:

      (artiq) qumercury_artiq> mamba list openocd
      # packages in environment at C:\tools\miniconda3\envs\artiq:
      #
      # Name                    Version                   Build  Channel
      openocd                   0.10.0+git1          h3b6d3d0_0    m-labs
      (artiq) qumercury_artiq> artiq_flash -V bonn
      Design: top;COMPRESS=TRUE;UserID=FFFFFFFF;Version=2021.2
      Part name: 7a100tfgg484
      Date: 2022/04/07
      Time: 15:13:30
      Bitstream payload length: 0x24d334
      Open On-Chip Debugger 0.10.0-00007-g977d9e4 (2017-10-23-23:27)
      Licensed under GNU GPL v2
      For bug reports, read
              http://openocd.org/doc/doxygen/bugs.html
      Can't find board/kasli.cfg
      Traceback (most recent call last):
        File "C:\tools\miniconda3\envs\artiq\Scripts\artiq_flash-script.py", line 9, in <module>
          sys.exit(main())
        File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\frontend\artiq_flash.py", line 474, in main
          programmer.run()
        File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\frontend\artiq_flash.py", line 207, in run
          self._client.run_command(cmdline)
        File "C:\tools\miniconda3\envs\artiq\lib\site-packages\artiq\remoting.py", line 57, in run_command
          subprocess.check_call([arg.format(tmp=self._tmp, **kws) for arg in cmd])
        File "C:\tools\miniconda3\envs\artiq\lib\subprocess.py", line 364, in check_call
          raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command '['openocd', '-s', 'C:\\tools\\miniconda3\\envs\\artiq\\Library\\share\\openocd\\scripts', '-c', 'source [find board/kasli.cfg]; target create xc7.spi0.proxy testee -chain-position xc7.tap; flash bank spi0 jtagspi 0 0 0 0 xc7.spi0.proxy 0x2; gdb_port disabled; tcl_port disabled; telnet_port disabled; init; xadc_report xc7.tap; pld load 0 {C:\\tools\\miniconda3\\envs\\artiq\\share\\bscan-spi-bitstreams\\bscan_spi_xc7a100t.bit}; flash probe spi0; flash erase_sector spi0 0 36; flash write_bank spi0 {C:\\Users\\QUMERC~1\\AppData\\Local\\Temp\\artiq_cczlf6u1_top.bit} 0x0; flash verify_bank spi0 {C:\\Users\\QUMERC~1\\AppData\\Local\\Temp\\artiq_cczlf6u1_top.bit} 0x0; flash probe spi0; flash erase_sector spi0 64 66; flash write_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\bootloader.bin} 0x400000; flash verify_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\bootloader.bin} 0x400000; flash probe spi0; flash erase_sector spi0 69 78; flash write_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\runtime.fbi} 0x450000; flash verify_bank spi0 {C:\\tools\\miniconda3\\envs\\artiq\\lib\\site-packages\\artiq\\board-support\\kasli-bonn\\runtime.fbi} 0x450000; xc7_program xc7.tap; exit']' returned non-zero exit status 1.

      With the version 0.10.0+git1 of openocd this is a file problem. The kasli.cfg does not exist under C:\tools\miniconda3\envs\[ENVIRONMENT NAME]\Library\share\openocd\scripts\board. If I copy that file from the 0.10.0+git2 version to the location in the 0.10.0+git1 installation desired folder this specific error message is gone, but I again get the invalid command name "xadc_report" error message from before. So the problem persists.

      Any ideas?

      I just downloaded and installed an older openocd version from anaconda (mamba install https://anaconda.org/m-labs/openocd/0.10.0/download/win-64/openocd-0.10.0-6.tar.bz2).
      This now seems to be more promising. The error message is gone, the flashing is in progress:

      (artiq_20220412) PS C:\Users\quMercury\Software\qumercury_artiq> artiq_flash -V bonn
      Design: top;COMPRESS=TRUE;UserID=FFFFFFFF;Version=2021.2
      Part name: 7a100tfgg484
      Date: 2022/04/07
      Time: 15:13:30
      Bitstream payload length: 0x24d334
      Open On-Chip Debugger 0.10.0-00013-gbb7bedad (2018-02-17-05:04)
      Licensed under GNU GPL v2
      For bug reports, read
              http://openocd.org/doc/doxygen/bugs.html
      none separate
      adapter speed: 25000 kHz
      Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
      Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
      Info : clock speed 25000 kHz
      Info : JTAG tap: xc7.tap tap/device found: 0x13631093 (mfg: 0x049 (Xilinx), part: 0x3631, ver: 0x1)
      Info : gdb server disabled
      TEMP 64.72 C
      VCCINT 0.984 V
      VCCAUX 1.783 V
      VCCBRAM 0.990 V
      VPVN 0.000 V
      VREFP 0.000 V
      VREFN 0.000 V
      VCCPINT 0.000 V
      VCCPAUX 0.000 V
      VCCODDR 0.000 V
      loaded file C:\tools\miniconda3\envs\artiq_20220412\share\bscan-spi-bitstreams\bscan_spi_xc7a100t.bit to pld device 0 in 0s 256024us
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      flash 'jtagspi' found at 0x00000000
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      Info : sector 0 took 1760 ms
      Info : sector 1 took 1785 ms
      Info : sector 2 took 115 ms
      Info : sector 3 took 122 ms
      Info : sector 4 took 116 ms
      Info : sector 5 took 130 ms
      Info : sector 6 took 118 ms
      Info : sector 7 took 115 ms
      Info : sector 8 took 100 ms
      Info : sector 9 took 123 ms
      Info : sector 10 took 115 ms
      Info : sector 11 took 116 ms
      Info : sector 12 took 115 ms
      Info : sector 13 took 116 ms
      Info : sector 14 took 116 ms
      Info : sector 15 took 122 ms
      Info : sector 16 took 116 ms
      Info : sector 17 took 115 ms
      Info : sector 18 took 116 ms
      Info : sector 19 took 115 ms
      Info : sector 20 took 117 ms
      Info : sector 21 took 102 ms
      Info : sector 22 took 120 ms
      Info : sector 23 took 110 ms
      Info : sector 24 took 103 ms
      Info : sector 25 took 116 ms
      Info : sector 26 took 115 ms
      Info : sector 27 took 116 ms
      Info : sector 28 took 116 ms
      Info : sector 29 took 121 ms
      Info : sector 30 took 116 ms
      Info : sector 31 took 116 ms
      Info : sector 32 took 116 ms
      Info : sector 33 took 100 ms
      Info : sector 34 took 115 ms
      Info : sector 35 took 116 ms
      Info : sector 36 took 123 ms
      erased sectors 0 through 36 on flash bank 1 in 7.587875s
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      wrote 2413364 bytes from file C:\Users\QUMERC~1\AppData\Local\Temp\artiq_pcck47z2_top.bit to flash bank 1 at offset 0x00000000 in 158.169235s (14.901 KiB/s)
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      read 2413364 bytes from file C:\Users\QUMERC~1\AppData\Local\Temp\artiq_pcck47z2_top.bit and flash bank 1 at offset 0x00000000 in 1.434285s (1643.189 KiB/s)
      contents match
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      flash 'jtagspi' found at 0x00000000
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      Info : sector 64 took 116 ms
      Info : sector 65 took 116 ms
      Info : sector 66 took 116 ms
      erased sectors 64 through 66 on flash bank 1 in 0.347345s
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      wrote 133860 bytes from file C:\tools\miniconda3\envs\artiq_20220412\lib\site-packages\artiq\board-support\kasli-bonn\bootloader.bin to flash bank 1 at offset 0x00400000 in 8.772617s (14.901 KiB/s)
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      read 133860 bytes from file C:\tools\miniconda3\envs\artiq_20220412\lib\site-packages\artiq\board-support\kasli-bonn\bootloader.bin and flash bank 1 at offset 0x00400000 in 0.084837s (1540.869 KiB/s)
      contents match
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      flash 'jtagspi' found at 0x00000000
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      Info : sector 69 took 131 ms
      Info : sector 70 took 116 ms
      Info : sector 71 took 117 ms
      Info : sector 72 took 114 ms
      Info : sector 73 took 122 ms
      Info : sector 74 took 116 ms
      Info : sector 75 took 116 ms
      Info : sector 76 took 115 ms
      Info : sector 77 took 116 ms
      Info : sector 78 took 103 ms
      erased sectors 69 through 78 on flash bank 1 in 1.166532s
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      wrote 649344 bytes from file C:\tools\miniconda3\envs\artiq_20220412\lib\site-packages\artiq\board-support\kasli-bonn\runtime.fbi to flash bank 1 at offset 0x00450000 in 42.395931s (14.957 KiB/s)
      Info : Found flash device 'sp s25fl128' (ID 0x00182001)
      read 649344 bytes from file C:\tools\miniconda3\envs\artiq_20220412\lib\site-packages\artiq\board-support\kasli-bonn\runtime.fbi and flash bank 1 at offset 0x00450000 in 0.384467s (1649.361 KiB/s)
      contents match

      This finished in a few minutes. Does that look good? Excecuting scripts via artiq_run does not throw the version warning anymore and the simple TTL tests I am running currently still seem to work.

      So that was indeed a problem with openocd. Where is the m-labs version of openocd hosted? Where do I file a bug report for that?

      Another question: Is there a way to revert gateware flashes? How do I obtain older gateware versions? Conda lists one version only.

        That log looks good. Between different git versions of the same stable major release I would not expect any protocol incompatibility. It's only a warning. But certainly good to practice flashing and that also removes the version mismatch warning.
        I think an issue filed would be good. https://git.m-labs.hk/M-Labs/nix-scripts would be the adequate repo most likely.
        I think you can get old conda packages directly from nixbld.m-labs.hk.

          ThorstenGroh Where is the m-labs version of openocd hosted?

          https://anaconda.org/m-labs/openocd/files is the right one currently. How did you install the first one (that did not work)?
          Without conda, I think the upstream MSYS2 package with just the bscanspi bitstreams added should also work (and we will probably switch to that in ARTIQ-8), but I have not tested it yet.

          ThorstenGroh How do I obtain older gateware versions?

          You can use those conda channels: https://conda.m-labs.hk/artiq-archives/ e.g. add https://conda.m-labs.hk/artiq-archives/108802/ as a conda channel instead.
          The numbers are the build numbers of the artiq:full:conda-channel job which can be referenced on the Hydra interface e.g. https://nixbld.m-labs.hk/build/118130

            sb10q How did you install the first one (that did not work)?

            The first package also came from m-labs anaconda repo: conda install -c m-labs openocd, I also tried other versions available there via conda install -c m-labs openocd=0.10.0+git1 for example. Both did not work.

            Well, that doesn't make a lot of sense, conda install -c m-labs is supposed to install the latest version from that very same Anaconda URL. Maybe conda's completely broken dependency handler chose an older version for some reason (this is why, by the way, the channels on conda.m-labs.hk are designed to show conda only one possible version for each package).
            Anyway this problem (and many others in the same vein) will be resolved for good once we stop using conda completely and switch to MSYS2.

            conda install openocd -c m-labs installs the 0.10.0+git2 version on my machine. conda search openocd -c m-labs lists the following packages:

            # Name                       Version           Build  Channel
            openocd                   0.10.0.git               1  m-labs
            openocd                  0.10.0+git1      h3b6d3d0_0  m-labs
            openocd                  0.10.0+git2      hf4984f1_0  m-labs
            openocd                       0.10.0               1  m-labs
            openocd                       0.10.0               6  m-labs
            openocd                       0.10.0      h6833691_3  m-labs
            openocd                       0.10.0      h85cd1cf_4  m-labs
            openocd                       0.10.0      ha3de3d5_6  m-labs

            The older version (conda install https://anaconda.org/m-labs/openocd/0.10.0/download/win-64/openocd-0.10.0-6.tar.bz2) that worked for me lists as:

            # Name                    Version                   Build  Channel
            openocd                   0.10.0                        6    https://anaconda.org/m-labs/openocd/0.10.0/download