Esempio n. 1
0
def do_uart_tx(device, rxpin, baudrate):
    ser = bs.Connect(device, 30)
    print("+++ Sending UART discovery tx command")
    try:
        request_args = list(range(256))
        for i in range(256):
            request_args[i] = 0
        request_args[0] = rxpin
        request_args[1] = baudrate
        rv = bs.requestreply(ser, 21, 0, request_args)
        if rv is None:
            ser.close()
            return None
        (bs_reply_length, bs_reply_args) = rv

        txpin = bs_reply_args[0]
        if txpin != 0xffffffff:
            print("+++ FOUND UART TX on GPIO %d" % (txpin + 1))
        else:
            print("+++ NOT FOUND. Note that GPIO 1 can't be used here.")
        ser.close()
        print("+++ SUCCESS")
        return (bs_reply_length, bs_reply_args)
    except Exception, e:
        print("+++ %s" % (str(e)))
        ser.close()
        return -1
Esempio n. 2
0
def do_uart_passthrough(device, gpiorx, gpiotx, baudrate):
    ser = bs.Connect(device, 30)
    try:
        request_args = list(range(256))
        for i in range(256):
            request_args[i] = 0
        request_args[0] = gpiorx - 1
        request_args[1] = gpiotx - 1
        request_args[2] = baudrate
        rv = bs.requestreply(ser, 19, 9, request_args)
        if rv is None:
            ser.close()
            return None
        (bs_reply_length, bs_reply_args) = rv
        print("+++ Entering passthrough mode")
        bs.keys_init()
        while True:
            if ser.inWaiting() > 0:
                ch = ser.read(1)
                sys.stdout.write(ch)
                sys.stdout.flush()
            inCh = bs.keys_getchar()
            if inCh is not None:
                ser.write(inCh)
        # not reached
        bs.keys_cleanup()
        return None
    except Exception, e:
        print("+++ %s" % (str(e)))
        ser.close()
        return None
