Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- import ftdi
- idVendor = 0x0403
- idProduct = 0x6011
- # Clock X5 Command for H class component
- TCK_X5 = 0x8a
- CLK_MAX_SPEED5X = 30000000
- SPI_MAX_MSG_SIZE = 64*1024 # 65536
- def send_buf(ftdic, buf, size):
- if (ftdi.ftdi_write_data(ftdic, buf, size) < 0):
- print "ftdi_write_data < 0", ftdi.ftdi_get_error_string(ftdic)
- return True
- else:
- print "ftdi_write_data worked..."
- return False
- def get_buf(ftdic, buf, size):
- if (ftdi.ftdi_read_data(ftdic, buf, size) < 0):
- print "ftdi_read_data < 0", ftdi.ftdi_get_error_string(ftdic)
- return True
- else:
- print "ftdi_read_data worked..."
- return False
- def spi_init(ftdic):
- if (ftdi.ftdi_init(ftdic) < 0):
- print "ftdi_init failed"
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_usb_open(ftdic, idVendor, idProduct) < 0):
- print "Unable to open ftdi device:", ftdi.ftdi_get_error_string(ftdic)
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_write_data_set_chunksize(ftdic, 512)):
- print "Unable to set chunk size (512)"
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_D) < 0):
- print "Unable to select interface D:", ftdi.INTERFACE_D
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_C) < 0):
- print "Unable to select interface D:", ftdi.INTERFACE_C
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_B) < 0):
- print "Unable to select interface D:", ftdi.INTERFACE_B
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_A) < 0):
- print "Unable to select interface A:", ftdi.INTERFACE_A
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_usb_reset(ftdic) < 0):
- print "Unable to reset FTDI device"
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_latency_timer(ftdic, 2) < 0):
- print "Unable to set latency timer"
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_set_bitmode(ftdic, 0x00, ftdi.BITMODE_MPSSE) < 0):
- print "Unable to set bitmode to SPI"
- close(ftdic)
- exit(-1)
- if (ftdi.ftdi_usb_purge_buffers(ftdic) < 0):
- print "Unable to purge usb buffers"
- close(ftdic)
- exit(-1)
- def set_clock(ftdic, speed):
- print "Disable divide-by-5 front stage"
- if send_buf(ftdic, chr(TCK_X5), 1):
- print "divide-by-5"
- close(ftdic)
- exit(-1)
- print "Set clock divisor...."
- div = (CLK_MAX_SPEED5X / speed) - 1
- print 'div:',div
- buf0 = chr(ftdi.TCK_DIVISOR) # command "set divisor"
- buf1 = chr(div & 0xFF)
- buf2 = chr(((div >> 8) & 0xFF))
- buf = buf0 + buf1 + buf2
- if send_buf(ftdic, buf, 3):
- print "clock divisor"
- close(ftdic)
- exit(-1)
- print "YESS!!!"
- def set_loopback(ftdic, active):
- if active:
- if send_buf(ftdic, chr(ftdi.LOOPBACK_START), 1):
- print "loopback activate"
- close(ftdic)
- exit(-1)
- else:
- if send_buf(ftdic, chr(ftdi.LOOPBACK_END), 1):
- print "loopback de-activate"
- close(ftdic)
- exit(-1)
- def write(ftdic, message):
- # No type checking but assume client calls function properly
- size = len(message)
- send_buf(ftdic, message, size)
- def close(ftdic):
- ftdi.ftdi_usb_close(ftdic)
- ftdi.ftdi_deinit(ftdic)
- # Main
- if __name__ == "__main__":
- ftdic = ftdi.ftdi_context()
- spi_init(ftdic)
- set_clock(ftdic, CLK_MAX_SPEED5X)
- set_loopback(ftdic, False)
- write(ftdic, "Test")
- close(ftdic)
Advertisement
Add Comment
Please, Sign In to add comment