예제 #1
0
    def do_openocd_init(self, transport):
        if transport not in set(['swd', 'jtag']):
            raise AdapterDoesntSupportTransport('unsupported transport "%s"' %
                                                (transport, ))

        self.openocd_transport = transport

        # Assume adapters support SWD
        adapter_supports_swd = self.adapter_info.get('supports_swd', True)
        # Assume adapters don't support JTAG
        adapter_supports_jtag = self.adapter_info.get('supports_jtag', False)
        # TODO: query adapter capabilities with things like cmsis-dap DAP_ID_DEVICE_VENDOR

        if (transport == 'swd') and (not adapter_supports_swd):
            raise AdapterDoesntSupportTransport(self.adapter_info, transport)
        if (transport == 'jtag') and (not adapter_supports_jtag):
            raise AdapterDoesntSupportTransport(self.adapter_info, transport)

        # hard coding limitations for a specific OpenOCD version
        # Change when OpenOCD cmsis_dap_usb jtag support is tested and verified
        if (transport == 'jtag') and (self.adapter_info['openocd']['interface']
                                      == 'cmsis-dap'):
            raise OpenOcdDoesntSupportTransportForAdapter(
                self.adapter_info, transport)

        # See e.g. documentation/stlink-v2-1-swd.cfg
        orpc = self.orpc
        o = self.adapter_info['openocd']
        ocd_intf = o['interface']

        orpc.command('interface %s' % (ocd_intf, ))
        if ocd_intf == 'hla':
            hla_layout = o['hla_layout']
            orpc.command('hla_layout %s' % (hla_layout, ))
            orpc.command(
                'hla_device_desc %s' %
                (hex_str_literal_double_quoted(self.adapter_info['name']), ))
            orpc.command('hla_vid_pid 0x%04x 0x%04x' %
                         (self.usb_device.idVendor, self.usb_device.idProduct))
            orpc.command('hla_serial %s' % (hex_str_literal_double_quoted(
                self.usb_device.serial_number), ))
        else:
            assert (0)

        if ocd_intf == 'hla':
            if transport == 'swd':
                transport = 'hla_swd'
            elif transport == 'jtag':
                transport = 'hla_jtag'
            else:
                assert (0)

        # transport
        r = orpc.call('transport select %s' % (transport, ))
        logging.debug('trasnport select -> %r' % (r, ))
        self.openocd_low_level_transport = transport

        # adding adapter_khz to make OpenOCD happy, otherwise you'll see
        # Error: 156 6 core.c:1380 adapter_init(): An adapter speed is not selected in the init script. Insert a call to adapter_khz or jtag_rclk to proceed.
        orpc.command('adapter_khz 300')
예제 #2
0
    def do_openocd_init(self, transport):
        if transport not in set(['swd', 'jtag']):
            raise AdapterDoesntSupportTransport('unsupported transport "%s"' % (transport,))
        
        self.openocd_transport = transport

        # Assume adapters support SWD
        adapter_supports_swd = self.adapter_info.get('supports_swd', True)
        # Assume adapters don't support JTAG
        adapter_supports_jtag = self.adapter_info.get('supports_jtag', False)
        # TODO: query adapter capabilities with things like cmsis-dap DAP_ID_DEVICE_VENDOR

        if (transport == 'swd')  and (not adapter_supports_swd):
            raise AdapterDoesntSupportTransport(self.adapter_info, transport)
        if (transport == 'jtag') and (not adapter_supports_jtag):
            raise AdapterDoesntSupportTransport(self.adapter_info, transport)

        # hard coding limitations for a specific OpenOCD version
        # Change when OpenOCD cmsis_dap_usb jtag support is tested and verified
        if (transport == 'jtag') and (self.adapter_info['openocd']['interface'] == 'cmsis-dap'):
            raise OpenOcdDoesntSupportTransportForAdapter(self.adapter_info, transport)

        # See e.g. documentation/stlink-v2-1-swd.cfg
        orpc = self.orpc
        o = self.adapter_info['openocd']
        ocd_intf = o['interface']

        orpc.command('interface %s' % (ocd_intf,))
        if ocd_intf == 'hla':
            hla_layout = o['hla_layout']
            orpc.command('hla_layout %s' % (hla_layout,))
            orpc.command('hla_device_desc %s' % (hex_str_literal_double_quoted(self.adapter_info['name']),))
            orpc.command('hla_vid_pid 0x%04x 0x%04x' % (self.usb_device.idVendor, self.usb_device.idProduct))
            orpc.command('hla_serial %s' % (hex_str_literal_double_quoted(self.usb_device.serial_number),))
        else:
            assert(0)

        if ocd_intf == 'hla':
            if transport == 'swd':
                transport = 'hla_swd'
            elif transport == 'jtag':
                transport = 'hla_jtag'
            else:
                assert(0)

        # transport
        r = orpc.call('transport select %s' % (transport,))
        logging.debug('trasnport select -> %r' % (r,))
        self.openocd_low_level_transport = transport

        # adding adapter_khz to make OpenOCD happy, otherwise you'll see
        # Error: 156 6 core.c:1380 adapter_init(): An adapter speed is not selected in the init script. Insert a call to adapter_khz or jtag_rclk to proceed.
        orpc.command('adapter_khz 300')