Esempio n. 3
0
def uart_rx():
    print("+++ Sending UART discovery rx command")
    request_args = []
    bs.NewTimeout(120)
    rv = bs.requestreply(11, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    ngpio = 9
    for i in range(ngpio):
        changes = bs_reply_args[5*i + 0]
        print("+++ GPIO %d has %d signal changes" % (i+1, changes))
        if changes > 0:
            databits = bs_reply_args[5*i + 1]
            if databits > 0:
                stopbits = bs_reply_args[5*i + 2]
                parity = bs_reply_args[5*i + 3]
                baudrate = bs_reply_args[5*i + 4]
                print("+++ UART FOUND")
                print("+++ DATABITS: %d" % (databits))
                print("+++ STOPBITS: %d" % (stopbits))
                if parity == 0:
                    print("+++ PARITY: EVEN")
                elif parity == 1:
                    print("+++ PARITY: ODD")
                else:
                    print("+++ PARITY: NONE")
                print("+++ BAUDRATE: %d" % (baudrate))
    print("+++ SUCCESS")
    return (bs_reply_length, bs_reply_args)
Esempio n. 4
0
def spi_fuzz(cs, clk, mosi, miso):
    print("+++ Sending spi fuzz command")
    request_args = [1000000, cs, clk, mosi, miso]
    bs.NewTimeout(60)
    rv = bs.requestreply(35, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    n = bs_reply_length / (4 * 6)
    print("+++ FOUND %d SPI commands" % (n))
    for i in range(n):
        cmd = bs_reply_args[i * 6 + 0]
        v1 = bs_reply_args[i * 6 + 1]
        v2 = bs_reply_args[i * 6 + 2]
        v3 = bs_reply_args[i * 6 + 3]
        v4 = bs_reply_args[i * 6 + 4]
        v5 = bs_reply_args[i * 6 + 5]
        print("+++ SPI command FOUND")
        print("+++ SPI command %.2x" % (cmd))
        print("+++ SPI v1 %.2x" % (v1))
        print("+++ SPI v2 %.2x" % (v2))
        print("+++ SPI v3 %.2x" % (v3))
        print("+++ SPI v4 %.2x" % (v4))
        print("+++ SPI v5 %.2x" % (v5))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 5
0
def do_jtag_discover_pinout(device):
    ser = bs.Connect(device, 30)
    print("+++ Sending jtag pinout discovery command")

    request_args = list(range(256))
    for i in range(256):
        request_args[i] = 0
    rv = bs.requestreply(ser, 13, 0, request_args)
    if rv is None:
        ser.close()
        return None
    (bs_reply_length, bs_reply_args) = rv
    if bs_reply_args[0] != 0:
        tck = bs_reply_args[1]
        tms = bs_reply_args[2]
        tdi = bs_reply_args[3]
        tdo = bs_reply_args[4]
        ntrst = bs_reply_args[5]
        print("+++ %d JTAG FOUND" % (bs_reply_args[0]))
        print("+++ TCK %i" % (tck))
        print("+++ TMS %i" % (tms))
        print("+++ TDI %i" % (tdi))
        print("+++ TDO %i" % (tdo))
        print("+++ NTRST %i" % (ntrst))
    print("+++ SUCCESS")
    ser.close()
    return (bs_reply_length, bs_reply_args)
Esempio n. 6
0
def spi_erase_sector(skipsize, cs, clk, mosi, miso):
    print("+++ Sending SPI erase sector command")
    request_args = [1000000, skipsize, cs, clk, mosi, miso]
    rv = bs.requestreply(27, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 7
0
def writeSPI(size, skipsize, data):
    request_args = list(range(3 + size / 4))
    request_args[0] = size
    request_args[1] = skipsize
    request_args[2] = 1000000
    for i in range(size / 4):
        request_args[3 + i] = data[i]
    rv = bs.requestreply(37, request_args)
    return rv
Esempio n. 8
0
def spi_wp_disable(cs, clk, mosi, miso):
    print("+++ Sending SPI write protect commands")
    request_args = [1000000, cs, clk, mosi, miso]
    rv = bs.requestreply(39, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 9
0
def dumpSPI(size, skip):
    request_args = [size, skip, 1000000]
    rv = bs.requestreply(1, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    data = ""
    for i in range(bs_reply_length / 4):
        data = data + struct.pack('<I', bs_reply_args[i])
    return data
Esempio n. 10
0
def dumpI2C(sda, scl, slave, size, skip, alen):
    data = ""
    request_args = [slave, size, skip, sda, scl, alen]
    rv = bs.requestreply(9, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    data = ""
    for i in range(bs_reply_length / 4):
        data = data + struct.pack('<I', bs_reply_args[i])
    return data
Esempio n. 11
0
def spi_streg2(cs, clk, mosi, miso):
    print("+++ Sending SPI command")
    request_args = [1000000, cs, clk, mosi, miso, 2, 0x35, 0x00]
    rv = bs.requestreply(3, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    for i in range(1, 2):
        print("+++ STATUS REGISTER 2: %.2x" % (bs_reply_args[i]))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 12
0
def writeI2C(sda, scl, slave, size, skip, alen, data):
    request_args = list(range(6 + size / 4))
    request_args[0] = slave
    request_args[1] = size
    request_args[2] = skip
    request_args[3] = sda
    request_args[4] = scl
    request_args[5] = alen
    for i in range(size / 4):
        request_args[6 + i] = data[i]
    rv = bs.requestreply(25, request_args)
    return rv
Esempio n. 13
0
def spi_bb_read_id(cs, clk, mosi, miso):
    print("+++ Sending SPI read ID command")
    request_args = [1000000, cs, clk, mosi, miso]
    rv = bs.requestreply(31, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    v1 = bs_reply_args[0]
    v2 = bs_reply_args[1]
    v3 = bs_reply_args[2]
    print("+++ SPI ID %.2x%.2x%.2x" % (v1, v2, v3))
    print("+++ SUCCESS\n")
    return bs_reply_length, bs_reply_args
Esempio n. 14
0
def spi_read_id():
    print("+++ Sending SPI read ID command")
    request_args = [1000000]
    rv = bs.requestreply(17, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    v1 = bs_reply_args[0]
    v2 = bs_reply_args[1]
    v3 = bs_reply_args[2]
    print("+++ SPI ID %.2x%.2x%.2x" % (v1, v2, v3))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 15
0
def i2c_discover_slaves(sda, scl):
    print("+++ Sending i2c slave discovery command")
    request_args = [sda, scl]
    rv = bs.requestreply(5, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    nslave_addresses = bs_reply_length / 4
    print("+++ %d I2C slave addresses" % (nslave_addresses))
    for i in range(nslave_addresses):
        print("+++ I2C slave address FOUND at %i" % bs_reply_args[i])
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 16
0
def uart_data_discover():
    print("+++ Sending UART data discovery command")
    request_args = []
    bs.NewTimeout(60)
    rv = bs.requestreply(15, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    ngpio = 9
    for i in range(ngpio):
        print("+++ SIGNAL CHANGES: D%d --> %d" % ((i+1), bs_reply_args[i]))
    print("+++ SUCCESS")
    return rv
Esempio n. 17
0
def spi_readuid(cs, clk, mosi, miso):
    print("+++ Sending SPI command")
    request_args = [
        1000000, cs, clk, mosi, miso, 13, 0x4b, 0x00, 0x00, 0x00, 0x00, 0, 0,
        0, 0, 0, 0, 0, 0
    ]
    rv = bs.requestreply(3, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    for i in range(5, 13):
        print("+++ UID: %.2x" % (bs_reply_args[i]))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 18
0
def uart_tx(rxpin, baudrate):
    print("+++ Sending UART discovery tx command")
    request_args = [rxpin, baudrate]
    bs.NewTimeout(3)
    rv = bs.requestreply(21, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    txpin = bs_reply_args[0]
    if txpin != 0xffffffff:
        print("+++ FOUND UART TX on GPIO %d" % (txpin + 1))
    else:
        print("+++ NOT FOUND. Note that GPIO 1 can't be used here.")
    print("+++ SUCCESS")
    return rv
Esempio n. 19
0
def i2c_discover():
    print("+++ Sending i2c discover pinout command")
    request_args = []
    bs.NewTimeout(30)
    rv = bs.requestreply(23, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    n = bs_reply_length / 8
    print("+++ FOUND %d I2C interfaces" % (n))
    for i in range(n):
        sda = bs_reply_args[i * 2 + 0]
        scl = bs_reply_args[i * 2 + 1]
        print("+++ I2C interface FOUND")
        print("+++ I2C SDA at GPIO %i" % (sda))
        print("+++ I2C SCL at GPIO %i" % (scl))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 20
0
def do_spi_read_id(device):
    ser = bs.Connect(device)
    print("+++ Sending SPI read ID command")
    request_args = list(range(256))
    for i in range(256):
        request_args[i] = 0
    request_args[0] = 1000000
    rv = bs.requestreply(ser, 17, 0, request_args)
    if rv is None:
        ser.close()
        return None
    (bs_reply_length, bs_reply_args) = rv
    v1 = bs_reply_args[0]
    v2 = bs_reply_args[1]
    v3 = bs_reply_args[2]
    print("+++ SPI ID %.2x%.2x%.2x" % (v1, v2, v3))
    print("+++ SUCCESS\n")
    ser.close()
    return (bs_reply_length, bs_reply_args)
Esempio n. 21
0
def doSendCommand(cs, clk, mosi, miso, args):
    print("+++ Sending SPI command")
    n = len(args)
    request_args = list(range(6 + n))
    request_args[0] = 1000000
    request_args[1] = cs
    request_args[2] = clk
    request_args[3] = mosi
    request_args[4] = miso
    request_args[5] = n
    for i in range(n):
        request_args[6 + i] = int(args[i], 16)
    rv = bs.requestreply(3, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    for i in range(n):
        print("+++ SPI Response: %.2x" % (bs_reply_args[i]))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 22
0
def do_i2c_discover_slaves(device, sda, scl):
    ser = bs.Connect(device)
    print("+++ Sending i2c slave discovery command")
    request_args = list(range(256))
    for i in range(256):
        request_args[i] = 0
    request_args[0] = sda
    request_args[1] = scl
    rv = bs.requestreply(ser, 5, 0, request_args)
    if rv is None:
        ser.close()
        return None
    (bs_reply_length, bs_reply_args) = rv

    nslave_addresses = bs_reply_length
    print("+++ %d I2C slave addresses" % (nslave_addresses))
    for i in range(nslave_addresses):
        print("+++ I2C slave address FOUND at %i" % bs_reply_args[i])
    print("+++ SUCCESS\n")
    ser.close()
    return (bs_reply_length, bs_reply_args)
Esempio n. 23
0
def uart_passthrough(gpiorx, gpiotx, baudrate):
    request_args = [gpiorx-1, gpiotx-1, baudrate]
    bs.NewTimeout(30)
    rv = bs.requestreply(19, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    print("+++ Entering passthrough mode")
    bs.keys_init()
    ser = bs.getSerial()
    while True:
        if ser.inWaiting() > 0:
            ch = ser.read(1)
            sys.stdout.write(ch)
            sys.stdout.flush()
        inCh = bs.keys_getchar()
        if inCh is not None:
            ser.write(inCh)
        # not reached
    bs.keys_cleanup()
    return None
Esempio n. 24
0
def do_uart_rx(device):
    ser = bs.Connect(device, 30)
    print("+++ Sending UART discovery rx command")
    try:
        request_args = list(range(256))
        for i in range(256):
            request_args[i] = 0
        rv = bs.requestreply(ser, 11, 0, request_args)
        if rv is None:
            ser.close()
            return None
        (bs_reply_length, bs_reply_args) = rv

        ngpio = bs_reply_length
        for i in range(ngpio):
            changes = bs_reply_args[i]
            print("+++ GPIO %d has %d signal changes" % (i + 1, changes))
            if changes > 0:
                databits = bs_reply_args[ngpio + 4 * i + 0]
                if databits > 0:
                    stopbits = bs_reply_args[ngpio + 4 * i + 1]
                    parity = bs_reply_args[ngpio + 4 * i + 2]
                    baudrate = bs_reply_args[ngpio + 4 * i + 3]
                    print("+++ UART FOUND")
                    print("+++ DATABITS: %d" % (databits))
                    print("+++ STOPBITS: %d" % (stopbits))
                    if parity == 0:
                        print("+++ PARITY: EVEN")
                    elif parity == 1:
                        print("+++ PARITY: ODD")
                    else:
                        print("+++ PARITY: NONE")
                    print("+++ BAUDRATE: %d" % (baudrate))
        ser.close()
        print("+++ SUCCESS")
        return (bs_reply_length, bs_reply_args)
    except Exception, e:
        print("+++ %s" % (str(e)))
        ser.close()
        return None
Esempio n. 25
0
def do_i2c_discover(device):
    ser = bs.Connect(device, 30)
    print("+++ Sending i2c discover pinout command")
    request_args = list(range(256))
    for i in range(256):
        request_args[i] = 0
    rv = bs.requestreply(ser, 23, 0, request_args)
    if rv is None:
        ser.close()
        return None
    (bs_reply_length, bs_reply_args) = rv

    n = bs_reply_length
    print("+++ FOUND %d I2C interfaces" % (n))
    for i in range(n):
        sda = bs_reply_args[i * 2 + 0]
        scl = bs_reply_args[i * 2 + 1]
        print("+++ I2C interface FOUND")
        print("+++ I2C SDA at GPIO %i" % (sda))
        print("+++ I2C SCL at GPIO %i" % (scl))
    print("+++ SUCCESS\n")
    ser.close()
    return (bs_reply_length, bs_reply_args)
Esempio n. 26
0
def spi_discover_pinout():
    print("+++ Sending spi discover pinout command")
    request_args = [1000000]
    bs.NewTimeout(60)
    rv = bs.requestreply(29, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv

    n = bs_reply_length / (4 * 4)
    print("+++ FOUND %d SPI interfaces" % (n))
    for i in range(n):
        cs = bs_reply_args[i * 4 + 0]
        clk = bs_reply_args[i * 4 + 1]
        mosi = bs_reply_args[i * 4 + 2]
        miso = bs_reply_args[i * 4 + 3]
        print("+++ SPI interface FOUND")
        print("+++ SPI CS at GPIO %i" % (cs))
        print("+++ SPI CLK at GPIO %i" % (clk))
        print("+++ SPI MOSI at GPIO %i" % (mosi))
        print("+++ SPI MISO at GPIO %i" % (miso))
    print("+++ SUCCESS\n")
    return (bs_reply_length, bs_reply_args)
Esempio n. 27
0
def jtag_discover_pinout():
    print("+++ Sending jtag pinout discovery command")

    request_args = []
    bs.NewTimeout(30)
    rv = bs.requestreply(13, request_args)
    if rv is None:
        return None
    (bs_reply_length, bs_reply_args) = rv
    if bs_reply_args[0] != 0:
        tck = bs_reply_args[1]
        tms = bs_reply_args[2]
        tdi = bs_reply_args[3]
        tdo = bs_reply_args[4]
        ntrst = bs_reply_args[5]
        print("+++ %d JTAG FOUND" % (bs_reply_args[0]))
        print("+++ TCK %i" % (tck))
        print("+++ TMS %i" % (tms))
        print("+++ TDI %i" % (tdi))
        print("+++ TDO %i" % (tdo))
        print("+++ NTRST %i" % (ntrst))
    print("+++ SUCCESS")
    return (bs_reply_length, bs_reply_args)