Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
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
Esempio n. 4
0
    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()
Esempio n. 5
0
    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()
Esempio n. 6
0
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)
Esempio n. 8
0
    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()
Esempio n. 10
0
	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
Esempio n. 11
0
	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
Esempio n. 12
0
    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
Esempio n. 13
0
    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)
Esempio n. 15
0
	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)
Esempio n. 18
0
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)
Esempio n. 19
0
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)
Esempio n. 20
0
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)
Esempio n. 21
0
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)
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)
#!/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)
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)