def close(self): # close channel A if bool(self.ft_ctx.usb_dev): print "Closing FTDI Interface" ftdi.ftdi_set_bitmode(self.ft_ctx, 0xfb, ftdi.BITMODE_RESET) ftdi.ftdi_usb_close(self.ft_ctx) ftdi.ftdi_deinit(self.ft_ctx)
def fermerPort(ftdiContext): # Exemple de desactivation des compteurs ftdi.ftdi_set_bitmode(ftdiContext, NO_PORT, ftdi.BITMODE_CBUS); ret = ftdi.ftdi_usb_close(ftdiContext) if ret < 0: raise IOError("Impossible de fermer le port : " + repr(ret) + "(" + ftdi.ftdi_get_error_string(ftdiContext) + ")") ftdi.ftdi_deinit(ftdiContext); del ftdiContext
def __init__(self, ftdic, scl, sda_out, sda_in, speed_hz, direction): direction |= (1 << scl) | (1 << sda_out) direction &= ~(1 << sda_in) self.ftdic = ftdic self.scl = scl self.sda_out = sda_out self.dir = direction self.wr_buffer = bytearray() self.dest = [] self.i2c_error = False self.hw_error = 0 self.gpio = 0 ret = ftdi.ftdi_set_bitmode(ftdic, direction & 0xff, ftdi.BITMODE_MPSSE) if ret < 0: raise Exception("ftdi_set_bitmode failed", ret) self.cmd(ftdi.GET_BITS_LOW) self.dest.append(lambda b: self.read_initial(b, False)) self.cmd(ftdi.GET_BITS_HIGH) self.dest.append(lambda b: self.read_initial(b, True)) self.flush_all() self.set_rate(speed_hz) self.cmd(ftdi.DIS_ADAPTIVE) self.cmd(ftdi.EN_3_PHASE) self.three_phase = True self.append_data_clock((1, 1)) self.flush_all()
def ouvrirPort(port): # Création du context ftdiContext = ftdi.ftdi_context() # Initialisation du context if ftdi.ftdi_init(ftdiContext) < 0: raise IOError("Echec de l'initialisation") # Ouverture du port ret = ftdi.ftdi_usb_open(ftdiContext, 0x0403, 0x6001) if (ret) < 0: raise IOError("Impossible d'ouvrir le port " + hex(port) + " : " + repr(ret) + "(" + ftdi.ftdi_get_error_string(ftdiContext) + ")") # Fixer le debit à 1200 bit/s => 150 car/s (8 bits/car) ret = ftdi.ftdi_set_baudrate(ftdiContext, 1200) if (ret) < 0: raise IOError("Impossible de fixer le baudrate pour le port " + hex(port) + " : " + repr(ret) + "(" + ftdi.ftdi_get_error_string(ftdiContext) + ")") # Pour une obscure raison pour le moment il faut mettre ftdi.BITS_8 # et non ftdi.BITS_7 comme indiqué dans la spec pour que cela fonctionne ??? ret = ftdi.ftdi_set_line_property(ftdiContext, ftdi.BITS_8, ftdi.EVEN, ftdi.STOP_BIT_1) # Activation du compteur 1 et lecture de qqes trames ret = ftdi.ftdi_set_bitmode(ftdiContext, port, ftdi.BITMODE_CBUS); # Fixer le timeout de lecture ftdiContext.usb_read_timeout = 50000; return ftdiContext
def selectPort(self, port): """ Select the giver port """ err = ftdi.ftdi_set_bitmode(self.__ftdic, port, ftdi.BITMODE_CBUS) if err < 0: self._log.error("Can't set bitmode (%d, %s)" % (err, ftdi.ftdi_get_error_string(self.__ftdic))) raise FtdiError("Can't set bitmode (%d, %s)" % (err, ftdi.ftdi_get_error_string(self.__ftdic))) time.sleep(0.1)
def __init__(self): ''' Docstring Parameters ---------- Returns ------- ''' super(Button, self).__init__() self.port = None port = ftdi.ftdi_new() usb_open = ftdi.ftdi_usb_open_string(port, "s:0x403:0x6001:2eb80091") assert usb_open == 0, ftdi.ftdi_get_error_string(port) ftdi.ftdi_set_bitmode(port, 0xFF, ftdi.BITMODE_BITBANG) self.port = port self.queue = queue.Queue() self.daemon = True self.start()
def __init__(self): ''' Docstring Parameters ---------- Returns ------- ''' super(Button, self).__init__() self.port = None port = ftdi.ftdi_new() usb_open = ftdi.ftdi_usb_open_string(port, "s:0x403:0x6001:2eb80091") assert usb_open == 0, ftdi.ftdi_get_error_string(port) ftdi.ftdi_set_bitmode(port, 0xFF, ftdi.BITMODE_BITBANG) self.port = port self.queue = Queue.Queue() self.daemon = True self.start()
def reset(self, bootloader=False): handle = ftdi.ftdi_context() if ftdi.ftdi_init(handle) < 0: print 'Initialization error.', print sys.exit(-1) serialnum = self.getFTDIIdFromDevPort(self.port) if subprocess.call(['rmmod', 'ftdi_sio']) != 0: print 'Close all processes that may access serial ports. You may also need to run the program as root.', print sys.exit(-1) error = ftdi.ftdi_usb_open_desc(handle, FT232R_VENDOR, FT232R_PRODUCT, None, serialnum) if error < 0: print ('Unable to open port. Error:' + str(error)), print subprocess.call(['modprobe', 'ftdi_sio']) sys.exit(-1) item0, item1 = self.guessResetDirection(handle) resetValue = item0 nBootValue = item1 if (resetValue, nBootValue) == (None, None): ftdi.ftdi_usb_close(handle) subprocess.call(['modprobe', 'ftdi_sio']) return 1 else: ftdi.ftdi_set_bitmode(handle, resetValue, ftdi.BITMODE_CBUS) time.sleep(0.5) if bootloader: ftdi.ftdi_set_bitmode(handle, nBootValue, ftdi.BITMODE_CBUS) time.sleep(0.10000000000000001) ftdi.ftdi_set_bitmode(handle, 0, ftdi.BITMODE_CBUS) ftdi.ftdi_usb_close(handle) subprocess.call(['modprobe', 'ftdi_sio']) time.sleep(1) return None
def __init__(self): # open channel A self.ft_ctx = ftdi.ftdi_context() if ftdi.ftdi_init(self.ft_ctx) < 0: raise RuntimeError("ftdi_init failed") ftdi.ftdi_set_interface(self.ft_ctx, ftdi.INTERFACE_A) if ftdi.ftdi_usb_open(self.ft_ctx, 0x0403, 0x6010) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(self.ft_ctx)) try: # open and purge channel B ft_ctx_b = ftdi.ftdi_context() if ftdi.ftdi_init(ft_ctx_b) < 0: raise RuntimeError("ftdi_init failed") ftdi.ftdi_set_interface(ft_ctx_b, ftdi.INTERFACE_B) if ftdi.ftdi_usb_open(ft_ctx_b, 0x0403, 0x6010) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(ft_ctx_b)) # purge buffers if ftdi.ftdi_usb_purge_buffers(ft_ctx_b) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(ft_ctx_b)) # close channel B ftdi.ftdi_usb_close(ft_ctx_b) ftdi.ftdi_deinit(ft_ctx_b) except RuntimeError: self.close() raise # setup FIFO mode try: self.ft_ctx.usb_read_timeout = 5000000 self.ft_ctx.usb_write_timeout = 5000000 ftdi.ftdi_read_data_set_chunksize(self.ft_ctx, self.READ_CHUNKSIZE) ftdi.ftdi_write_data_set_chunksize(self.ft_ctx, self.WRITE_CHUNKSIZE) if ftdi.ftdi_usb_reset(self.ft_ctx) != 0: raise RuntimeError("Reset failed") time.sleep(100e-3) if ftdi.ftdi_set_bitmode(self.ft_ctx, 0, ftdi.BITMODE_SYNCFF) != 0: raise RuntimeError("Setting FIFO mode failed") if ftdi.ftdi_set_latency_timer(self.ft_ctx, 1) != 0: raise RuntimeError("Setting latency failed") except RuntimeError: self.close() raise
def __init__(self): # open channel A self.ft_ctx = ftdi.ftdi_context() if ftdi.ftdi_init(self.ft_ctx) < 0: raise RuntimeError("ftdi_init failed") ftdi.ftdi_set_interface(self.ft_ctx, ftdi.INTERFACE_A) if ftdi.ftdi_usb_open(self.ft_ctx, 0x0403, 0x6010) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(self.ft_ctx)) try: # open and purge channel B ft_ctx_b = ftdi.ftdi_context() if ftdi.ftdi_init(ft_ctx_b) < 0: raise RuntimeError("ftdi_init failed") ftdi.ftdi_set_interface(ft_ctx_b, ftdi.INTERFACE_B) if ftdi.ftdi_usb_open(ft_ctx_b, 0x0403, 0x6010) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(ft_ctx_b)) # purge buffers if ftdi.ftdi_usb_purge_buffers(ft_ctx_b) != 0: raise RuntimeError(ftdi.ftdi_get_error_string(ft_ctx_b)) # close channel B ftdi.ftdi_usb_close(ft_ctx_b) ftdi.ftdi_deinit(ft_ctx_b) except RuntimeError: self.close() raise # setup FIFO mode try: self.ft_ctx.usb_read_timeout = 5000000; self.ft_ctx.usb_write_timeout = 5000000; ftdi.ftdi_read_data_set_chunksize(self.ft_ctx, self.READ_CHUNKSIZE) ftdi.ftdi_write_data_set_chunksize(self.ft_ctx, self.WRITE_CHUNKSIZE) if ftdi.ftdi_usb_reset(self.ft_ctx) != 0: raise RuntimeError("Reset failed") time.sleep(100e-3) if ftdi.ftdi_set_bitmode(self.ft_ctx, 0, ftdi.BITMODE_SYNCFF) != 0: raise RuntimeError("Setting FIFO mode failed") if ftdi.ftdi_set_latency_timer(self.ft_ctx, 1) != 0: raise RuntimeError("Setting latency failed") except RuntimeError: self.close() raise
def guessResetDirection(self, h): if (self.resetValue is None or self.nBootValue is None): CBUS_2 = 4 CBUS_0 = 1 RESET_LINE = CBUS_2 GPIO5_LINE = CBUS_0 resetLow = ((RESET_LINE << 4) | 0) resetHigh = ((RESET_LINE << 4) | RESET_LINE) GPIO5Low = ((GPIO5_LINE << 4) | 0) GPIO5High = ((GPIO5_LINE << 4) | GPIO5_LINE) h.usb_write_timeout = 1000 h.usb_read_timeout = 1000 ret = ftdi.ftdi_set_baudrate(h, 115200) ret = (ret + ftdi.ftdi_setflowctrl(h, ftdi.SIO_DISABLE_FLOW_CTRL)) ret = (ret + ftdi.ftdi_set_line_property( h, ftdi.BITS_8, ftdi.STOP_BIT_1, ftdi.NONE)) for i in range(2): if (i % 2) == 0: resetValue = resetHigh nbootValue = GPIO5High else: resetValue = resetLow nbootValue = GPIO5Low ftdi.ftdi_set_bitmode(h, resetValue, ftdi.BITMODE_CBUS) time.sleep(0.10000000000000001) ftdi.ftdi_set_bitmode(h, nbootValue, ftdi.BITMODE_CBUS) time.sleep(0.10000000000000001) ftdi.ftdi_set_bitmode(h, 0, ftdi.BITMODE_CBUS) ftdi.ftdi_usb_purge_rx_buffer(h) ftdi.ftdi_usb_purge_tx_buffer(h) ftdi.ftdi_write_data(h, struct.pack('B', 127), 1) startTime = time.time() inbuff = '\x00' nbyte_rcvd = 0 while (nbyte_rcvd == 0 and (time.time() - startTime) < 1): nbyte_rcvd = ftdi.ftdi_read_data(h, inbuff, 1) continue if nbyte_rcvd > 0: reply = struct.unpack('B', inbuff) if (reply[0]) == 121: self.resetValue = resetValue self.nBootValue = nbootValue break else: continue continue return (self.resetValue, self.nBootValue)
def guessResetDirection(self, h): if (self.resetValue is None or self.nBootValue is None): CBUS_2 = 4 CBUS_0 = 1 RESET_LINE = CBUS_2 GPIO5_LINE = CBUS_0 resetLow = ((RESET_LINE << 4) | 0) resetHigh = ((RESET_LINE << 4) | RESET_LINE) GPIO5Low = ((GPIO5_LINE << 4) | 0) GPIO5High = ((GPIO5_LINE << 4) | GPIO5_LINE) h.usb_write_timeout = 1000 h.usb_read_timeout = 1000 ret = ftdi.ftdi_set_baudrate(h, 115200) ret = (ret + ftdi.ftdi_setflowctrl(h, ftdi.SIO_DISABLE_FLOW_CTRL)) ret = (ret + ftdi.ftdi_set_line_property(h, ftdi.BITS_8, ftdi.STOP_BIT_1, ftdi.NONE)) for i in range(2): if (i % 2) == 0: resetValue = resetHigh nbootValue = GPIO5High else: resetValue = resetLow nbootValue = GPIO5Low ftdi.ftdi_set_bitmode(h, resetValue, ftdi.BITMODE_CBUS) time.sleep(0.10000000000000001) ftdi.ftdi_set_bitmode(h, nbootValue, ftdi.BITMODE_CBUS) time.sleep(0.10000000000000001) ftdi.ftdi_set_bitmode(h, 0, ftdi.BITMODE_CBUS) ftdi.ftdi_usb_purge_rx_buffer(h) ftdi.ftdi_usb_purge_tx_buffer(h) ftdi.ftdi_write_data(h, struct.pack('B', 127), 1) startTime = time.time() inbuff = '\x00' nbyte_rcvd = 0 while (nbyte_rcvd == 0 and (time.time() - startTime) < 1): nbyte_rcvd = ftdi.ftdi_read_data(h, inbuff, 1) continue if nbyte_rcvd > 0: reply = struct.unpack('B', inbuff) if (reply[0]) == 121: self.resetValue = resetValue self.nBootValue = nbootValue break else: continue continue return (self.resetValue, self.nBootValue)
def power_button_assert(): ftdi.ftdi_set_interface(F, ftdi.INTERFACE_D) ftdi.ftdi_set_bitmode(F, 0x40, ftdi.BITMODE_BITBANG) ftdi.ftdi_write_data(F, '\x40', 1) time.sleep(4) ftdi.ftdi_write_data(F, '\x00', 1)
def jtag_lengthen(): ftdi.ftdi_set_interface(F, ftdi.INTERFACE_D) ftdi.ftdi_set_bitmode(F, 0x08, ftdi.BITMODE_BITBANG) ftdi.ftdi_write_data(F, '\x00', 1)
def power_force_off(): ftdi.ftdi_set_interface(F, ftdi.INTERFACE_D) ftdi.ftdi_set_bitmode(F, 0x30, ftdi.BITMODE_BITBANG) ftdi.ftdi_write_data(F, '\x30', 1)
def ppc_halt_off(): ftdi.ftdi_set_interface(F, ftdi.INTERFACE_B) ftdi.ftdi_set_bitmode(F, 0x00, ftdi.BITMODE_BITBANG) ftdi.ftdi_write_data(F, '\x00', 1)
#!/usr/bin/python import ftdi import time F = ftdi.ftdi_context() ftdi.ftdi_init(F) ftdi.ftdi_usb_open(F, 0x0403, 0x6011) ftdi.ftdi_set_interface(F, ftdi.INTERFACE_B) ftdi.ftdi_set_bitmode(F, 0x08, ftdi.BITMODE_BITBANG) ftdi.ftdi_write_data(F, '\x00', 1) ftdi.ftdi_usb_close(F)