0

我有一个连接到 Mac(Big Sur)的 TinyFPGA BX 板我正在尝试使用 tinyprog(https://pypi.org/project/tinyprog/)将新的引导加载程序上传到该板。我正在运行这个

>>>from tinyprog import *
>>>from tinyprog.__main__ import perform_bootloader_update
>>>tinyport=get_ports('1d50:6130')
>>>perform_bootloader_update(tinyport[0])

结果是:


    The following update:

        New Version: 1.0.1
        Notes: Updates USB VID:PID to fix issues with APIO not recognizing the board.

    is available for this board:

        USB 20.3: TinyFPGA BX 1.0.0
            UUID: cfaef439-1b38-4576-b1bc-970b9f5d5ee1
            FPGA: ice40lp8k-cm81

    Would you like to perform the update? [y/N] y
    Fetching stage one...
    Programming stage one...

    Erasing: 100%|████████████████████████████| 135k/135k [00:00<00:00, 175kB/s]
    Writing: 100%|████████████████████████████| 135k/135k [00:00<00:00, 163kB/s]
    Reading: 100%|████████████████████████████| 135k/135k [00:00<00:00, 344kB/s]

---------------------------------------------------------------------------
USBError                                  Traceback (most recent call last)
/var/folders/n5/kk2vsh296_s0w454yrchd3f00000gn/T/ipykernel_13323/2827260816.py in <module>
----> 1 perform_bootloader_update(tinyport[0])

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__main__.py in perform_bootloader_update(port)
    149             userimage_addr = p.meta.userimage_addr_range()[0]
    150             if p.program_bitstream(userimage_addr, bitstream):
--> 151                 p.boot()
    152                 print("    ...Success!")
    153             else:

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__init__.py in boot(self)
    386     def boot(self):
    387         try:
--> 388             self.ser.write(b"\x00")
    389             self.ser.flush()
    390         except SerialTimeoutException as e:

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__init__.py in write(self, data)
     90 
     91     def write(self, data):
---> 92         self.OUT.write(data)
     93 
     94     def flush(self):

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/core.py in write(self, data, timeout)
    406         For details, see the Device.write() method.
    407         """
--> 408         return self.device.write(self, data, timeout)
    409 
    410     def read(self, size_or_buffer, timeout = None):

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/core.py in write(self, endpoint, data, timeout)
    987         fn = fn_map[util.endpoint_type(ep.bmAttributes)]
    988 
--> 989         return fn(
    990                 self._ctx.handle,
    991                 ep.bEndpointAddress,

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in bulk_write(self, dev_handle, ep, intf, data, timeout)
    835     @methodtrace(_logger)
    836     def bulk_write(self, dev_handle, ep, intf, data, timeout):
--> 837         return self.__write(self.lib.libusb_bulk_transfer,
    838                             dev_handle,
    839                             ep,

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in __write(self, fn, dev_handle, ep, intf, data, timeout)
    936         # do not assume LIBUSB_ERROR_TIMEOUT means no I/O.
    937         if not (transferred.value and retval == LIBUSB_ERROR_TIMEOUT):
--> 938             _check(retval)
    939 
    940         return transferred.value

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in _check(ret)
    602             raise USBTimeoutError(_strerror(ret), ret, _libusb_errno[ret])
    603         else:
--> 604             raise USBError(_strerror(ret), ret, _libusb_errno[ret])
    605 
    606     return ret

USBError: [Errno 5] Input/Output Error

我对此的理解是,板子可以更新,但是 tinyprog 正在尝试启动板子,但失败了。我可以仅使用 pyusb 访问此 USB 设备,但是当我尝试在 pyusb 中使用 ser.write 写入时,再次出现相同的错误。

这是电路板本身的问题还是 tinyprog 无法正常工作?

4

0 回答 0