Guest User

Untitled

a guest
Nov 18th, 2010
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.73 KB | None | 0 0
  1. #! /usr/bin/env python
  2.  
  3. import ftdi
  4.  
  5. idVendor = 0x0403
  6. idProduct = 0x6011
  7. # Clock X5 Command for H class component
  8. TCK_X5 = 0x8a
  9. CLK_MAX_SPEED5X = 30000000
  10. SPI_MAX_MSG_SIZE = 64*1024 # 65536
  11.  
  12.  
  13. def send_buf(ftdic, buf, size):
  14.     if (ftdi.ftdi_write_data(ftdic, buf, size) < 0):
  15.         print "ftdi_write_data < 0", ftdi.ftdi_get_error_string(ftdic)
  16.         return True
  17.     else:
  18.         print "ftdi_write_data worked..."
  19.         return False
  20.  
  21. def get_buf(ftdic, buf, size):
  22.     if (ftdi.ftdi_read_data(ftdic, buf, size) < 0):
  23.         print "ftdi_read_data < 0", ftdi.ftdi_get_error_string(ftdic)
  24.         return True
  25.     else:
  26.         print "ftdi_read_data worked..."
  27.         return False
  28.  
  29.  
  30. def spi_init(ftdic):
  31.     if (ftdi.ftdi_init(ftdic) < 0):
  32.         print "ftdi_init failed"
  33.         close(ftdic)
  34.         exit(-1)
  35.        
  36.     if (ftdi.ftdi_usb_open(ftdic, idVendor, idProduct) < 0):
  37.         print "Unable to open ftdi device:", ftdi.ftdi_get_error_string(ftdic)
  38.         close(ftdic)
  39.         exit(-1)
  40.  
  41.     if (ftdi.ftdi_write_data_set_chunksize(ftdic, 512)):
  42.         print "Unable to set chunk size (512)"
  43.         close(ftdic)
  44.         exit(-1)
  45.  
  46.     if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_D) < 0):
  47.         print "Unable to select interface D:", ftdi.INTERFACE_D
  48.         close(ftdic)
  49.         exit(-1)
  50.  
  51.     if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_C) < 0):
  52.         print "Unable to select interface D:", ftdi.INTERFACE_C
  53.         close(ftdic)
  54.         exit(-1)
  55.  
  56.     if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_B) < 0):
  57.         print "Unable to select interface D:", ftdi.INTERFACE_B
  58.         close(ftdic)
  59.         exit(-1)
  60.  
  61.     if (ftdi.ftdi_set_interface(ftdic, ftdi.INTERFACE_A) < 0):
  62.         print "Unable to select interface A:", ftdi.INTERFACE_A
  63.         close(ftdic)
  64.         exit(-1)
  65.  
  66.     if (ftdi.ftdi_usb_reset(ftdic) < 0):
  67.         print "Unable to reset FTDI device"
  68.         close(ftdic)
  69.         exit(-1)
  70.  
  71.     if (ftdi.ftdi_set_latency_timer(ftdic, 2) < 0):
  72.         print "Unable to set latency timer"
  73.         close(ftdic)
  74.         exit(-1)
  75.  
  76.     if (ftdi.ftdi_set_bitmode(ftdic, 0x00, ftdi.BITMODE_MPSSE) < 0):
  77.         print "Unable to set bitmode to SPI"
  78.         close(ftdic)
  79.         exit(-1)
  80.  
  81.     if (ftdi.ftdi_usb_purge_buffers(ftdic) < 0):
  82.         print "Unable to purge usb buffers"
  83.         close(ftdic)
  84.         exit(-1)
  85.  
  86. def set_clock(ftdic, speed):
  87.     print "Disable divide-by-5 front stage"
  88.     if send_buf(ftdic, chr(TCK_X5), 1):
  89.         print "divide-by-5"
  90.         close(ftdic)
  91.         exit(-1)
  92.  
  93.     print "Set clock divisor...."
  94.     div = (CLK_MAX_SPEED5X / speed) - 1
  95.     print 'div:',div
  96.     buf0 = chr(ftdi.TCK_DIVISOR) # command "set divisor"
  97.     buf1 = chr(div & 0xFF)
  98.     buf2 = chr(((div >> 8) & 0xFF))
  99.     buf = buf0 + buf1 + buf2
  100.     if send_buf(ftdic, buf, 3):
  101.         print "clock divisor"
  102.         close(ftdic)
  103.         exit(-1)
  104.  
  105.     print "YESS!!!"
  106.  
  107.    
  108. def set_loopback(ftdic, active):
  109.     if active:
  110.         if send_buf(ftdic, chr(ftdi.LOOPBACK_START), 1):
  111.             print "loopback activate"
  112.             close(ftdic)
  113.             exit(-1)
  114.     else:
  115.         if send_buf(ftdic, chr(ftdi.LOOPBACK_END), 1):
  116.             print "loopback de-activate"
  117.             close(ftdic)
  118.             exit(-1)
  119.  
  120. def write(ftdic, message):
  121.     # No type checking but assume client calls function properly
  122.     size = len(message)
  123.     send_buf(ftdic, message, size)
  124.  
  125. def close(ftdic):
  126.     ftdi.ftdi_usb_close(ftdic)
  127.     ftdi.ftdi_deinit(ftdic)
  128.    
  129.  
  130. # Main
  131. if __name__ == "__main__":
  132.     ftdic = ftdi.ftdi_context()    
  133.     spi_init(ftdic)
  134.     set_clock(ftdic, CLK_MAX_SPEED5X)
  135.     set_loopback(ftdic, False)
  136.     write(ftdic, "Test")
  137.     close(ftdic)
Advertisement
Add Comment
Please, Sign In to add comment