예제 #3
0
def multiple_adapter_msg(adapters):
    out = []
    for (info, d) in adapters:
        serial = getattr(d, 'serial_number', None)
        adapter_str = ('%(name)s: bus_addr: %(bus)03d:%(addr)03d vid_pid: %(vid)04x:%(pid)04x' %
                   dict(name=info['name'], bus=d.bus, addr=d.address, vid=d.idVendor, pid=d.idProduct))
        if serial is not None:
            adapter_str += ' serial: %(serial)s' % dict(serial=hex_str_literal_double_quoted(serial))
        out.append(adapter_str)
    return '\n'.join(out)
예제 #4
0
def print_adapters_list(adapters):
    out = []
    for (i, (info, d)) in enumerate(adapters):
        serial = getattr(d, 'serial_number', None)
        adapter_str = ('[%(index)d] %(name)s: bus_addr: %(bus)03d:%(addr)03d vid_pid: %(vid)04x:%(pid)04x' %
                       dict(index=i, name=info['name'], bus=d.bus, addr=d.address, vid=d.idVendor, pid=d.idProduct))
        if serial is not None:
            adapter_str += (' serial: %(serial)s' % dict(serial=hex_str_literal_double_quoted(serial)))
        out.append(adapter_str)
    print('\n'.join(out))
예제 #5
0
def multiple_adapter_msg(adapters):
    out = []
    for (info, d) in adapters:
        serial = getattr(d, 'serial_number', None)
        adapter_str = (
            '%(name)s: bus_addr: %(bus)03d:%(addr)03d vid_pid: %(vid)04x:%(pid)04x'
            % dict(name=info['name'],
                   bus=d.bus,
                   addr=d.address,
                   vid=d.idVendor,
                   pid=d.idProduct))
        if serial is not None:
            adapter_str += ' serial: %(serial)s' % dict(
                serial=hex_str_literal_double_quoted(serial))
        out.append(adapter_str)
    return '\n'.join(out)
예제 #6
0
def print_adapters_list(adapters):
    out = []
    for (i, (info, d)) in enumerate(adapters):
        serial = getattr(d, 'serial_number', None)
        adapter_str = (
            '[%(index)d] %(name)s: bus_addr: %(bus)03d:%(addr)03d vid_pid: %(vid)04x:%(pid)04x'
            % dict(index=i,
                   name=info['name'],
                   bus=d.bus,
                   addr=d.address,
                   vid=d.idVendor,
                   pid=d.idProduct))
        if serial is not None:
            adapter_str += (' serial: %(serial)s' %
                            dict(serial=hex_str_literal_double_quoted(serial)))
        out.append(adapter_str)
    print('\n'.join(out))