Skip to content

Instantly share code, notes, and snippets.

@agners agners/ftdi-cbus-ctrlep.py
Last active Jun 24, 2018

Embed
What would you like to do?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Stefan Agner
import os
import sys
import time
import usb
BITMODE_CBUS = 0x20
SIO_SET_BITMODE_REQUEST = 0x0b
# FTDIs CBUS bitmode expect the following value:
# CBUS Bits
# 3210 3210
# |------ Output Control 0->LO, 1->HI
# |----------- Input/Output 0->Input, 1->Output
# PyUSB control endpoint communication, see also:
# https://github.com/pyusb/pyusb/blob/master/docs/tutorial.rst
def ftdi_set_bitmode(dev, bitmask):
bmRequestType = usb.util.build_request_type(usb.util.CTRL_OUT,
usb.util.CTRL_TYPE_VENDOR,
usb.util.CTRL_RECIPIENT_DEVICE)
wValue = bitmask | (BITMODE_CBUS << BITMODE_CBUS)
dev.ctrl_transfer(bmRequestType, SIO_SET_BITMODE_REQUEST, wValue)
def main():
"""Main program"""
dev = usb.core.find(custom_match = \
lambda d: \
d.idVendor==0x0403 and
d.idProduct==0x6001 and
d.serial_number=="A10XXXXX")
# Set CBUS2/3 high...
ftdi_set_bitmode(dev, 0xCC)
time.sleep(1)
# Set CBUS2/3 low...
ftdi_set_bitmode(dev, 0xC0)
# Set CBUS2/3 back to tristate
ftdi_set_bitmode(dev, 0x00)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.