aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2023-07-31 06:58:52 -0700
committerGitHub <noreply@github.com>2023-07-31 06:58:52 -0700
commitc07d9251aad639e82a4d35a652878b8b4275365f (patch)
tree2f8bf5f2764fbd392295d8b8b0d43b7473701822
parent1997e68dcbb0e528ee55e55d9a1d69b5b9c8634a (diff)
parent674911ef18b05ff3a25b888906455ec7f6b37eb2 (diff)
downloadriscv-openocd-c07d9251aad639e82a4d35a652878b8b4275365f.zip
riscv-openocd-c07d9251aad639e82a4d35a652878b8b4275365f.tar.gz
riscv-openocd-c07d9251aad639e82a4d35a652878b8b4275365f.tar.bz2
Merge pull request #884 from riscv/from_upstream
Merge up to a3ed12401 from upstream.
-rw-r--r--contrib/loaders/flash/numicro/Makefile31
-rw-r--r--contrib/loaders/flash/numicro/numicro_m0.S73
-rw-r--r--contrib/loaders/flash/numicro/numicro_m0.inc5
-rw-r--r--contrib/loaders/flash/numicro/numicro_m4.S70
-rw-r--r--contrib/loaders/flash/numicro/numicro_m4.inc5
-rw-r--r--doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt173
-rw-r--r--doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt175
-rw-r--r--doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt143
-rw-r--r--doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt143
-rw-r--r--doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt72
-rw-r--r--doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt72
-rw-r--r--doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt161
-rw-r--r--doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt143
-rwxr-xr-xdoc/usb_adapters/dump.sh24
-rw-r--r--doc/usb_adapters/ft232r/0403_6001_ft232r.txt64
-rw-r--r--doc/usb_adapters/ftdi/0403_6010_ft2232h.txt103
-rw-r--r--doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt71
-rw-r--r--doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt104
-rw-r--r--doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt64
-rw-r--r--doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt92
-rw-r--r--doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt156
-rw-r--r--doc/usb_adapters/jlink/1366_0101_segger_jlink.txt62
-rw-r--r--doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt71
-rw-r--r--doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt172
-rw-r--r--doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt142
-rw-r--r--doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt211
-rw-r--r--doc/usb_adapters/readme.txt43
-rw-r--r--doc/usb_adapters/stlink/0483_3744_stlinkv1.txt62
-rw-r--r--doc/usb_adapters/stlink/0483_3748_stlinkv2.txt72
-rw-r--r--doc/usb_adapters/stlink/0483_374b_stlinkv2.txt173
-rw-r--r--doc/usb_adapters/stlink/0483_374d_stlinkv3.txt71
-rw-r--r--doc/usb_adapters/stlink/0483_374e_stlinkv3.txt182
-rw-r--r--doc/usb_adapters/stlink/0483_374f_stlinkv3.txt212
-rw-r--r--doc/usb_adapters/stlink/0483_3752_stlinkv2.txt143
-rw-r--r--doc/usb_adapters/stlink/0483_3753_stlinkv3.txt253
-rw-r--r--doc/usb_adapters/xds110/0451_0451_ti_xds110.txt276
-rw-r--r--src/flash/nor/numicro.c1629
-rw-r--r--src/flash/nor/stm32l4x.c3
-rw-r--r--src/jtag/adapter.c8
-rw-r--r--src/jtag/drivers/cmsis_dap.c284
-rw-r--r--src/jtag/drivers/cmsis_dap.h41
-rw-r--r--src/jtag/drivers/cmsis_dap_usb_bulk.c16
-rw-r--r--src/jtag/drivers/cmsis_dap_usb_hid.c1
-rw-r--r--src/target/armv7m.c2
-rw-r--r--src/target/riscv/riscv.c39
-rw-r--r--src/transport/transport.c2
-rw-r--r--tcl/target/hi3798.cfg3
-rw-r--r--tcl/target/hi6220.cfg3
-rw-r--r--tcl/target/marvell/88f37x0.cfg3
-rw-r--r--tcl/target/numicro_m4.cfg62
-rw-r--r--tcl/target/xilinx_zynqmp.cfg3
-rwxr-xr-xtools/disassemble_inc.sh50
52 files changed, 4965 insertions, 1273 deletions
diff --git a/contrib/loaders/flash/numicro/Makefile b/contrib/loaders/flash/numicro/Makefile
new file mode 100644
index 0000000..e4f4441
--- /dev/null
+++ b/contrib/loaders/flash/numicro/Makefile
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+BIN2C = ../../../../src/helper/bin2char.sh
+
+CROSS_COMPILE ?= arm-none-eabi-
+
+CC=$(CROSS_COMPILE)gcc
+OBJCOPY=$(CROSS_COMPILE)objcopy
+OBJDUMP=$(CROSS_COMPILE)objdump
+
+
+AFLAGS = -static -nostartfiles -mlittle-endian -Wa,-EL
+
+all: numicro_m0.inc numicro_m4.inc
+
+.PHONY: clean
+
+%.elf: %.S
+ $(CC) $(AFLAGS) $< -o $@
+
+%.lst: %.elf
+ $(OBJDUMP) -S $< > $@
+
+%.bin: %.elf
+ $(OBJCOPY) -Obinary $< $@
+
+%.inc: %.bin
+ $(BIN2C) < $< > $@
+
+clean:
+ -rm -f *.elf *.lst *.bin *.inc
diff --git a/contrib/loaders/flash/numicro/numicro_m0.S b/contrib/loaders/flash/numicro/numicro_m0.S
new file mode 100644
index 0000000..37d4355
--- /dev/null
+++ b/contrib/loaders/flash/numicro/numicro_m0.S
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/***************************************************************************
+ * Copyright (C) 2015 Nemui Trinomius *
+ * nemuisan_kawausogasuki@live.jp *
+ * *
+ * Copyright (C) 2017 Zale Yu *
+ * CYYU@nuvoton.com *
+ * *
+ * Copyright (C) 2022 Jian-Hong Pan *
+ * chienhung.pan@gmail.com *
+ ***************************************************************************/
+
+ .text
+ .cpu cortex-m0
+ .thumb
+
+ /* Params:
+ * r0 - workarea buffer / result
+ * r1 - target address
+ * r2 - wordcount
+ * Clobbered:
+ * r4 - tmp
+ * r5 - tmp
+ * r6 - tmp
+ * r7 - tmp
+ */
+
+.L1:
+ /* for(register uint32_t i=0;i<wcount;i++){ */
+ mov r4, r0
+ mov r3, #0
+.L2:
+ sub r5, r1, r0
+ add r7, r4, r5
+ cmp r3, r2
+ beq .L7
+.L4:
+ /* NUMICRO_FLASH_ISPADR = faddr; */
+ ldr r6, .L8
+ str r7, [r6]
+ /* NUMICRO_FLASH_ISPDAT = *pLW; */
+ ldmia r4!, {r7}
+ ldr r5, .L8+4
+ str r7, [r5]
+ /* faddr += 4; */
+ /* pLW++; */
+ /* Trigger write action */
+ /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
+ ldr r5, .L8+8
+ mov r6, #1
+ str r6, [r5]
+.L3:
+ /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
+ ldr r7, [r5]
+ lsl r7, r7, #31
+ bmi .L3
+
+ add r3, r3, #1
+ b .L2
+.L7:
+ /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
+ ldr r3, .L8+12
+ ldr r0, [r3]
+ mov r1, #64
+ and r0, r1
+.L9:
+ bkpt #0
+.L8:
+ .word 0x5000C004
+ .word 0x5000C008
+ .word 0x5000C010
+ .word 0x5000C000
diff --git a/contrib/loaders/flash/numicro/numicro_m0.inc b/contrib/loaders/flash/numicro/numicro_m0.inc
new file mode 100644
index 0000000..db9c774
--- /dev/null
+++ b/contrib/loaders/flash/numicro/numicro_m0.inc
@@ -0,0 +1,5 @@
+/* Autogenerated with ../../../../src/helper/bin2char.sh */
+0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60,
+0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07,
+0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe,
+0x04,0xc0,0x00,0x50,0x08,0xc0,0x00,0x50,0x10,0xc0,0x00,0x50,0x00,0xc0,0x00,0x50,
diff --git a/contrib/loaders/flash/numicro/numicro_m4.S b/contrib/loaders/flash/numicro/numicro_m4.S
new file mode 100644
index 0000000..6c59cca
--- /dev/null
+++ b/contrib/loaders/flash/numicro/numicro_m4.S
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/***************************************************************************
+ * Copyright (C) 2017 Zale Yu *
+ * CYYU@nuvoton.com *
+ * *
+ * Copyright (C) 2022 Jian-Hong Pan *
+ * chienhung.pan@gmail.com *
+ ***************************************************************************/
+
+ .text
+ .cpu cortex-m4
+ .thumb
+
+ /* Params:
+ * r0 - workarea buffer / result
+ * r1 - target address
+ * r2 - wordcount
+ * Clobbered:
+ * r4 - tmp
+ * r5 - tmp
+ * r6 - tmp
+ * r7 - tmp
+ */
+
+.L1:
+ /* for(register uint32_t i=0;i<wcount;i++){ */
+ mov r4, r0
+ mov r3, #0
+.L2:
+ sub r5, r1, r0
+ add r7, r4, r5
+ cmp r3, r2
+ beq .L7
+.L4:
+ /* NUMICRO_FLASH_ISPADR = faddr; */
+ ldr r6, .L8
+ str r7, [r6]
+ /* NUMICRO_FLASH_ISPDAT = *pLW; */
+ ldmia r4!, {r7}
+ ldr r5, .L8+4
+ str r7, [r5]
+ /* faddr += 4; */
+ /* pLW++; */
+ /* Trigger write action */
+ /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
+ ldr r5, .L8+8
+ mov r6, #1
+ str r6, [r5]
+.L3:
+ /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
+ ldr r7, [r5]
+ lsl r7, r7, #31
+ bmi .L3
+
+ add r3, r3, #1
+ b .L2
+.L7:
+ /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
+ ldr r3, .L8+12
+ ldr r0, [r3]
+ mov r1, #64
+ and r0, r1
+.L9:
+ bkpt #0
+.L8:
+ .word 0x4000C004
+ .word 0x4000C008
+ .word 0x4000C010
+ .word 0x4000C000
diff --git a/contrib/loaders/flash/numicro/numicro_m4.inc b/contrib/loaders/flash/numicro/numicro_m4.inc
new file mode 100644
index 0000000..c3e6052
--- /dev/null
+++ b/contrib/loaders/flash/numicro/numicro_m4.inc
@@ -0,0 +1,5 @@
+/* Autogenerated with ../../../../src/helper/bin2char.sh */
+0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60,
+0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07,
+0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe,
+0x04,0xc0,0x00,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40,
diff --git a/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt b/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt
new file mode 100644
index 0000000..3109c69
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/04b4_f155_cypress_kitprog3.txt
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# KitProg3 Firmware 1.01
+# Has inconsistent class code 0 for CMSIS-DAP interface
+
+Bus 002 Device 017: ID 04b4:f155 Cypress Semiconductor Corp.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x04b4 Cypress Semiconductor Corp.
+ idProduct 0xf155
+ bcdDevice 1.01
+ iManufacturer 1 Cypress Semiconductor
+ iProduct 6 KitProg3 CMSIS-DAP
+ iSerial 128 102015B003137400
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 130
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 11 KitProg3 CMSIS-DAP
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 400mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 0 (Defined at Interface level)
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 KitProg3 CMSIS-DAP
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 12 KitProg3 bridge
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 43
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 0 None
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 15 KitProg3 USBUART
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 4 KitProg3 USBUART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt b/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt
new file mode 100644
index 0000000..2ec0d58
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/0d28_0204_nxp_daplink.txt
@@ -0,0 +1,175 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: NXP FRDM-K64F
+
+Bus 001 Device 006: ID 0d28:0204 NXP ARM mbed
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0d28 NXP
+ idProduct 0x0204 ARM mbed
+ bcdDevice 10.00
+ iManufacturer 1 ARM
+ iProduct 2 DAPLink CMSIS-DAP
+ iSerial 3 0240000031754e45002f00199485002b6461000097969900
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0082
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 7 USB_MSC
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 mbed Serial Port
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 4 mbed Serial Port
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x03
+ call management
+ use DataInterface
+ bDataInterface 2
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 32
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 mbed Serial Port
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt b/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt
new file mode 100644
index 0000000..368ec2a
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/1a6a_2000_spansion_sk_fm4.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://en.opensuse.org/User:A_faerber/SK-FM4-176L-S6E2CC
+
+Bus 002 Device 009: ID 1a6a:2000 Spansion Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.01
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x1a6a Spansion Inc.
+ idProduct 0x2000
+ bcdDevice 1.60
+ iManufacturer 1 Spansion
+ iProduct 2 Spansion CMSIS-DAP + COM Port
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 107
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x00
+ (Missing must-be-set bit!)
+ (Bus Powered)
+ MaxPower 62mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 4 Spansion CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 29
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 5 Spansion USB Serial Port
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 10.01
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt b/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt
new file mode 100644
index 0000000..f27d993
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/2a86_8011_wch_link.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://github.com/pyocd/pyOCD/issues/1395
+
+Bus 003 Device 118: ID 2a86:8011 wch.cn WCH-Link
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x2a86
+ idProduct 0x8011
+ bcdDevice 1.00
+ iManufacturer 1 wch.cn
+ iProduct 2 WCH-Link
+ iSerial 3 0001A0000001
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x006b
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 QYF CMSIS-DAP
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0
+ iInterface 4 QYF CMSIS-DAP
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 (error)
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 QYF CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt b/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt
new file mode 100644
index 0000000..520f7c5
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2722_keil_ulink2.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter
+
+Bus 001 Device 010: ID c251:2722 Keil Software, Inc. Keil ULINK2 CMSIS-DAP
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2722
+ bcdDevice 1.00
+ iManufacturer 1 Keil Software
+ iProduct 2 Keil ULINK2 CMSIS-DAP
+ iSerial 3 V0022U9E
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0029
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt b/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt
new file mode 100644
index 0000000..df2b924
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2723_keil_ulink_me.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://stackoverflow.com/questions/27087281/jtag-adapter-ulink-me-and-openocd-on-archlinux
+
+Bus 005 Device 026: ID c251:2723 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2723
+ bcdDevice 1.00
+ iManufacturer 1 Keil Software
+ iProduct 2 Keil ULINK-ME CMSIS-DAP
+ iSerial 3 M0489MAE
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 41
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 4 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt b/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt
new file mode 100644
index 0000000..4504ef0
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_2750_keil_ulinkplus.txt
@@ -0,0 +1,161 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# firmware 2.0.11
+
+Bus 001 Device 005: ID c251:2750 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0x2750
+ bcdDevice 1.00
+ iManufacturer 1 KEIL - Tools By ARM
+ iProduct 2 Keil ULINKplus
+ iSerial 3 L78440715A
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 101
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 ULINKplus CMSIS-DAP
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 ULINKplus Digital I/O
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 ULINKplus Analog I/O
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 7 ULINKplus Power Probe
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt b/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt
new file mode 100644
index 0000000..c08f679
--- /dev/null
+++ b/doc/usb_adapters/cmsis_dap/c251_f001_jixin.pro.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://sourceforge.net/p/openocd/tickets/368/
+
+Bus 001 Device 008: ID c251:f001 Keil Software, Inc.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0xc251 Keil Software, Inc.
+ idProduct 0xf001
+ bcdDevice 1.00
+ iManufacturer 1 jixin.pro
+ iProduct 2 CMSIS-DAP_LU
+ iSerial 3 LU_2022_8888
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 107
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 4 CMSIS-DAP CDC
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0 None
+ iInterface 4 CMSIS-DAP CDC
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 5 CMSIS-DAP DCI
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 6 CMSIS-DAP_LU
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.00
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 33
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/dump.sh b/doc/usb_adapters/dump.sh
new file mode 100755
index 0000000..1ecfb40
--- /dev/null
+++ b/doc/usb_adapters/dump.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+devs=$(lsusb -d $1:$2 | wc -l)
+case "$devs" in
+ 0 )
+ echo "Error: USB device $1:$2 not found" > /dev/stderr
+ exit 1
+ ;;
+ 1 )
+ echo "Dumping $(lsusb -d $1:$2)" > /dev/stderr
+ ;;
+ * )
+ echo "Error: Multiple matches for 'lsusb -d $1:$2'" > /dev/stderr
+ exit 1
+ ;;
+esac
+
+# break SPDX tag to hide it to checkpatch
+echo '# SPDX-''License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later'
+echo ''
+echo '# Optional comment'
+
+lsusb -v -d $1:$2 | sed 's/ *$//'
diff --git a/doc/usb_adapters/ft232r/0403_6001_ft232r.txt b/doc/usb_adapters/ft232r/0403_6001_ft232r.txt
new file mode 100644
index 0000000..8bfb058
--- /dev/null
+++ b/doc/usb_adapters/ft232r/0403_6001_ft232r.txt
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: FT232RL
+# Chip: FT232RL
+
+Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6001 FT232 Serial (UART) IC
+ bcdDevice 6.00
+ iManufacturer 1 FTDI
+ iProduct 2 FT232R USB UART
+ iSerial 3 A50285BI
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xa0
+ (Bus Powered)
+ Remote Wakeup
+ MaxPower 90mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 FT232R USB UART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt b/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt
new file mode 100644
index 0000000..8bb33e6
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_6010_ft2232h.txt
@@ -0,0 +1,103 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: Steppenprobe
+# Link: https://github.com/diegoherranz/steppenprobe
+# Chip: FT2232HL
+
+Bus 001 Device 012: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6010 FT2232C/D/H Dual UART/FIFO IC
+ bcdDevice 7.00
+ iManufacturer 1 FTDI
+ iProduct 2 Dual RS232-HS
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0037
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Dual RS232-HS
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Dual RS232-HS
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt b/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt
new file mode 100644
index 0000000..68fc119
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_6014_digilent_hs2.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://sourceforge.net/p/openocd/tickets/357/
+
+Bus 001 Device 084: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0x6014 FT232H Single HS USB-UART/FIFO IC
+ bcdDevice 9.00
+ iManufacturer 1 Digilent
+ iProduct 2 Digilent USB Device
+ iSerial 3 210249AFCD0B
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Digilent USB Device
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt b/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt
new file mode 100644
index 0000000..f056502
--- /dev/null
+++ b/doc/usb_adapters/ftdi/0403_cff8_amontec_jtagkey2.txt
@@ -0,0 +1,104 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Link: http://www.amontec.com
+# Casing: Hi-Speed JTAGkey-2 (c) 2009, Amontec
+# PCB: Amontec JTAGkey2 v5.3
+# Chip: FT2232HQ
+
+Bus 001 Device 017: ID 0403:cff8 Future Technology Devices International, Ltd Amontec JTAGkey
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0403 Future Technology Devices International, Ltd
+ idProduct 0xcff8 Amontec JTAGkey
+ bcdDevice 7.00
+ iManufacturer 1 Amontec
+ iProduct 2 Amontec JTAGkey-2
+ iSerial 3 53U2ML49
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0037
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Amontec JTAGkey-2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 Amontec JTAGkey-2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt b/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt
new file mode 100644
index 0000000..25f43a4
--- /dev/null
+++ b/doc/usb_adapters/ftdi/09fb_6001_altera_blaster.txt
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Clone www.terasic.com "USB Blaster"
+# PCB reports: "USB Blaster-B", "FOR ALTERA ONLY"
+# Chip: FT245BL
+
+Bus 001 Device 005: ID 09fb:6001 Altera Blaster
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x09fb Altera
+ idProduct 0x6001 Blaster
+ bcdDevice 4.00
+ iManufacturer 1 Altera
+ iProduct 2 USB-Blaster
+ iSerial 3 91f28492
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 150mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 USB-Blaster
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt b/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt
new file mode 100644
index 0000000..c610443
--- /dev/null
+++ b/doc/usb_adapters/ftdi/9e88_9e8f_sheevaplug_jtagkey.txt
@@ -0,0 +1,92 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837989
+
+Bus 003 Device 002: ID 9e88:9e8f
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x9e88
+ idProduct 0x9e8f
+ bcdDevice 5.00
+ iManufacturer 1 FTDI
+ iProduct 2 SheevaPlug JTAGKey FT2232D B
+ iSerial 3 FTU85Z4Y
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 55
+ bNumInterfaces 2
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xc0
+ Self Powered
+ MaxPower 0mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 SheevaPlug JTAGKey FT2232D B
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 2 SheevaPlug JTAGKey FT2232D B
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt b/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt
new file mode 100644
index 0000000..14fc86f
--- /dev/null
+++ b/doc/usb_adapters/icdi/1cbe_00fd_ti_icdi.txt
@@ -0,0 +1,156 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: TI Tiva C Series TM4C1294 Connected LaunchPad
+# ICDI firmware update to add OpenOCD support
+
+Bus 001 Device 016: ID 1cbe:00fd Luminary Micro Inc. In-Circuit Debug Interface
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x1cbe Luminary Micro Inc.
+ idProduct 0x00fd In-Circuit Debug Interface
+ bcdDevice 1.00
+ iManufacturer 1 Texas Instruments
+ iProduct 2 In-Circuit Debug Interface
+ iSerial 3 0F00CAC2
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0074
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 250mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 0
+ bInterfaceClass 254 Application Specific Interface
+ bInterfaceSubClass 1 Device Firmware Update
+ bInterfaceProtocol 1
+ iInterface 0
+ Device Firmware Upgrade Interface Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bmAttributes 15
+ Will Detach
+ Manifestation Tolerant
+ Upload Supported
+ Download Supported
+ wDetachTimeout 65535 milliseconds
+ wTransferSize 1024 bytes
+ bcdDFUVersion 1.10
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt b/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt
new file mode 100644
index 0000000..8fa4e7d
--- /dev/null
+++ b/doc/usb_adapters/jlink/1366_0101_segger_jlink.txt
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in https://forums.gentoo.org/viewtopic-t-781442-start-0.html
+
+Bus 002 Device 002: ID 1366:0101
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 8
+ idVendor 0x1366
+ idProduct 0x0101
+ bcdDevice 0.01
+ iManufacturer 1 SEGGER
+ iProduct 2 J-Link
+ iSerial 3 123456
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 32
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0xc0
+ Self Powered
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0001
+ Self Powered
diff --git a/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt b/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt
new file mode 100644
index 0000000..fd31e9c
--- /dev/null
+++ b/doc/usb_adapters/jlink/1366_0101_segger_jlink_plus_10_1.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter, original Segger, HW version 10.1
+
+Bus 001 Device 005: ID 1366:0101 SEGGER J-Link PLUS
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x1366 SEGGER
+ idProduct 0x0101 J-Link PLUS
+ bcdDevice 1.00
+ iManufacturer 1 SEGGER
+ iProduct 2 J-Link
+ iSerial 3 123456
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 4 Configuration
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 BULK interface
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 1
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt b/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt
new file mode 100644
index 0000000..e3430d8
--- /dev/null
+++ b/doc/usb_adapters/kitprog/04b4_f139_cypress_kitprog.txt
@@ -0,0 +1,172 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Reported in http://false.ekta.is/tag/unboxing/
+
+Bus 003 Device 011: ID 04b4:f139 Cypress Semiconductor Corp.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2 ?
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 8
+ idVendor 0x04b4 Cypress Semiconductor Corp.
+ idProduct 0xf139
+ bcdDevice 2.0b
+ iManufacturer 1 Cypress Semiconductor
+ iProduct 2 Cypress KitProg
+ iSerial 128 1C210338012E4400
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 130
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 2 Cypress KitProg
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 400mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0 No Subclass
+ bInterfaceProtocol 0 None
+ iInterface 3 KitBridge
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 43
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 5 KitProg Programmer
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 0
+ bFunctionProtocol 0
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 0 None
+ iInterface 4 KitProg USBUART
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x02
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 1
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 2
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0 Unused
+ bInterfaceProtocol 0
+ iInterface 4 KitProg USBUART
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt b/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt
new file mode 100644
index 0000000..fb43923
--- /dev/null
+++ b/doc/usb_adapters/nulink/0416_511d_nuvoton_nulink.txt
@@ -0,0 +1,142 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: nuvoTon NuMaker-PFM-M2351
+# Adapter: ICE V3.0
+
+Bus 001 Device 013: ID 0416:511d Winbond Electronics Corp. Nuvoton Nu-Link1 ICE/VCOM
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0416 Winbond Electronics Corp.
+ idProduct 0x511d Nuvoton Nu-Link1 ICE/VCOM
+ bcdDevice 1.00
+ iManufacturer 1 Nuvoton
+ iProduct 2 Nu-Link
+ iSerial 0
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x006b
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.10
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 28
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 2 Nu-Link
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt b/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt
new file mode 100644
index 0000000..1d8661f
--- /dev/null
+++ b/doc/usb_adapters/nulink/0416_5200_nuvoton_nulink.txt
@@ -0,0 +1,211 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: nuvoTon NuMaker-M483KG V1.1
+# Adapter: Nu-Link2-Me V1.0
+
+Bus 001 Device 014: ID 0416:5200 Winbond Electronics Corp. Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0416 Winbond Electronics Corp.
+ idProduct 0x5200 Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+ bcdDevice 0.00
+ iManufacturer 1 Nuvoton
+ iProduct 2 Nu-Link2 Bulk
+ iSerial 6 13010000AAAAAAAAAAAAAAAAAAAAAAAA
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0099
+ bNumInterfaces 5
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 3 Nu-Link2 VCOM
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 1
+ CDC ACM:
+ bmCapabilities 0x00
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0100 1x 256 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0100 1x 256 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 4 Nu-Link2 HID
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.10
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 35
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0400 1x 1024 bytes
+ bInterval 4
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0400 1x 1024 bytes
+ bInterval 4
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 4
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 5 Nu-Link2 MSC
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x88 EP 8 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x09 EP 9 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/readme.txt b/doc/usb_adapters/readme.txt
new file mode 100644
index 0000000..1d995e9
--- /dev/null
+++ b/doc/usb_adapters/readme.txt
@@ -0,0 +1,43 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+This folder contains a collection of dumps of USB descriptors, obtained through
+Linux lsusb command, of several USB adapters supported by OpenOCD.
+This collection should help maintaining adapter drivers even if the developer
+doesn't have access to all the devices supported by the driver.
+
+To add a new file, run:
+
+ ./doc/usb_adapters/dump.sh ${vid} ${pid} \
+ > doc/usb_adapters/${driver}/${vid}_${pid}_${short_description}.txt
+
+eventually edit the file to add some extra comment, then submit the file to
+OpenOCD gerrit, as explained in HACKING.
+
+The dumps are organized in subfolders corresponding to OpenOCD drivers:
+- cmsis_dap;
+- ft232r;
+- ftdi;
+- icdi;
+- jlink;
+- kitprog;
+- nulink;
+- stlink;
+- xds110.
+
+The script above assumes the user has granted access permissions to the USB
+device file in
+ /dev/bus/usb/<n>/<m>
+This is usually the case when the device is listed in
+ contrib/60-openocd.rules
+and this udev rules file is properly installed in the host machine.
+If the user has no proper access permissions, the script has to be run as
+root or through 'sudo'.
+
+Old versions of 'lsusb -v' dump cryptic errors like:
+ can't get device qualifier: Resource temporarily unavailable
+ can't get debug descriptor: Resource temporarily unavailable
+when some optional descriptor is not present.
+This is fixed in usbutils v014.
+If you get such messages simply ignore them. They are printed on stderr, so
+will not be included in the generated file as the redirection '>' does only
+redirects stdout.
diff --git a/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt b/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt
new file mode 100644
index 0000000..b887f79
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3744_stlinkv1.txt
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter
+
+Bus 001 Device 009: ID 0483:3744 STMicroelectronics ST-LINK/V1
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3744 ST-LINK/V1
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 0000001
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 4 ST Link
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt b/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt
new file mode 100644
index 0000000..ac6dfc7
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3748_stlinkv2.txt
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# ST-Link/V2 standalone or ST-Link/V2 in firmware update mode
+
+Bus 001 Device 006: ID 0483:3748 STMicroelectronics ST-LINK/V2
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3748 ST-LINK/V2
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 0668FF323637414257071827
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0027
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 4 ST Link
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt b/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt
new file mode 100644
index 0000000..cc0156d
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374b_stlinkv2.txt
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: ST Nucleo F411
+
+Bus 001 Device 007: ID 0483:374b STMicroelectronics ST-LINK/V2.1
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374b ST-LINK/V2.1
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 066EFF373535503457062922
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0080
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 4 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0020 1x 32 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 5 ST-Link mass storage
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 6 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 6 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0002 1x 2 bytes
+ bInterval 255
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 7 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt b/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt
new file mode 100644
index 0000000..e964872
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374d_stlinkv3.txt
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# ST-Link/V3 in firmware update mode
+
+Bus 001 Device 009: ID 0483:374d STMicroelectronics STLINK-V3 Loader
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374d STLINK-V3 Loader
+ bcdDevice 2.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 ST-LINK/V3
+ iSerial 3 003500463137510239383538
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0020
+ bNumInterfaces 1
+ bConfigurationValue 1
+ iConfiguration 4 DFU Config
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 100mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 ST-LINK/V3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0001
+ Self Powered
diff --git a/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt b/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt
new file mode 100644
index 0000000..55c968c
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374e_stlinkv3.txt
@@ -0,0 +1,182 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: ST Nucleo-H745AI-Q
+
+Bus 001 Device 008: ID 0483:374e STMicroelectronics STLINK-V3
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374e STLINK-V3
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STLINK-V3
+ iSerial 3 005100313137511039383538
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0080
+ bNumInterfaces 4
+ bConfigurationValue 1
+ iConfiguration 4 Default Config
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 6 ST-Link mass storage
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 7 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 7 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x000a 1x 10 bytes
+ bInterval 16
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 8 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_374f_stlinkv3.txt b/doc/usb_adapters/stlink/0483_374f_stlinkv3.txt
new file mode 100644
index 0000000..1974001
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_374f_stlinkv3.txt
@@ -0,0 +1,212 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Standalone adapter
+
+Bus 001 Device 008: ID 0483:374f STMicroelectronics STLINK-V3
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x374f STLINK-V3
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STLINK-V3
+ iSerial 3 003500463137510239383538
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0097
+ bNumInterfaces 5
+ bConfigurationValue 1
+ iConfiguration 4 Default Config
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 8 Mass Storage
+ bInterfaceSubClass 6 SCSI
+ bInterfaceProtocol 80 Bulk-Only
+ iInterface 6 ST-Link mass storage
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 2
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 7 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 7 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 3
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 2
+ bSlaveInterface 3
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x000a 1x 10 bytes
+ bInterval 16
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 8 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 4
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 9 ST-Link Bridge
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x06 EP 6 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 1
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_3752_stlinkv2.txt b/doc/usb_adapters/stlink/0483_3752_stlinkv2.txt
new file mode 100644
index 0000000..798b527
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3752_stlinkv2.txt
@@ -0,0 +1,143 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: ST STM32MP157f-DK2
+
+Bus 001 Device 005: ID 0483:3752 STMicroelectronics ST-LINK/V2.1
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3752 ST-LINK/V2.1
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STM32 STLink
+ iSerial 3 0668FF323637414257071827
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x0069
+ bNumInterfaces 3
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 300mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 4 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0020 1x 32 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 6 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 6 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 2
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0008 1x 8 bytes
+ bInterval 16
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 7 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/stlink/0483_3753_stlinkv3.txt b/doc/usb_adapters/stlink/0483_3753_stlinkv3.txt
new file mode 100644
index 0000000..e3a951f
--- /dev/null
+++ b/doc/usb_adapters/stlink/0483_3753_stlinkv3.txt
@@ -0,0 +1,253 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board STM32MP135F-DK
+
+Bus 001 Device 011: ID 0483:3753 STMicroelectronics STLINK-V3
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0483 STMicroelectronics
+ idProduct 0x3753 STLINK-V3
+ bcdDevice 1.00
+ iManufacturer 1 STMicroelectronics
+ iProduct 2 STLINK-V3
+ iSerial 3 001000294741500120383733
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x00c2
+ bNumInterfaces 6
+ bConfigurationValue 1
+ iConfiguration 4 Default Config
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 300mA
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 3
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 5 ST-Link Debug
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 1
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 7 ST-Link VCP Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 7 ST-Link VCP Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 2
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 1
+ bSlaveInterface 2
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x000a 1x 10 bytes
+ bInterval 16
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 8 ST-Link VCP Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 255 Vendor Specific Subclass
+ bInterfaceProtocol 255 Vendor Specific Protocol
+ iInterface 9 ST-Link Bridge
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x06 EP 6 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 4
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 10 ST-Link VCP2 Ctrl
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 4
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 10 ST-Link VCP2 Ctrl
+ CDC Header:
+ bcdCDC 1.10
+ CDC Call Management:
+ bmCapabilities 0x00
+ bDataInterface 5
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 4
+ bSlaveInterface 5
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x000a 1x 10 bytes
+ bInterval 16
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 5
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 11 ST-Link VCP2 Data
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x07 EP 7 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x87 EP 7 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0200 1x 512 bytes
+ bInterval 0
+Device Qualifier (for other device speed):
+ bLength 10
+ bDescriptorType 6
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ bNumConfigurations 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/doc/usb_adapters/xds110/0451_0451_ti_xds110.txt b/doc/usb_adapters/xds110/0451_0451_ti_xds110.txt
new file mode 100644
index 0000000..9ad9b7d
--- /dev/null
+++ b/doc/usb_adapters/xds110/0451_0451_ti_xds110.txt
@@ -0,0 +1,276 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR GFDL-1.2-no-invariants-or-later
+
+# Board: TI CC2650 LaunchPad
+
+Bus 001 Device 005: ID 0451:bef3 Texas Instruments, Inc. CC1352R1 Launchpad
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 239 Miscellaneous Device
+ bDeviceSubClass 2
+ bDeviceProtocol 1 Interface Association
+ bMaxPacketSize0 64
+ idVendor 0x0451 Texas Instruments, Inc.
+ idProduct 0xbef3 CC1352R1 Launchpad
+ bcdDevice 1.00
+ iManufacturer 1 Texas Instruments
+ iProduct 2 XDS110 (03.00.00.13) Embed with CMSIS-DAP
+ iSerial 3 L1002566
+ bNumConfigurations 1
+ Configuration Descriptor:
+ bLength 9
+ bDescriptorType 2
+ wTotalLength 0x00db
+ bNumInterfaces 7
+ bConfigurationValue 1
+ iConfiguration 0
+ bmAttributes 0x80
+ (Bus Powered)
+ MaxPower 500mA
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 0
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 0
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 0
+ bSlaveInterface 1
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x81 EP 1 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 1
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x82 EP 2 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x01 EP 1 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 2
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x02 EP 2 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x83 EP 3 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Association:
+ bLength 8
+ bDescriptorType 11
+ bFirstInterface 3
+ bInterfaceCount 2
+ bFunctionClass 2 Communications
+ bFunctionSubClass 2 Abstract (modem)
+ bFunctionProtocol 1 AT-commands (v.25ter)
+ iFunction 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 3
+ bAlternateSetting 0
+ bNumEndpoints 1
+ bInterfaceClass 2 Communications
+ bInterfaceSubClass 2 Abstract (modem)
+ bInterfaceProtocol 1 AT-commands (v.25ter)
+ iInterface 0
+ CDC Header:
+ bcdCDC 1.10
+ CDC ACM:
+ bmCapabilities 0x06
+ sends break
+ line coding and serial state
+ CDC Union:
+ bMasterInterface 3
+ bSlaveInterface 4
+ CDC Call Management:
+ bmCapabilities 0x01
+ call management
+ bDataInterface 4
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x84 EP 4 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0010 1x 16 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 4
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 10 CDC Data
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x85 EP 5 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x03 EP 3 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 5
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 3 Human Interface Device
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 6 XDS110 CMSIS-DAP
+ HID Device Descriptor:
+ bLength 9
+ bDescriptorType 33
+ bcdHID 1.11
+ bCountryCode 0 Not supported
+ bNumDescriptors 1
+ bDescriptorType 34 Report
+ wDescriptorLength 24
+ Report Descriptors:
+ ** UNAVAILABLE **
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x86 EP 6 IN
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x04 EP 4 OUT
+ bmAttributes 3
+ Transfer Type Interrupt
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 1
+ Interface Descriptor:
+ bLength 9
+ bDescriptorType 4
+ bInterfaceNumber 6
+ bAlternateSetting 0
+ bNumEndpoints 2
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceSubClass 0
+ bInterfaceProtocol 0
+ iInterface 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x05 EP 5 OUT
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+ Endpoint Descriptor:
+ bLength 7
+ bDescriptorType 5
+ bEndpointAddress 0x87 EP 7 IN
+ bmAttributes 2
+ Transfer Type Bulk
+ Synch Type None
+ Usage Type Data
+ wMaxPacketSize 0x0040 1x 64 bytes
+ bInterval 0
+Device Status: 0x0000
+ (Bus Powered)
diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c
index 1a73eb2..0b04ce4 100644
--- a/src/flash/nor/numicro.c
+++ b/src/flash/nor/numicro.c
@@ -12,6 +12,12 @@
* *
* Copyright (C) 2015 Nemui Trinomius *
* nemuisan_kawausogasuki@live.jp *
+ * *
+ * Copyright (C) 2017 Zale Yu *
+ * CYYU@nuvoton.com *
+ * *
+ * Copyright (C) 2022 Jian-Hong Pan *
+ * chienhung.pan@gmail.com *
***************************************************************************/
#ifdef HAVE_CONFIG_H
@@ -114,1008 +120,412 @@ struct numicro_cpu_type {
struct numicro_flash_bank_type bank[NUMICRO_MAX_FLASH_BANKS];
};
-/* TODO : Support variable DataFlash region for 128kB Flash model */
-#define NUMICRO_BANKS_NUC100(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_M051(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_MINI51(aprom_size) \
- .n_banks = 3, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_LDROM_BASE, 2*1024}, {NUMICRO_CONFIG_BASE, 512} }
-
-#define NUMICRO_BANKS_NANO(aprom_size) \
+/* If DataFlash size equals zero, it means the actual size depends on config settings. */
+#define NUMICRO_BANKS_GENERAL(aprom_size, data_size, ldrom_size, config_size) \
.n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 4*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
-#define NUMICRO_BANKS_NUC400(aprom_size) \
- .n_banks = 4, \
- { {NUMICRO_APROM_BASE, (aprom_size)}, {NUMICRO_DATA_BASE, 4*1024}, {NUMICRO_LDROM_BASE, 16*1024}, \
- {NUMICRO_CONFIG_BASE, 1024} }
-
+ {{NUMICRO_APROM_BASE, (aprom_size)}, \
+ {NUMICRO_DATA_BASE, (data_size)}, \
+ {NUMICRO_LDROM_BASE, (ldrom_size)}, \
+ {NUMICRO_CONFIG_BASE, (config_size)}}
static const struct numicro_cpu_type numicro_parts[] = {
/*PART NO*/ /*PART ID*/ /*Banks*/
- /* NUC100 Version B */
- {"NUC100LD2BN", 0x10010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1BN", 0x10010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD0BN", 0x10010027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC2BN", 0x10010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1BN", 0x10010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC0BN", 0x10010028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LB2BN", 0x10010029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LB1BN", 0x10010030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LB0BN", 0x10010031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100LA2BN", 0x10010032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100LA1BN", 0x10010033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100LA0BN", 0x10010034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC100RD2BN", 0x10010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1BN", 0x10010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD0BN", 0x10010035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC2BN", 0x10010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1BN", 0x10010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC0BN", 0x10010036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RB2BN", 0x10010037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RB1BN", 0x10010038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RB0BN", 0x10010039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC100RA2BN", 0x10010040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100RA1BN", 0x10010041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC100RA0BN", 0x10010042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC100 Version C */
- {"NUC100LE3CN", 0x20010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE2CN", 0x20010001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE1CN", 0x20010002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LD3CN", 0x20010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2CN", 0x20010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1CN", 0x20010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC3CN", 0x20010006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC2CN", 0x20010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1CN", 0x20010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RE3CN", 0x20010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE2CN", 0x20010010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE1CN", 0x20010011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3CN", 0x20010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2CN", 0x20010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1CN", 0x20010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC3CN", 0x20010015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC2CN", 0x20010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1CN", 0x20010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VE3CN", 0x20010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE2CN", 0x20010019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE1CN", 0x20010020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD3CN", 0x20010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD2CN", 0x20010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD1CN", 0x20010023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VC3CN", 0x20010024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC2CN", 0x20010025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC1CN", 0x20010026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version B */
- {"NUC101YD2BN", 0x10010143, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YD1BN", 0x10010144, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YD0BN", 0x10010145, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101YC2BN", 0x10010146, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YC1BN", 0x10010147, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YC0BN", 0x10010148, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101YB2BN", 0x10010149, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YB1BN", 0x10010150, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YB0BN", 0x10010151, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101YA2BN", 0x10010152, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101YA1BN", 0x10010153, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101YA0BN", 0x10010154, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC101LD2BN", 0x10010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1BN", 0x10010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD0BN", 0x10010127, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC2BN", 0x10010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1BN", 0x10010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC0BN", 0x10010128, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LB2BN", 0x10010129, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LB1BN", 0x10010130, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LB0BN", 0x10010131, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101LA2BN", 0x10010132, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101LA1BN", 0x10010133, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101LA0BN", 0x10010134, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC101RD2BN", 0x10010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1BN", 0x10010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD0BN", 0x10010135, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC2BN", 0x10010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1BN", 0x10010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC0BN", 0x10010136, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RB2BN", 0x10010137, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RB1BN", 0x10010138, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RB0BN", 0x10010139, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC101RA2BN", 0x10010140, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101RA1BN", 0x10010141, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC101RA0BN", 0x10010142, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC101 Version C */
- {"NUC101LE3CN", 0x20010100, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE2CN", 0x20010101, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE1CN", 0x20010102, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LD3CN", 0x20010103, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD2CN", 0x20010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1CN", 0x20010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC3CN", 0x20010106, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC2CN", 0x20010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1CN", 0x20010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RE3CN", 0x20010109, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE2CN", 0x20010110, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE1CN", 0x20010111, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC101RD3CN", 0x20010112, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD2CN", 0x20010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1CN", 0x20010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC3CN", 0x20010115, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC2CN", 0x20010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1CN", 0x20010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VE3CN", 0x20010118, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE2CN", 0x20010119, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE1CN", 0x20010120, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VD3CN", 0x20010121, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD2CN", 0x20010122, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD1CN", 0x20010123, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VC3CN", 0x20010124, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC2CN", 0x20010125, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC1CN", 0x20010126, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC102 Version A */
- {"NUC102ZD2AN", 0x00010231, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102ZC1AN", 0x00010235, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102LD2AN", 0x00010204, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102LC1AN", 0x00010208, NUMICRO_BANKS_NUC100(32*1024)},
-
- {"NUC102RB3AN", 0x00010248, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RB2AN", 0x00010249, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RB1AN", 0x00010250, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RA3AN", 0x00010251, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RA2AN", 0x00010252, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RA1AN", 0x00010253, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VB3AN", 0x00010254, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VB2AN", 0x00010255, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VB1AN", 0x00010256, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VA3AN", 0x00010257, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VA2AN", 0x00010258, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VA1AN", 0x00010259, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102LA0AN", 0x00010260, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102LB0AN", 0x00010261, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102LC0AN", 0x00010262, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102LD0AN", 0x00010263, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102RA0AN", 0x00010264, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102RB0AN", 0x00010265, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102RC0AN", 0x00010266, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102RD0AN", 0x00010267, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102VA0AN", 0x00010268, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102VB0AN", 0x00010269, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102VC0AN", 0x00010270, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102VD0AN", 0x00010271, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC102ZA0AN", 0x00010272, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC102ZB0AN", 0x00010273, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC102ZC0AN", 0x00010274, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC102ZD0AN", 0x00010275, NUMICRO_BANKS_NUC100(64*1024)},
-
- /* NUC102 Version A */
- {"NUC122LD2AN", 0x00012204, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122LD1AN", 0x00012205, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122LC2AN", 0x00012207, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122LC1AN", 0x00012208, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RD2AN", 0x00012213, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RD1AN", 0x00012214, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RC2AN", 0x00012216, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RC1AN", 0x00012217, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SD2AN", 0x00012222, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SD1AN", 0x00012223, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SC2AN", 0x00012225, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SC1AN", 0x00012226, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZD2AN", 0x00012231, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZD1AN", 0x00012232, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZC2AN", 0x00012234, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZC1AN", 0x00012235, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZB2AN", 0x00012237, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZB1AN", 0x00012238, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZA2AN", 0x00012240, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122ZA1AN", 0x00012241, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LB2AN", 0x00012243, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LB1AN", 0x00012244, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LA2AN", 0x00012246, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LA1AN", 0x00012247, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RB2AN", 0x00012249, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RB1AN", 0x00012250, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RA2AN", 0x00012252, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RA1AN", 0x00012253, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SB2AN", 0x00012255, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SB1AN", 0x00012256, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SA2AN", 0x00012258, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SA1AN", 0x00012259, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LA0AN", 0x00012260, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122LB0AN", 0x00012261, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122LC0AN", 0x00012262, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122LD0AN", 0x00012263, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122RA0AN", 0x00012264, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122RB0AN", 0x00012265, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122RC0AN", 0x00012266, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122RD0AN", 0x00012267, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122SA0AN", 0x00012268, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122SB0AN", 0x00012269, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122SC0AN", 0x00012270, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122SD0AN", 0x00012271, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122ZA0AN", 0x00012272, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122ZB0AN", 0x00012273, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122ZC0AN", 0x00012274, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122ZD0AN", 0x00012275, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD2AN", 0x00012277, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD1AN", 0x00012278, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YD0AN", 0x00012279, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC122YC2AN", 0x00012281, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YC1AN", 0x00012282, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YC0AN", 0x00012283, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC122YB2AN", 0x00012285, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YB1AN", 0x00012286, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YB0AN", 0x00012287, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC122YA2AN", 0x00012289, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122YA1AN", 0x00012290, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC122YA0AN", 0x00012291, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC120 Version C */
- {"NUC120LD2BN", 0x10012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1BN", 0x10012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD0BN", 0x10012027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC2BN", 0x10012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1BN", 0x10012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC0BN", 0x10012028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LB2BN", 0x10012029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LB1BN", 0x10012030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LB0BN", 0x10012031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120LA2BN", 0x10012032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120LA1BN", 0x10012033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120LA0BN", 0x10012034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC120RD2BN", 0x10012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1BN", 0x10012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD0BN", 0x10012035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC2BN", 0x10012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1BN", 0x10012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC0BN", 0x10012036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RB2BN", 0x10012037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RB1BN", 0x10012038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RB0BN", 0x10012039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC120RA2BN", 0x10012040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120RA1BN", 0x10012041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC120RA0BN", 0x10012042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC120 Version C */
- {"NUC120LE3CN", 0x20012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE2CN", 0x20012001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE1CN", 0x20012002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LD3CN", 0x20012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2CN", 0x20012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1CN", 0x20012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC3CN", 0x20012006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC2CN", 0x20012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1CN", 0x20012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RE3CN", 0x20012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE2CN", 0x20012010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE1CN", 0x20012011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC120RD3CN", 0x20012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2CN", 0x20012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1CN", 0x20012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC3CN", 0x20012015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC2CN", 0x20012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1CN", 0x20012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VE3CN", 0x20012018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE2CN", 0x20012019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE1CN", 0x20012020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD3CN", 0x20012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD2CN", 0x20012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD1CN", 0x20012023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VC3CN", 0x20012024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC2CN", 0x20012025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC1CN", 0x20012026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version B */
- {"NUC130LD2BN", 0x10013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1BN", 0x10013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD0BN", 0x10013027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC2BN", 0x10013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1BN", 0x10013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC0BN", 0x10013028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LB2BN", 0x10013029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LB1BN", 0x10013030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LB0BN", 0x10013031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130LA2BN", 0x10013032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130LA1BN", 0x10013033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130LA0BN", 0x10013034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC130RD2BN", 0x10013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1BN", 0x10013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD0BN", 0x10013035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC2BN", 0x10013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1BN", 0x10013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC0BN", 0x10013036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RB2BN", 0x10013037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RB1BN", 0x10013038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RB0BN", 0x10013039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC130RA2BN", 0x10013040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130RA1BN", 0x10013041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC130RA0BN", 0x10013042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC130 Version C */
- {"NUC130LE3CN", 0x20013000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE2CN", 0x20013001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE1CN", 0x20013002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LD3CN", 0x20013003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD2CN", 0x20013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1CN", 0x20013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC3CN", 0x20013006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC2CN", 0x20013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1CN", 0x20013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RE3CN", 0x20013009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE2CN", 0x20013010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE1CN", 0x20013011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC130RD3CN", 0x20013012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD2CN", 0x20013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1CN", 0x20013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC3CN", 0x20013015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC2CN", 0x20013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1CN", 0x20013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VE3CN", 0x20013018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE2CN", 0x20013019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE1CN", 0x20013020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VD3CN", 0x20013021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD2CN", 0x20013022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD1CN", 0x20013023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VC3CN", 0x20013024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC2CN", 0x20013025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC1CN", 0x20013026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC140 Version B */
- {"NUC140LD2BN", 0x10014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1BN", 0x10014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD0BN", 0x10014027, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC2BN", 0x10014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1BN", 0x10014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC0BN", 0x10014028, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LB2BN", 0x10014029, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LB1BN", 0x10014030, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LB0BN", 0x10014031, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140LA2BN", 0x10014032, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140LA1BN", 0x10014033, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140LA0BN", 0x10014034, NUMICRO_BANKS_NUC100(8*1024)},
-
- {"NUC140RD2BN", 0x10014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1BN", 0x10014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD0BN", 0x10014035, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC2BN", 0x10014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1BN", 0x10014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC0BN", 0x10014036, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RB2BN", 0x10014037, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RB1BN", 0x10014038, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RB0BN", 0x10014039, NUMICRO_BANKS_NUC100(16*1024)},
- {"NUC140RA2BN", 0x10014040, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140RA1BN", 0x10014041, NUMICRO_BANKS_NUC100(8*1024)},
- {"NUC140RA0BN", 0x10014042, NUMICRO_BANKS_NUC100(8*1024)},
-
- /* NUC140 Version C */
- {"NUC140LE3CN", 0x20014000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE2CN", 0x20014001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE1CN", 0x20014002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LD3CN", 0x20014003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD2CN", 0x20014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1CN", 0x20014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC3CN", 0x20014006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC2CN", 0x20014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1CN", 0x20014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RE3CN", 0x20014009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE2CN", 0x20014010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE1CN", 0x20014011, NUMICRO_BANKS_NUC100(128*1024)},
-
- {"NUC140RD3CN", 0x20014012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD2CN", 0x20014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1CN", 0x20014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC3CN", 0x20014015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC2CN", 0x20014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1CN", 0x20014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VE3CN", 0x20014018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE2CN", 0x20014019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE1CN", 0x20014020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VD3CN", 0x20014021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD2CN", 0x20014022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD1CN", 0x20014023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VC3CN", 0x20014024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC2CN", 0x20014025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC1CN", 0x20014026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version A */
- {"NUC100LE3AN", 0x00010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE2AN", 0x00010001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LE1AN", 0x00010002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100LD3AN", 0x00010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2AN", 0x00010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD1AN", 0x00010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LC3AN", 0x00010006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC2AN", 0x00010007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LC1AN", 0x00010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RE3AN", 0x00010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE2AN", 0x00010010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RE1AN", 0x00010011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3AN", 0x00010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2AN", 0x00010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD1AN", 0x00010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC3AN", 0x00010015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC2AN", 0x00010016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RC1AN", 0x00010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VE3AN", 0x00010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE2AN", 0x00010019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VE1AN", 0x00010020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD3AN", 0x00010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD2AN", 0x00010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD1AN", 0x00010023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VC3AN", 0x00010024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC2AN", 0x00010025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100VC1AN", 0x00010026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC100 Version A */
- {"NUC101LE3AN", 0x00010100, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE2AN", 0x00010101, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LE1AN", 0x00010102, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101LD3AN", 0x00010103, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD2AN", 0x00010104, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LD1AN", 0x00010105, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101LC3AN", 0x00010106, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC2AN", 0x00010107, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101LC1AN", 0x00010108, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RE3AN", 0x00010109, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE2AN", 0x00010110, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RE1AN", 0x00010111, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101RD3AN", 0x00010112, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD2AN", 0x00010113, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RD1AN", 0x00010114, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101RC3AN", 0x00010115, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC2AN", 0x00010116, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101RC1AN", 0x00010117, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VE3AN", 0x00010118, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE2AN", 0x00010119, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VE1AN", 0x00010120, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC101VD3AN", 0x00010121, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD2AN", 0x00010122, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VD1AN", 0x00010123, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC101VC3AN", 0x00010124, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC2AN", 0x00010125, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC101VC1AN", 0x00010126, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version A */
- {"NUC120LE3AN", 0x00012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE2AN", 0x00012001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LE1AN", 0x00012002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LD3AN", 0x00012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2AN", 0x00012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD1AN", 0x00012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LC3AN", 0x00012006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC2AN", 0x00012007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LC1AN", 0x00012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RE3AN", 0x00012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE2AN", 0x00012010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RE1AN", 0x00012011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RD3AN", 0x00012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2AN", 0x00012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD1AN", 0x00012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC3AN", 0x00012015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC2AN", 0x00012016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RC1AN", 0x00012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VE3AN", 0x00012018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE2AN", 0x00012019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VE1AN", 0x00012020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD3AN", 0x00012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD2AN", 0x00012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD1AN", 0x00012023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VC3AN", 0x00012024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC2AN", 0x00012025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120VC1AN", 0x00012026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC120 Version A */
- {"NUC130LE3AN", 0x00013000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE2AN", 0x00013001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LE1AN", 0x00013002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130LD3AN", 0x00013003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD2AN", 0x00013004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LD1AN", 0x00013005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130LC3AN", 0x00013006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC2AN", 0x00013007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130LC1AN", 0x00013008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RE3AN", 0x00013009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE2AN", 0x00013010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RE1AN", 0x00013011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RD3AN", 0x00013012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD2AN", 0x00013013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RD1AN", 0x00013014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130RC3AN", 0x00013015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC2AN", 0x00013016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130RC1AN", 0x00013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VE3AN", 0x00013018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE2AN", 0x00013019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VE1AN", 0x00013020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130VD3AN", 0x00013021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD2AN", 0x00013022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VD1AN", 0x00013023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC130VC3AN", 0x00013024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC2AN", 0x00013025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC130VC1AN", 0x00013026, NUMICRO_BANKS_NUC100(32*1024)},
-
- /* NUC140 Version A */
- {"NUC140LE3AN", 0x00014000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE2AN", 0x00014001, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LE1AN", 0x00014002, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140LD3AN", 0x00014003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD2AN", 0x00014004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LD1AN", 0x00014005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140LC3AN", 0x00014006, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC2AN", 0x00014007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140LC1AN", 0x00014008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RE3AN", 0x00014009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE2AN", 0x00014010, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RE1AN", 0x00014011, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140RD3AN", 0x00014012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD2AN", 0x00014013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RD1AN", 0x00014014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140RC3AN", 0x00014015, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC2AN", 0x00014016, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140RC1AN", 0x00014017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VE3AN", 0x00014018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE2AN", 0x00014019, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VE1AN", 0x00014020, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC140VD3AN", 0x00014021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD2AN", 0x00014022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VD1AN", 0x00014023, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC140VC3AN", 0x00014024, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC2AN", 0x00014025, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC140VC1AN", 0x00014026, NUMICRO_BANKS_NUC100(32*1024)},
-
-
- /* M052 */
- {"M052LAN" , 0x00005200, NUMICRO_BANKS_M051(8*1024)},
- {"M052PAN" , 0x00005201, NUMICRO_BANKS_M051(8*1024)},
- {"M052YAN" , 0x00005202, NUMICRO_BANKS_M051(8*1024)},
- {"M052ZAN" , 0x00005203, NUMICRO_BANKS_M051(8*1024)},
-
- /* M054 */
- {"M054LAN" , 0x00005400, NUMICRO_BANKS_M051(16*1024)},
- {"M054PAN" , 0x00005401, NUMICRO_BANKS_M051(16*1024)},
- {"M054YAN" , 0x00005402, NUMICRO_BANKS_M051(16*1024)},
- {"M054ZAN" , 0x00005403, NUMICRO_BANKS_M051(16*1024)},
-
- /* M058 */
- {"M058LAN" , 0x00005800, NUMICRO_BANKS_M051(32*1024)},
- {"M058PAN" , 0x00005801, NUMICRO_BANKS_M051(32*1024)},
- {"M058YAN" , 0x00005802, NUMICRO_BANKS_M051(32*1024)},
- {"M058ZAN" , 0x00005803, NUMICRO_BANKS_M051(32*1024)},
-
- /* M0516 */
- {"M0516LAN" , 0x00005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M0516PAN" , 0x00005A01, NUMICRO_BANKS_M051(64*1024)},
- {"M0516YAN" , 0x00005A02, NUMICRO_BANKS_M051(64*1024)},
- {"M0516ZAN" , 0x00005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M051LBN" , 0x10005100, NUMICRO_BANKS_M051(4*1024)},
- {"M051PBN" , 0x10005101, NUMICRO_BANKS_M051(4*1024)},
- {"M051YBN" , 0x10005102, NUMICRO_BANKS_M051(4*1024)},
- {"M051ZBN" , 0x10005103, NUMICRO_BANKS_M051(4*1024)},
- {"M052LBN" , 0x10005200, NUMICRO_BANKS_M051(8*1024)},
- {"M052PBN" , 0x10005201, NUMICRO_BANKS_M051(8*1024)},
- {"M052YBN" , 0x10005202, NUMICRO_BANKS_M051(8*1024)},
- {"M052ZBN" , 0x10005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054LBN" , 0x10005400, NUMICRO_BANKS_M051(16*1024)},
- {"M054PBN" , 0x10005401, NUMICRO_BANKS_M051(16*1024)},
- {"M054YBN" , 0x10005402, NUMICRO_BANKS_M051(16*1024)},
- {"M054ZBN" , 0x10005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058LBN" , 0x10005800, NUMICRO_BANKS_M051(32*1024)},
- {"M058PBN" , 0x10005801, NUMICRO_BANKS_M051(32*1024)},
- {"M058YBN" , 0x10005802, NUMICRO_BANKS_M051(32*1024)},
- {"M058ZBN" , 0x10005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LBN" , 0x10005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M0516PBN" , 0x10005A01, NUMICRO_BANKS_M051(64*1024)},
- {"M0516YBN" , 0x10005A02, NUMICRO_BANKS_M051(64*1024)},
- {"M0516ZBN" , 0x10005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052LDN" , 0x20005200, NUMICRO_BANKS_M051(8*1024)},
- {"M054LDN" , 0x20005400, NUMICRO_BANKS_M051(16*1024)},
- {"M058LDN" , 0x20005800, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LDN" , 0x20005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M052ZDN" , 0x20005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054ZDN" , 0x20005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058ZDN" , 0x20005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516ZDN" , 0x20005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052TDN" , 0x20005204, NUMICRO_BANKS_M051(8*1024)},
- {"M054TDN" , 0x20005404, NUMICRO_BANKS_M051(16*1024)},
- {"M058TDN" , 0x20005804, NUMICRO_BANKS_M051(32*1024)},
- {"M0516TDN" , 0x20005A04, NUMICRO_BANKS_M051(64*1024)},
- {"M052XDN" , 0x20005205, NUMICRO_BANKS_M051(8*1024)},
- {"M054XDN" , 0x20005405, NUMICRO_BANKS_M051(16*1024)},
- {"M058XDN" , 0x20005805, NUMICRO_BANKS_M051(32*1024)},
- {"M0516XDN" , 0x20005A05, NUMICRO_BANKS_M051(64*1024)},
- {"M052LDE" , 0x30005200, NUMICRO_BANKS_M051(8*1024)},
- {"M054LDE" , 0x30005400, NUMICRO_BANKS_M051(16*1024)},
- {"M058LDE" , 0x30005800, NUMICRO_BANKS_M051(32*1024)},
- {"M0516LDE" , 0x30005A00, NUMICRO_BANKS_M051(64*1024)},
- {"M052ZDE" , 0x30005203, NUMICRO_BANKS_M051(8*1024)},
- {"M054ZDE" , 0x30005403, NUMICRO_BANKS_M051(16*1024)},
- {"M058ZDE" , 0x30005803, NUMICRO_BANKS_M051(32*1024)},
- {"M0516ZDE" , 0x30005A03, NUMICRO_BANKS_M051(64*1024)},
- {"M052TDE" , 0x30005204, NUMICRO_BANKS_M051(8*1024)},
- {"M054TDE" , 0x30005404, NUMICRO_BANKS_M051(16*1024)},
- {"M058TDE" , 0x30005804, NUMICRO_BANKS_M051(32*1024)},
- {"M0516TDE" , 0x30005A04, NUMICRO_BANKS_M051(64*1024)},
- {"M052XDE" , 0x30005205, NUMICRO_BANKS_M051(8*1024)},
- {"M054XDE" , 0x30005405, NUMICRO_BANKS_M051(16*1024)},
- {"M058XDE" , 0x30005805, NUMICRO_BANKS_M051(32*1024)},
- {"M0516XDE" , 0x30005A05, NUMICRO_BANKS_M051(64*1024)},
-
- /* Mini51 */
- {"MINI51LAN", 0x00205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QAN", 0x00205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 ", 0x00205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZAN", 0x00205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TAN", 0x00205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LAN", 0x00205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QAN", 0x00205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 ", 0x00205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZAN", 0x00205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TAN", 0x00205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LAN", 0x00205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QAN", 0x00205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 ", 0x00205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZAN", 0x00205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TAN", 0x00205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI51LBN", 0x10205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QBN", 0x10205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 ", 0x10205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZBN", 0x10205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TBN", 0x10205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LBN", 0x10205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QBN", 0x10205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 ", 0x10205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZBN", 0x10205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TBN", 0x10205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LBN", 0x10205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QBN", 0x10205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 ", 0x10205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZBN" , 0x10205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TBN" , 0x10205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI51LDE" , 0x20205100, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51QDE" , 0x20205101, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51 " , 0x20205102, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51ZDE" , 0x20205103, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51TDE" , 0x20205104, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI51FDE" , 0x20205105, NUMICRO_BANKS_MINI51(4*1024)},
- {"MINI52LDE" , 0x20205200, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52QDE" , 0x20205201, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52 " , 0x20205202, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52ZDE" , 0x20205203, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52TDE" , 0x20205204, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI52FDE" , 0x20205205, NUMICRO_BANKS_MINI51(8*1024)},
- {"MINI54LDE" , 0x20205400, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54QDE" , 0x20205401, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54 " , 0x20205402, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54ZDE" , 0x20205403, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54TDE" , 0x20205404, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI54FDE" , 0x20205405, NUMICRO_BANKS_MINI51(16*1024)},
- {"MINI55LDE" , 0x20205500, NUMICRO_BANKS_MINI51(16*1024)},
-
- /* NANO100 */
- {"NANO100VF3AN" , 0x00110000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100VF2AN" , 0x00110001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100RF3AN" , 0x00110002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100RF2AN" , 0x00110003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100LF3AN" , 0x00110004, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100LF2AN" , 0x00110005, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO100VE3AN" , 0x00110006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE2AN" , 0x00110007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100RE3AN" , 0x00110008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100RE2AN" , 0x00110009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE3AN" , 0x00110010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE2AN" , 0x00110011, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VD3AN" , 0x00110012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD2AN" , 0x00110013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD1AN" , 0x00110014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD3AN" , 0x00110015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD2AN" , 0x00110016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100RD1AN" , 0x00110017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD3AN" , 0x00110018, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD2AN" , 0x00110019, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD1AN" , 0x00110020, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VC2AN" , 0x00110021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VC1AN" , 0x00110022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100RC2AN" , 0x00110023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100RC1AN" , 0x00110024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC2AN" , 0x00110025, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC1AN" , 0x00110026, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VB1AN" , 0x00110027, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO100VB0AN" , 0x00110028, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO100RB1AN" , 0x00110029, NUMICRO_BANKS_NANO(16*1024)},
-
- {"NANO110VF3AN" , 0x00111000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110VF2AN" , 0x00111001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110RF3AN" , 0x00111002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110RF2AN" , 0x00111003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO110VE3AN" , 0x00111006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE2AN" , 0x00111007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RE3AN" , 0x00111008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RE2AN" , 0x00111009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VD3AN" , 0x00111012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD2AN" , 0x00111013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD1AN" , 0x00111014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD3AN" , 0x00111015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD2AN" , 0x00111016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110RD1AN" , 0x00111017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VC2AN" , 0x00111021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110VC1AN" , 0x00111022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC2AN" , 0x00111023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC1AN" , 0x00111024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VF3AN" , 0x00112000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120VF2AN" , 0x00112001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120RF3AN" , 0x00112002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120RF2AN" , 0x00112003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120LF3AN" , 0x00112004, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120LF2AN" , 0x00112005, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO120VE3AN" , 0x00112006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE2AN" , 0x00112007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120RE3AN" , 0x00112008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120RE2AN" , 0x00112009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE3AN" , 0x00112010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE2AN" , 0x00112011, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VD3AN" , 0x00112012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD2AN" , 0x00112013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD1AN" , 0x00112014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD3AN" , 0x00112015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD2AN" , 0x00112016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD1AN" , 0x00112017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD3AN" , 0x00112018, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD2AN" , 0x00112019, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD1AN" , 0x00112020, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VC2AN" , 0x00112021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VC1AN" , 0x00112022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC2AN" , 0x00112023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC1AN" , 0x00112024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC2AN" , 0x00112025, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC1AN" , 0x00112026, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VF3AN" , 0x00113000, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130VF2AN" , 0x00113001, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130SF3AN" , 0x00113002, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130SF2AN" , 0x00113003, NUMICRO_BANKS_NANO(256*1024)},
- {"NANO130VE3AN" , 0x00113006, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130VE2AN" , 0x00113007, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130SE3AN" , 0x00113008, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130SE2AN" , 0x00113009, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO130VD3AN" , 0x00113012, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD2AN" , 0x00113013, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD1AN" , 0x00113014, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD3AN" , 0x00113015, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD2AN" , 0x00113016, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD1AN" , 0x00113017, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VC2AN" , 0x00113021, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VC1AN" , 0x00113022, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC2AN" , 0x00113023, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC1AN" , 0x00113024, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100KE3BN" , 0x00110030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100KE2BN" , 0x00110031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE3BN" , 0x00110032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100VE2BN" , 0x00110033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100SE3BN" , 0x00110034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100SE2BN" , 0x00110035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE3BN" , 0x00110036, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100LE2BN" , 0x00110037, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO100KD3BN" , 0x00110038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100KD2BN" , 0x00110039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD3BN" , 0x0011003A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100VD2BN" , 0x0011003B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100SD3BN" , 0x0011003C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100SD2BN" , 0x0011003D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD3BN" , 0x0011003E, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100LD2BN" , 0x0011003F, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO100KC2BN" , 0x00110040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100VC2BN" , 0x00110041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100SC2BN" , 0x00110042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO100LC2BN" , 0x00110043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110KE3BN" , 0x00111030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110KE2BN" , 0x00111031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE3BN" , 0x00111032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110VE2BN" , 0x00111033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110SE3BN" , 0x00111034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110SE2BN" , 0x00111035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110KD3BN" , 0x00111038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110KD2BN" , 0x00111039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD3BN" , 0x0011103A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110VD2BN" , 0x0011103B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110SD3BN" , 0x0011103C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110SD2BN" , 0x0011103D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO110KC2BN" , 0x00111040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110VC2BN" , 0x00111041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110SC2BN" , 0x00111042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120KE3BN" , 0x00112030, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120KE2BN" , 0x00112031, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE3BN" , 0x00112032, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120VE2BN" , 0x00112033, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120SE3BN" , 0x00112034, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120SE2BN" , 0x00112035, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE3BN" , 0x00112036, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120LE2BN" , 0x00112037, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO120KD3BN" , 0x00112038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120KD2BN" , 0x00112039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD3BN" , 0x0011203A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120VD2BN" , 0x0011203B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD3BN" , 0x0011203C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120SD2BN" , 0x0011203D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD3BN" , 0x0011203E, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120LD2BN" , 0x0011203F, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO120KC2BN" , 0x00112040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120VC2BN" , 0x00112041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120SC2BN" , 0x00112042, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO120LC2BN" , 0x00112043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130KE3BN" , 0x00113030, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130KE2BN" , 0x00113031, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130VE3BN" , 0x00113032, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130VE2BN" , 0x00113033, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130SE3BN" , 0x00113034, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130SE2BN" , 0x00113035, NUMICRO_BANKS_NANO(123*1024)},
- {"NANO130KD3BN" , 0x00113038, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130KD2BN" , 0x00113039, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD3BN" , 0x0011303A, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130VD2BN" , 0x0011303B, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD3BN" , 0x0011303C, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130SD2BN" , 0x0011303D, NUMICRO_BANKS_NANO(64*1024)},
- {"NANO130KC2BN" , 0x00113040, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130VC2BN" , 0x00113041, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO130SC2BN" , 0x00113042, NUMICRO_BANKS_NANO(32*1024)},
- {"N512DC4" , 0x00100000, NUMICRO_BANKS_NANO(64*1024)},
- {"N512LC4" , 0x00100001, NUMICRO_BANKS_NANO(64*1024)},
- {"N512MC4" , 0x00100003, NUMICRO_BANKS_NANO(64*1024)},
-
- {"N512SC4" , 0x00100005, NUMICRO_BANKS_NANO(64*1024)},
- {"N512VD4" , 0x00100008, NUMICRO_BANKS_NANO(128*1024)},
- {"N512MD4" , 0x00100009, NUMICRO_BANKS_NANO(128*1024)},
- {"N512SD4" , 0x00100010, NUMICRO_BANKS_NANO(128*1024)},
- {"NANO110RC2BN" , 0x00111043, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO110RD3BN" , 0x00111045, NUMICRO_BANKS_NANO(64*1024)},
- {"TX110VE3BN" , 0x00111036, NUMICRO_BANKS_NANO(128*1024)},
-
- /* NANO102/NANO112 */
- {"NANO112LB0AN" , 0x00111201, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112LB1AN" , 0x00111202, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112LC1AN" , 0x00111203, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112LC2AN" , 0x00111204, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112SB0AN" , 0x00111205, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112SB1AN" , 0x00111206, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112SC1AN" , 0x00111207, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112SC2AN" , 0x00111208, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112RB0AN" , 0x00111209, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112RB1AN" , 0x00111210, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112RC1AN" , 0x00111211, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112RC2AN" , 0x00111212, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112VB0AN" , 0x00111213, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112VB1AN" , 0x00111214, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO112VC1AN" , 0x00111215, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO112VC2AN" , 0x00111216, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102ZB0AN" , 0x00110201, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102ZB1AN" , 0x00110202, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102ZC1AN" , 0x00110203, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102ZC2AN" , 0x00110204, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102LB0AN" , 0x00110205, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102LB1AN" , 0x00110206, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102LC1AN" , 0x00110207, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102LC2AN" , 0x00110208, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102SB0AN" , 0x00110209, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102SB1AN" , 0x00110210, NUMICRO_BANKS_NANO(16*1024)},
- {"NANO102SC1AN" , 0x00110211, NUMICRO_BANKS_NANO(32*1024)},
- {"NANO102SC2AN" , 0x00110212, NUMICRO_BANKS_NANO(32*1024)},
-
- /* NUC103/NUC105/NUC123 */
- {"NUC123SC2AN" , 0x00012305, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123SD4AN" , 0x00012315, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC123LC2AN" , 0x00012325, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC103LC2AN" , 0x00010325, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC105LC2AN" , 0x00010525, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123LD4AN" , 0x00012335, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC103LD4AN" , 0x00010335, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC105LD4AN" , 0x00010535, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC123ZC2AN" , 0x00012345, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC103ZC2AN" , 0x00010345, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC105ZC2AN" , 0x00010545, NUMICRO_BANKS_NUC100(36*1024)},
- {"NUC123ZD4AN" , 0x00012355, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC103ZD4AN" , 0x00010355, NUMICRO_BANKS_NUC100(68*1024)},
- {"NUC105ZD4AN" , 0x00010555, NUMICRO_BANKS_NUC100(68*1024)},
-
- /* NUC200 */
- {"NUC200LC2AN" , 0x00020007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LD2AN" , 0x00020004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200LE3AN" , 0x00020000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200SC1AN" , 0x00020035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200SD2AN" , 0x00020031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200SE3AN" , 0x00020027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200VE3AN" , 0x00020018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220LC2AN" , 0x00022007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC220LD2AN" , 0x00022004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC220LE3AN" , 0x00022000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220SC1AN" , 0x00022035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC220SD2AN" , 0x00022031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC220SE3AN" , 0x00022027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC220VE3AN" , 0x00022018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230LC2AN" , 0x00023007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230LD2AN" , 0x00023004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230LE3AN" , 0x00023000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230SC1AN" , 0x00023035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230SD2AN" , 0x00023031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230SE3AN" , 0x00023027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230VE3AN" , 0x00023018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240LC2AN" , 0x00024007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240LD2AN" , 0x00024004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240LE3AN" , 0x00024000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240SC1AN" , 0x00024035, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240SD2AN" , 0x00024031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240SE3AN" , 0x00024027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240VE3AN" , 0x00024018, NUMICRO_BANKS_NUC100(128*1024)},
-
- /* NUC200 NUC2XXAE */
- {"NUC230RC1AE" , 0x40013017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LC2AE" , 0x10020007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200LD2AE" , 0x10020004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200LE3AE" , 0x10020000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200SC2AE" , 0x10020034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC200SD2AE" , 0x10020031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC200SE3AE" , 0x10020027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC200VE3AE" , 0x10020018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230LC2AE" , 0x10023007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230LD2AE" , 0x10023004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230LE3AE" , 0x10023000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230SC2AE" , 0x10023034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC230SD2AE" , 0x10023031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC230SE3AE" , 0x10023027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC230VE3AE" , 0x10023018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240LC2AE" , 0x10024007, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240LD2AE" , 0x10024004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240LE3AE" , 0x10024000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240SC2AE" , 0x10024034, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC240SD2AE" , 0x10024031, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC240SE3AE" , 0x10024027, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC240VE3AE" , 0x10024018, NUMICRO_BANKS_NUC100(128*1024)},
-
- /* NUC100 Version D */
- {"NUC100LC1DN" , 0x30010008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100LD1DN" , 0x30010005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD2DN" , 0x30010004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RC1DN" , 0x30010017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC100RD1DN" , 0x30010014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RD2DN" , 0x30010013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LD3DN" , 0x30010003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100LE3DN" , 0x30010000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100RD3DN" , 0x30010012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100RE3DN" , 0x30010009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC100VD2DN" , 0x30010022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VD3DN" , 0x30010021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC100VE3DN" , 0x30010018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120LC1DN" , 0x30012008, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120LD1DN" , 0x30012005, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD2DN" , 0x30012004, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RC1DN" , 0x30012017, NUMICRO_BANKS_NUC100(32*1024)},
- {"NUC120RD1DN" , 0x30012014, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RD2DN" , 0x30012013, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LD3DN" , 0x30012003, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120LE3DN" , 0x30012000, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120RD3DN" , 0x30012012, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120RE3DN" , 0x30012009, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC120VD2DN" , 0x30012022, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VD3DN" , 0x30012021, NUMICRO_BANKS_NUC100(64*1024)},
- {"NUC120VE3DN" , 0x30012018, NUMICRO_BANKS_NUC100(128*1024)},
- {"NUC130RC1DN" , 0x30013017, NUMICRO_BANKS_NUC100(32*1024)},
-
- {"UNKNOWN" , 0x00000000, NUMICRO_BANKS_NUC100(128*1024)},
+ /* M051AN */
+ {"M052LAN", 0x00005200, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054LAN", 0x00005400, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058LAN", 0x00005800, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516LAN", 0x00005A00, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052ZAN", 0x00005203, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054ZAN", 0x00005403, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058ZAN", 0x00005803, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516ZAN", 0x00005A03, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+
+ /* M051BN */
+ {"M052LBN", 0x10005200, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054LBN", 0x10005400, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058LBN", 0x10005800, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516LBN", 0x10005A00, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052ZBN", 0x10005203, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054ZBN", 0x10005403, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058ZBN", 0x10005803, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516ZBN", 0x10005A03, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+
+ /* M051DN */
+ {"M0516LDN", 0x20005A00, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516ZDN", 0x20005A03, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052LDN", 0x20005200, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052ZDN", 0x20005203, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054LDN", 0x20005400, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054ZDN", 0x20005403, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058LDN", 0x20005800, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058ZDN", 0x20005803, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+
+ /* M051DE */
+ {"M0516LDE", 0x30005A00, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M0516ZDE", 0x30005A03, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052LDE", 0x30005200, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M052ZDE", 0x30005203, NUMICRO_BANKS_GENERAL(8 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054LDE", 0x30005400, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M054ZDE", 0x30005403, NUMICRO_BANKS_GENERAL(16 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058LDE", 0x30005800, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"M058ZDE", 0x30005803, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+
+ /* M0518 */
+ {"M0518LC2AE", 0x10051803, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M0518LD2AE", 0x10051800, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M0518SC2AE", 0x10051813, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M0518SD2AE", 0x10051810, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* M0519 */
+ {"M0519LD3AE", 0x00051902, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"M0519LE3AE", 0x00051900, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"M0519SD3AE", 0x00051922, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"M0519SE3AE", 0x00051920, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"M0519VE3AE", 0x00051930, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+
+ /* M058S */
+ {"M058SFAN", 0x00005818, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M058SLAN", 0x00005810, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M058SSAN", 0x00005816, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"M058SZAN", 0x00005813, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* MINI51AN */
+ {"MINI51LAN", 0x00205100, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI51TAN", 0x00205104, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI51ZAN", 0x00205103, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52LAN", 0x00205200, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52TAN", 0x00205204, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52ZAN", 0x00205203, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54LAN", 0x00205400, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54TAN", 0x00205404, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54ZAN", 0x00205403, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+
+ /* MINI51DE */
+ {"MINI51FDE", 0x20205105, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI51LDE", 0x20205100, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI51TDE", 0x20205104, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI51ZDE", 0x20205103, NUMICRO_BANKS_GENERAL(4 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52FDE", 0x20205205, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52LDE", 0x20205200, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52TDE", 0x20205204, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI52ZDE", 0x20205203, NUMICRO_BANKS_GENERAL(8 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54FDE", 0x20205405, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54LDE", 0x20205400, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54TDE", 0x20205404, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+ {"MINI54ZDE", 0x20205403, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+
+ /* MINI55 */
+ {"MINI55LDE", 0x00505500, NUMICRO_BANKS_GENERAL(35 * 512, 0 * 1024, 2 * 1024, 8)},
+ {"MINI55ZDE", 0x00505503, NUMICRO_BANKS_GENERAL(35 * 512, 0 * 1024, 2 * 1024, 8)},
+
+ /* MINI58 */
+ {"MINI58FDE", 0x00A05805, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 5 * 512, 8)},
+ {"MINI58LDE", 0x00A05800, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 5 * 512, 8)},
+ {"MINI58TDE", 0x00A05804, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 5 * 512, 8)},
+ {"MINI58ZDE", 0x00A05803, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 5 * 512, 8)},
+
+ /* NANO100AN */
+ {"NANO100LC2AN", 0x00110025, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LD2AN", 0x00110019, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LD3AN", 0x00110018, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SC2AN", 0x00110023, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SD2AN", 0x00110016, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SD3AN", 0x00110015, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100VD2AN", 0x00110013, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100VD3AN", 0x00110012, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100ZC2AN", 0x00110029, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100ZD2AN", 0x00110028, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100ZD3AN", 0x00110027, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LC2AN", 0x00112025, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LD2AN", 0x00112019, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LD3AN", 0x00112018, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SC2AN", 0x00112023, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SD2AN", 0x00112016, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SD3AN", 0x00112015, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120VD2AN", 0x00112013, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120VD3AN", 0x00112012, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120ZC2AN", 0x00112029, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120ZD2AN", 0x00112028, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120ZD3AN", 0x00112027, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NANO100BN */
+ {"NANO100KC2BN", 0x00110040, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100KD2BN", 0x00110039, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100KD3BN", 0x00110038, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100KE3BN", 0x00110030, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LC2BN", 0x00110043, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LD2BN", 0x0011003F, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LD3BN", 0x0011003E, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100LE3BN", 0x00110036, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100ND2BN", 0x00110046, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100ND3BN", 0x00110045, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100NE3BN", 0x00110044, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SC2BN", 0x00110042, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SD2BN", 0x0011003D, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SD3BN", 0x0011003C, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO100SE3BN", 0x00110034, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110KC2BN", 0x00111040, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110KD2BN", 0x00111039, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110KD3BN", 0x00111038, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110KE3BN", 0x00111030, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110RC2BN", 0x00111043, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110RD2BN", 0x00111044, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110RD3BN", 0x00111045, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110SC2BN", 0x00111042, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110SD2BN", 0x0011103D, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110SD3BN", 0x0011103C, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO110SE3BN", 0x00111034, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120KC2BN", 0x00112040, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120KD2BN", 0x00112039, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120KD3BN", 0x00112038, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120KE3BN", 0x00112030, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LC2BN", 0x00112043, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LD2BN", 0x0011203F, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LD3BN", 0x0011203E, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120LE3BN", 0x00112036, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SC2BN", 0x00112042, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SD2BN", 0x0011203D, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SD3BN", 0x0011203C, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO120SE3BN", 0x00112034, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130KC2BN", 0x00113040, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130KD2BN", 0x00113039, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130KD3BN", 0x00113038, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130KE3BN", 0x00113030, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130SC2BN", 0x00113042, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130SD2BN", 0x0011303D, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130SD3BN", 0x0011303C, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO130SE3BN", 0x00113034, NUMICRO_BANKS_GENERAL(123 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NANO103 */
+ {"NANO103SD3AE", 0x00110301, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO103LD3AE", 0x00110304, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO103ZD3AE", 0x00110307, NUMICRO_BANKS_GENERAL(64 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NANO112AN */
+ {"NANO102LB1AN", 0x00110206, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO102LC2AN", 0x00110208, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO102SC2AN", 0x00110212, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO102ZB1AN", 0x00110202, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO102ZC2AN", 0x00110204, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112LB1AN", 0x00111202, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112LC2AN", 0x00111204, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112RB1AN", 0x00111210, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112RC2AN", 0x00111212, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112SB1AN", 0x00111206, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112SC2AN", 0x00111208, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NANO112VC2AN", 0x00111216, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC029AN */
+ {"NUC029LAN", 0x00295A00, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 4)},
+ {"NUC029TAN", 0x00295804, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 4)},
+
+ /* NUC029AE */
+ {"NUC029FAE", 0x00295415, NUMICRO_BANKS_GENERAL(16 * 1024, 0 * 1024, 2 * 1024, 8)},
+
+ /* NUC100AN */
+ {"NUC100LD3AN", 0x00010003, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LE3AN", 0x00010000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC100RD3AN", 0x00010012, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RE3AN", 0x00010009, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC100VD2AN", 0x00010022, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100VD3AN", 0x00010021, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100VE3AN", 0x00100018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120LD3AN", 0x00012003, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LE3AN", 0x00120000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120RD3AN", 0x00012012, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RE3AN", 0x00012009, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120VD2AN", 0x00012022, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120VD3AN", 0x00012021, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120VE3AN", 0x00012018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC100BN */
+ {"NUC100LC1BN", 0x10010008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LD1BN", 0x10010005, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LD2BN", 0x10010004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RC1BN", 0x10010017, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RD1BN", 0x10010014, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RD2BN", 0x10010013, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LC1BN", 0x10012008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LD1BN", 0x10012005, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LD2BN", 0x10012004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RC1BN", 0x10012017, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RD1BN", 0x10012014, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RD2BN", 0x10012013, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* NUC100CN */
+ {"NUC130LC1CN", 0x20013008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC130LD2CN", 0x20013004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC130LE3CN", 0x20013000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC130RC1CN", 0x20013017, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC130RD2CN", 0x20013013, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC130RE3CN", 0x20013009, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC130VE3CN", 0x20013018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC140LC1CN", 0x20014008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC140LD2CN", 0x20014004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC140LE3CN", 0x20014000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC140RC1CN", 0x20014017, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC140RD2CN", 0x20014013, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC140RE3CN", 0x20014009, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC140VE3CN", 0x20014018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC100DN */
+ {"NUC100LC1DN", 0x30010008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LD1DN", 0x30010005, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LD2DN", 0x30010004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LD3DN", 0x30010003, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100LE3DN", 0x30010000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC100RC1DN", 0x30010017, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RD1DN", 0x30010014, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RD2DN", 0x30010013, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RD3DN", 0x30010012, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100RE3DN", 0x30010009, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC100VD2DN", 0x30010022, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100VD3DN", 0x30010021, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC100VE3DN", 0x30010018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120LC1DN", 0x30012008, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LD1DN", 0x30012005, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LD2DN", 0x30012004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LD3DN", 0x30012003, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120LE3DN", 0x30012000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120RC1DN", 0x30012035, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RD1DN", 0x30012032, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RD2DN", 0x30012031, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RD3DN", 0x30012030, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120RE3DN", 0x30012027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC120VD2DN", 0x30012022, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120VD3DN", 0x30012021, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC120VE3DN", 0x30012018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC121 */
+ {"NUC121SC2AE", 0x00012105, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+ {"NUC121LC2AE", 0x00012125, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+ {"NUC121ZC2AE", 0x00012145, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+ {"NUC125SC2AE", 0x00012505, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+ {"NUC125LC2AE", 0x00012525, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+ {"NUC125ZC2AE", 0x00012545, NUMICRO_BANKS_GENERAL(32 * 1024, 0 * 1024, 9 * 512, 8)},
+
+ /* NUC122 */
+ {"NUC122LC1AN", 0x00012208, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC122LD2AN", 0x00012204, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC122SC1AN", 0x00012226, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC122SD2AN", 0x00012222, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC122ZC1AN", 0x00012235, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC122ZD2AN", 0x00012231, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* NUC123AN */
+ {"NUC123LC2AN1", 0x00012325, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123LD4AN0", 0x00012335, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123SC2AN1", 0x00012305, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123SD4AN0", 0x00012315, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123ZC2AN1", 0x00012345, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123ZD4AN0", 0x00012355, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* NUC123AE */
+ {"NUC123LC2AE1", 0x10012325, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123LD4AE0", 0x10012335, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123SC2AE1", 0x10012305, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123SD4AE0", 0x10012315, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123ZC2AE1", 0x10012345, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC123ZD4AE0", 0x10012355, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* NUC131AE */
+ {"NUC131LC2AE", 0x10013103, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC131LD2AE", 0x10013100, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC131SC2AE", 0x10013113, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC131SD2AE", 0x10013110, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+
+ /* NUC200/220AN */
+ {"NUC200LC2AN", 0x00020007, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC200LD2AN", 0x00020004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC200LE3AN", 0x00020000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC200SC2AN", 0x00020034, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC200SD2AN", 0x00020031, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC200SE3AN", 0x00020027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC200VE3AN", 0x00020018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC220LC2AN", 0x00022007, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC220LD2AN", 0x00022004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC220LE3AN", 0x00022000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC220SC2AN", 0x00022034, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC220SD2AN", 0x00022031, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 4 * 1024, 8)},
+ {"NUC220SE3AN", 0x00022027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"NUC220VE3AN", 0x00022018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC230/240AE */
+ {"NUC230LC2AE", 0x10023007, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC230LD2AE", 0x10023004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC230LE3AE", 0x10023000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"NUC230SC2AE", 0x10023034, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC230SD2AE", 0x10023031, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC230SE3AE", 0x10023027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"NUC230VE3AE", 0x10023018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"NUC240LC2AE", 0x10024007, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC240LD2AE", 0x10024004, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC240LE3AE", 0x10024000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"NUC240SC2AE", 0x10024034, NUMICRO_BANKS_GENERAL(32 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC240SD2AE", 0x10024031, NUMICRO_BANKS_GENERAL(64 * 1024, 4 * 1024, 8 * 1024, 8)},
+ {"NUC240SE3AE", 0x10024027, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+ {"NUC240VE3AE", 0x10024018, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 8 * 1024, 8)},
+
+ /* M451 */
+ {"M451LC3AE", 0x00945101, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LD3AE", 0x00945100, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LE6AE", 0x00845101, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451LG6AE", 0x00845100, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLC3AE", 0x00945001, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLD3AE", 0x00945000, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLE6AE", 0x00845001, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MLG6AE", 0x00845000, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MSC3AE", 0x00945011, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451MSD3AE", 0x00945010, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RC3AE", 0x00945121, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RD3AE", 0x00945120, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RE6AE", 0x00845121, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451RG6AE", 0x00845120, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451VE6AE", 0x00845131, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M451VG6AE", 0x00845130, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LC3AE", 0x00945201, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LD3AE", 0x00945200, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LE6AE", 0x00845201, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452LG6AE", 0x00845200, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RD3AE", 0x00945220, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RE6AE", 0x00845221, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M452RG6AE", 0x00845220, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LC3AE", 0x00945301, NUMICRO_BANKS_GENERAL(40 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LD3AE", 0x00945300, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LE6AE", 0x00845301, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453LG6AE", 0x00845300, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RD3AE", 0x00945320, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RE6AE", 0x00845321, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453RG6AE", 0x00845320, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VD3AE", 0x00945330, NUMICRO_BANKS_GENERAL(72 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VE6AE", 0x00845331, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M453VG6AE", 0x00845330, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKVG6AE", 0x00845430, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKVE6AE", 0x00845431, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKRG6AE", 0x00845420, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKRE6AE", 0x00845421, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKLG6AE", 0x00845400, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 4 * 1024, 8)},
+ {"M4TKLE6AE", 0x00845401, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 4 * 1024, 8)},
+
+ /* NUC442_472 */
+ {"NUC442JG8AE", 0x00044203, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442JI8AE", 0x00044201, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442KG8AE", 0x00044206, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442KI8AE", 0x00044204, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442RG8AE", 0x00044212, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442RI8AE", 0x00044210, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442VG8AE", 0x00044209, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC442VI8AE", 0x00044207, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472HG8AE", 0x00047203, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472HI8AE", 0x00047201, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472JG8AE", 0x00047206, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472JI8AE", 0x00047204, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472KG8AE", 0x00047209, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472KI8AE", 0x00047207, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472VG8AE", 0x00047212, NUMICRO_BANKS_GENERAL(256 * 1024, 0 * 1024, 16 * 1024, 16)},
+ {"NUC472VI8AE", 0x00047210, NUMICRO_BANKS_GENERAL(512 * 1024, 0 * 1024, 16 * 1024, 16)},
+
+ {"UNKNOWN", 0x00000000, NUMICRO_BANKS_GENERAL(128 * 1024, 0 * 1024, 16 * 1024, 8)},
};
/* Private bank information for NuMicro. */
@@ -1125,32 +535,53 @@ struct numicro_flash_bank {
const struct numicro_cpu_type *cpu;
};
+/* Private variables */
+uint32_t m_page_size = NUMICRO_PAGESIZE;
+uint32_t m_address_bias_offset;
+
/* Private methods */
+static int numicro_get_arm_arch(struct target *target)
+{
+ struct armv7m_common *armv7m = target_to_armv7m(target);
+
+ if (armv7m->arm.arch != ARM_ARCH_V6M) {
+ LOG_DEBUG("NuMicro arm architecture: armv7m\n");
+ m_page_size = NUMICRO_PAGESIZE * 4;
+ m_address_bias_offset = 0x10000000;
+ } else {
+ LOG_DEBUG("NuMicro arm architecture: armv6m\n");
+ m_page_size = NUMICRO_PAGESIZE;
+ m_address_bias_offset = 0x0;
+ }
+
+ return ERROR_OK;
+}
+
static int numicro_reg_unlock(struct target *target)
{
uint32_t is_protected;
int retval = ERROR_OK;
/* Check to see if NUC is register unlocked or not */
- retval = target_read_u32(target, NUMICRO_SYS_WRPROT, &is_protected);
+ retval = target_read_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, &is_protected);
if (retval != ERROR_OK)
return retval;
LOG_DEBUG("protected = 0x%08" PRIx32 "", is_protected);
if (is_protected == 0) { /* means protected - so unlock it */
/* unlock flash registers */
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY1);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY1);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY2);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY2);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_SYS_WRPROT, REG_KEY3);
+ retval = target_write_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, REG_KEY3);
if (retval != ERROR_OK)
return retval;
}
/* Check that unlock worked */
- retval = target_read_u32(target, NUMICRO_SYS_WRPROT, &is_protected);
+ retval = target_read_u32(target, NUMICRO_SYS_WRPROT - m_address_bias_offset, &is_protected);
if (retval != ERROR_OK)
return retval;
@@ -1178,27 +609,27 @@ static int numicro_init_isp(struct target *target)
return retval;
/* Enable ISP/SRAM/TICK Clock */
- retval = target_read_u32(target, NUMICRO_SYSCLK_AHBCLK, &reg_stat);
+ retval = target_read_u32(target, NUMICRO_SYSCLK_AHBCLK - m_address_bias_offset, &reg_stat);
if (retval != ERROR_OK)
return retval;
reg_stat |= AHBCLK_ISP_EN | AHBCLK_SRAM_EN | AHBCLK_TICK_EN;
- retval = target_write_u32(target, NUMICRO_SYSCLK_AHBCLK, reg_stat);
+ retval = target_write_u32(target, NUMICRO_SYSCLK_AHBCLK - m_address_bias_offset, reg_stat);
if (retval != ERROR_OK)
return retval;
/* Enable ISP */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, &reg_stat);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, &reg_stat);
if (retval != ERROR_OK)
return retval;
reg_stat |= ISPCON_ISPFF | ISPCON_LDUEN | ISPCON_APUEN | ISPCON_CFGUEN | ISPCON_ISPEN;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, reg_stat);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, reg_stat);
if (retval != ERROR_OK)
return retval;
/* Write one to undocumented flash control register */
- retval = target_write_u32(target, NUMICRO_FLASH_CHEAT, 1);
+ retval = target_write_u32(target, NUMICRO_FLASH_CHEAT - m_address_bias_offset, 1);
if (retval != ERROR_OK)
return retval;
@@ -1210,29 +641,28 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad
uint32_t timeout, status;
int retval = ERROR_OK;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, cmd);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, cmd);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPDAT, wdata);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPDAT - m_address_bias_offset, wdata);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, addr);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPADR - m_address_bias_offset, addr);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, ISPTRG_ISPGO);
if (retval != ERROR_OK)
return retval;
/* Wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if ((status & (ISPTRG_ISPGO)) == 0)
break;
if (timeout-- <= 0) {
@@ -1242,79 +672,28 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad
busy_sleep(1); /* can use busy sleep for short times. */
}
- retval = target_read_u32(target, NUMICRO_FLASH_ISPDAT, rdata);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPDAT - m_address_bias_offset, rdata);
if (retval != ERROR_OK)
return retval;
return ERROR_OK;
}
-
/* NuMicro Program-LongWord Microcodes */
static const uint8_t numicro_flash_write_code[] = {
- /* Params:
- * r0 - workarea buffer / result
- * r1 - target address
- * r2 - wordcount
- * Clobbered:
- * r4 - tmp
- * r5 - tmp
- * r6 - tmp
- * r7 - tmp
- */
-
- /* .L1: */
- /* for(register uint32_t i=0;i<wcount;i++){ */
- 0x04, 0x1C, /* mov r4, r0 */
- 0x00, 0x23, /* mov r3, #0 */
- /* .L2: */
- 0x0D, 0x1A, /* sub r5, r1, r0 */
- 0x67, 0x19, /* add r7, r4, r7 */
- 0x93, 0x42, /* cmp r3, r2 */
- 0x0C, 0xD0, /* beq .L7 */
- /* .L4: */
- /* NUMICRO_FLASH_ISPADR = faddr; */
- 0x08, 0x4E, /* ldr r6, .L8 */
- 0x37, 0x60, /* str r7, [r6] */
- /* NUMICRO_FLASH_ISPDAT = *pLW; */
- 0x80, 0xCC, /* ldmia r4!, {r7} */
- 0x08, 0x4D, /* ldr r5, .L8+4 */
- 0x2F, 0x60, /* str r7, [r5] */
- /* faddr += 4; */
- /* pLW++; */
- /* Trigger write action */
- /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
- 0x08, 0x4D, /* ldr r5, .L8+8 */
- 0x01, 0x26, /* mov r6, #1 */
- 0x2E, 0x60, /* str r6, [r5] */
- /* .L3: */
- /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
- 0x2F, 0x68, /* ldr r7, [r5] */
- 0xFF, 0x07, /* lsl r7, r7, #31 */
- 0xFC, 0xD4, /* bmi .L3 */
-
- 0x01, 0x33, /* add r3, r3, #1 */
- 0xEE, 0xE7, /* b .L2 */
- /* .L7: */
- /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
- 0x05, 0x4B, /* ldr r3, .L8+12 */
- 0x18, 0x68, /* ldr r0, [r3] */
- 0x40, 0x21, /* mov r1, #64 */
- 0x08, 0x40, /* and r0, r1 */
- /* .L9: */
- 0x00, 0xBE, /* bkpt #0 */
- /* .L8: */
- 0x04, 0xC0, 0x00, 0x50,/* .word 1342226436 */
- 0x08, 0xC0, 0x00, 0x50,/* .word 1342226440 */
- 0x10, 0xC0, 0x00, 0x50,/* .word 1342226448 */
- 0x00, 0xC0, 0x00, 0x50 /* .word 1342226432 */
+#include "../../../contrib/loaders/flash/numicro/numicro_m0.inc"
};
+
+static const uint8_t numicro_m4_flash_write_code[] = {
+#include "../../../contrib/loaders/flash/numicro/numicro_m4.inc"
+};
+
/* Program LongWord Block Write */
static int numicro_writeblock(struct flash_bank *bank, const uint8_t *buffer,
uint32_t offset, uint32_t count)
{
struct target *target = bank->target;
- uint32_t buffer_size = 1024; /* Default minimum value */
+ uint32_t buffer_size = 1024; /* Default minimum value */
struct working_area *write_algorithm;
struct working_area *source;
uint32_t address = bank->base + offset;
@@ -1342,18 +721,34 @@ static int numicro_writeblock(struct flash_bank *bank, const uint8_t *buffer,
LOG_WARNING("offset 0x%" PRIx32 " breaks required 2-byte alignment", offset);
return ERROR_FLASH_DST_BREAKS_ALIGNMENT;
}
+ /* Difference between M0 and M4 */
+ if (m_page_size == NUMICRO_PAGESIZE) {
+ /* allocate working area with flash programming code */
+ if (target_alloc_working_area(target, sizeof(numicro_flash_write_code),
+ &write_algorithm) != ERROR_OK) {
+ LOG_WARNING("no working area available, can't do block memory writes");
+ return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
+ }
- /* allocate working area with flash programming code */
- if (target_alloc_working_area(target, sizeof(numicro_flash_write_code),
+ retval = target_write_buffer(target, write_algorithm->address,
+ sizeof(numicro_flash_write_code), numicro_flash_write_code);
+ if (retval != ERROR_OK)
+ return retval;
+ } else { /* for M4 */
+ /* allocate working area with flash programming code */
+ if (target_alloc_working_area(target, sizeof(numicro_m4_flash_write_code),
&write_algorithm) != ERROR_OK) {
- LOG_WARNING("no working area available, can't do block memory writes");
- return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
- }
+ LOG_WARNING("no working area available, can't do block memory writes");
+ return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
+ }
- retval = target_write_buffer(target, write_algorithm->address,
- sizeof(numicro_flash_write_code), numicro_flash_write_code);
- if (retval != ERROR_OK)
- return retval;
+ retval = target_write_buffer(target, write_algorithm->address,
+ sizeof(numicro_m4_flash_write_code), numicro_m4_flash_write_code);
+ if (retval != ERROR_OK)
+ return retval;
+
+ buffer_size = m_page_size;
+ }
/* memory buffer */
while (target_alloc_working_area(target, buffer_size, &source) != ERROR_OK) {
@@ -1424,13 +819,14 @@ static int numicro_protect_check(struct flash_bank *bank)
LOG_INFO("Nuvoton NuMicro: Flash Lock Check...");
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
/* Read CONFIG0,CONFIG1 */
- numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG0, 0 , &config[0]);
- numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG1, 0 , &config[1]);
+ numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG0 - m_address_bias_offset, 0, &config[0]);
+ numicro_fmc_cmd(target, ISPCMD_READ, NUMICRO_CONFIG1 - m_address_bias_offset, 0, &config[1]);
LOG_DEBUG("CONFIG0: 0x%" PRIx32 ",CONFIG1: 0x%" PRIx32 "", config[0], config[1]);
@@ -1470,31 +866,34 @@ static int numicro_erase(struct flash_bank *bank, unsigned int first,
LOG_INFO("Nuvoton NuMicro: Sector Erase ... (%u to %u)", first, last);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, ISPCMD_ERASE);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, ISPCMD_ERASE);
if (retval != ERROR_OK)
return retval;
for (unsigned int i = first; i <= last; i++) {
- LOG_DEBUG("erasing sector %u at address " TARGET_ADDR_FMT, i,
- bank->base + bank->sectors[i].offset);
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + bank->sectors[i].offset);
+ LOG_DEBUG("erasing sector %u at address " TARGET_ADDR_FMT, i, bank->base + bank->sectors[i].offset);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPADR - m_address_bias_offset,
+ bank->base + bank->sectors[i].offset);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO); /* This is the only bit available */
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ ISPTRG_ISPGO); /* This is the only bit available */
if (retval != ERROR_OK)
return retval;
/* wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if (status == 0)
break;
if (timeout-- <= 0) {
@@ -1505,13 +904,13 @@ static int numicro_erase(struct flash_bank *bank, unsigned int first,
}
/* check for failure */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
if ((status & ISPCON_ISPFF) != 0) {
LOG_DEBUG("failure: 0x%" PRIx32 "", status);
/* if bit is set, then must write to it to clear it. */
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
}
@@ -1538,11 +937,12 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
LOG_INFO("Nuvoton NuMicro: Flash Write ...");
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD, ISPCMD_WRITE);
+ retval = target_write_u32(target, NUMICRO_FLASH_ISPCMD - m_address_bias_offset, ISPCMD_WRITE);
if (retval != ERROR_OK)
return retval;
@@ -1562,26 +962,34 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
/* program command */
for (uint32_t i = 0; i < count; i += 4) {
+ /* write 4 bytes each time with 0xff padding to avoid unaligned case */
+ uint8_t padding[4] = {0xff, 0xff, 0xff, 0xff};
+ memcpy(padding, buffer + i, MIN(4, count - i));
- LOG_DEBUG("write longword @ %08" PRIX32, offset + i);
-
- retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + offset + i);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPADR - m_address_bias_offset,
+ bank->base + offset + i);
if (retval != ERROR_OK)
return retval;
- retval = target_write_memory(target, NUMICRO_FLASH_ISPDAT, 4, 1, buffer + i);
+ retval = target_write_memory(target,
+ NUMICRO_FLASH_ISPDAT - m_address_bias_offset,
+ 4, 1, padding);
if (retval != ERROR_OK)
return retval;
- retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ ISPTRG_ISPGO);
if (retval != ERROR_OK)
return retval;
/* wait for busy to clear - check the GO flag */
timeout = 100;
for (;;) {
- retval = target_read_u32(target, NUMICRO_FLASH_ISPTRG, &status);
+ retval = target_read_u32(target,
+ NUMICRO_FLASH_ISPTRG - m_address_bias_offset,
+ &status);
if (retval != ERROR_OK)
return retval;
- LOG_DEBUG("status: 0x%" PRIx32 "", status);
if (status == 0)
break;
if (timeout-- <= 0) {
@@ -1595,13 +1003,15 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
}
/* check for failure */
- retval = target_read_u32(target, NUMICRO_FLASH_ISPCON, &status);
+ retval = target_read_u32(target, NUMICRO_FLASH_ISPCON - m_address_bias_offset, &status);
if (retval != ERROR_OK)
return retval;
if ((status & ISPCON_ISPFF) != 0) {
LOG_DEBUG("failure: 0x%" PRIx32 "", status);
/* if bit is set, then must write to it to clear it. */
- retval = target_write_u32(target, NUMICRO_FLASH_ISPCON, (status | ISPCON_ISPFF));
+ retval = target_write_u32(target,
+ NUMICRO_FLASH_ISPCON - m_address_bias_offset,
+ (status | ISPCON_ISPFF));
if (retval != ERROR_OK)
return retval;
} else {
@@ -1619,8 +1029,9 @@ static int numicro_get_cpu_type(struct target *target, const struct numicro_cpu_
uint32_t part_id;
int retval = ERROR_OK;
+ numicro_get_arm_arch(target);
/* Read NuMicro PartID */
- retval = target_read_u32(target, NUMICRO_SYS_BASE, &part_id);
+ retval = target_read_u32(target, NUMICRO_SYS_BASE - m_address_bias_offset, &part_id);
if (retval != ERROR_OK) {
LOG_WARNING("NuMicro flash driver: Failed to Get PartID\n");
return ERROR_FLASH_OPERATION_FAILED;
@@ -1672,7 +1083,7 @@ static int numicro_probe(struct flash_bank *bank)
return ERROR_FLASH_OPERATION_FAILED;
}
- num_pages = flash_size / NUMICRO_PAGESIZE;
+ num_pages = flash_size / m_page_size;
bank->num_sectors = num_pages;
bank->sectors = malloc(sizeof(struct flash_sector) * num_pages);
@@ -1680,10 +1091,10 @@ static int numicro_probe(struct flash_bank *bank)
for (int i = 0; i < num_pages; i++) {
bank->sectors[i].offset = offset;
- bank->sectors[i].size = NUMICRO_PAGESIZE;
+ bank->sectors[i].size = m_page_size;
bank->sectors[i].is_erased = -1;
bank->sectors[i].is_protected = 0;
- offset += NUMICRO_PAGESIZE;
+ offset += m_page_size;
}
struct numicro_flash_bank *numicro_info = bank->driver_priv;
@@ -1722,7 +1133,6 @@ FLASH_BANK_COMMAND_HANDLER(numicro_flash_bank_command)
bank->write_start_alignment = bank->write_end_alignment = 4;
return ERROR_OK;
-
}
COMMAND_HANDLER(numicro_handle_read_isp_command)
@@ -1738,6 +1148,7 @@ COMMAND_HANDLER(numicro_handle_read_isp_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
@@ -1765,6 +1176,7 @@ COMMAND_HANDLER(numicro_handle_write_isp_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
@@ -1787,6 +1199,7 @@ COMMAND_HANDLER(numicro_handle_chip_erase_command)
struct target *target = get_current_target(CMD_CTX);
+ numicro_get_arm_arch(target);
retval = numicro_init_isp(target);
if (retval != ERROR_OK)
return retval;
diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c
index 7a6ec3f..92d511c 100644
--- a/src/flash/nor/stm32l4x.c
+++ b/src/flash/nor/stm32l4x.c
@@ -1740,7 +1740,8 @@ static int stm32l4_probe(struct flash_bank *bank)
/* Set flash write alignment boundaries.
* Ask the flash infrastructure to ensure required alignment */
- bank->write_start_alignment = bank->write_end_alignment = stm32l4_info->data_width;
+ bank->write_start_alignment = stm32l4_info->data_width;
+ bank->write_end_alignment = stm32l4_info->data_width;
/* Initialize the flash registers layout */
if (part_info->flags & F_HAS_L5_FLASH_REGS)
diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c
index 58d97d3..430af6c 100644
--- a/src/jtag/adapter.c
+++ b/src/jtag/adapter.c
@@ -132,9 +132,11 @@ int adapter_init(struct command_context *cmd_ctx)
int retval;
- if (adapter_config.clock_mode == CLOCK_MODE_UNSELECTED) {
+ /* If the adapter supports configurable speed but the speed is not configured,
+ * provide a hint to the user. */
+ if (adapter_driver->speed && adapter_config.clock_mode == CLOCK_MODE_UNSELECTED) {
LOG_WARNING("An adapter speed is not selected in the init scripts."
- " OpenOCD will try to run the adapter at the low speed (%d kHz)",
+ " OpenOCD will try to run the adapter at very low speed (%d kHz).",
DEFAULT_CLOCK_SPEED_KHZ);
LOG_WARNING("To remove this warnings and achieve reasonable communication speed with the target,"
" set \"adapter speed\" or \"jtag_rclk\" in the init scripts.");
@@ -149,7 +151,7 @@ int adapter_init(struct command_context *cmd_ctx)
adapter_config.adapter_initialized = true;
if (!adapter_driver->speed) {
- LOG_INFO("This adapter doesn't support configurable speed");
+ LOG_INFO("Note: The adapter \"%s\" doesn't support configurable speed", adapter_driver->name);
return ERROR_OK;
}
diff --git a/src/jtag/drivers/cmsis_dap.c b/src/jtag/drivers/cmsis_dap.c
index 44a7dd8..0c42a7f 100644
--- a/src/jtag/drivers/cmsis_dap.c
+++ b/src/jtag/drivers/cmsis_dap.c
@@ -160,6 +160,11 @@ static bool swd_mode;
#define CMD_DAP_TFER_BLOCK 0x06
#define CMD_DAP_TFER_ABORT 0x07
+/* DAP_TransferBlock increases the sum of command/response sizes
+ * (due to 16-bit Transfer Count) if used in a small packet.
+ * Prevent using it until we have at least r/w operations. */
+#define CMD_DAP_TFER_BLOCK_MIN_OPS 4
+
/* DAP Status Code */
#define DAP_OK 0
#define DAP_ERROR 0xFF
@@ -209,38 +214,21 @@ static const char * const info_caps_str[INFO_CAPS__NUM_CAPS] = {
"UART via USB COM port supported",
};
-struct pending_transfer_result {
- uint8_t cmd;
- uint32_t data;
- void *buffer;
-};
-
-struct pending_request_block {
- struct pending_transfer_result *transfers;
- int transfer_count;
-};
-
struct pending_scan_result {
/** Offset in bytes in the CMD_DAP_JTAG_SEQ response buffer. */
- unsigned first;
+ unsigned int first;
/** Number of bits to read. */
- unsigned length;
+ unsigned int length;
/** Location to store the result */
uint8_t *buffer;
/** Offset in the destination buffer */
- unsigned buffer_offset;
+ unsigned int buffer_offset;
};
-/* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
- * until the first response arrives */
-#define MAX_PENDING_REQUESTS 3
-
-/* Pending requests are organized as a FIFO - circular buffer */
/* Each block in FIFO can contain up to pending_queue_len transfers */
-static int pending_queue_len;
-static struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
-static int pending_fifo_put_idx, pending_fifo_get_idx;
-static int pending_fifo_block_count;
+static unsigned int pending_queue_len;
+static unsigned int tfer_max_command_size;
+static unsigned int tfer_max_response_size;
/* pointers to buffers that will receive jtag scan results on the next flush */
#define MAX_PENDING_SCAN_RESULTS 256
@@ -248,7 +236,7 @@ static int pending_scan_result_count;
static struct pending_scan_result pending_scan_results[MAX_PENDING_SCAN_RESULTS];
/* queued JTAG sequences that will be executed on the next flush */
-#define QUEUED_SEQ_BUF_LEN (cmsis_dap_handle->packet_size - 3)
+#define QUEUED_SEQ_BUF_LEN (cmsis_dap_handle->packet_usable_size - 3)
static int queued_seq_count;
static int queued_seq_buf_end;
static int queued_seq_tdo_ptr;
@@ -309,14 +297,15 @@ static void cmsis_dap_close(struct cmsis_dap *dap)
dap->backend = NULL;
}
- free(cmsis_dap_handle->packet_buffer);
- free(cmsis_dap_handle);
- cmsis_dap_handle = NULL;
+ free(dap->packet_buffer);
- for (int i = 0; i < MAX_PENDING_REQUESTS; i++) {
- free(pending_fifo[i].transfers);
- pending_fifo[i].transfers = NULL;
+ for (unsigned int i = 0; i < MAX_PENDING_REQUESTS; i++) {
+ free(dap->pending_fifo[i].transfers);
+ dap->pending_fifo[i].transfers = NULL;
}
+
+ free(cmsis_dap_handle);
+ cmsis_dap_handle = NULL;
}
static void cmsis_dap_flush_read(struct cmsis_dap *dap)
@@ -337,17 +326,17 @@ static void cmsis_dap_flush_read(struct cmsis_dap *dap)
/* Send a message and receive the reply */
static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
{
- if (pending_fifo_block_count) {
- LOG_ERROR("pending %d blocks, flushing", pending_fifo_block_count);
- while (pending_fifo_block_count) {
+ if (dap->pending_fifo_block_count) {
+ LOG_ERROR("pending %u blocks, flushing", dap->pending_fifo_block_count);
+ while (dap->pending_fifo_block_count) {
dap->backend->read(dap, 10);
- pending_fifo_block_count--;
+ dap->pending_fifo_block_count--;
}
- pending_fifo_put_idx = 0;
- pending_fifo_get_idx = 0;
+ dap->pending_fifo_put_idx = 0;
+ dap->pending_fifo_get_idx = 0;
}
- uint8_t current_cmd = cmsis_dap_handle->command[0];
+ uint8_t current_cmd = dap->command[0];
int retval = dap->backend->write(dap, txlen, LIBUSB_TIMEOUT_MS);
if (retval < 0)
return retval;
@@ -357,7 +346,7 @@ static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
if (retval < 0)
return retval;
- uint8_t *resp = cmsis_dap_handle->response;
+ uint8_t *resp = dap->response;
if (resp[0] == DAP_ERROR) {
LOG_ERROR("CMSIS-DAP command 0x%" PRIx8 " not implemented", current_cmd);
return ERROR_NOT_IMPLEMENTED;
@@ -421,7 +410,7 @@ static int cmsis_dap_cmd_dap_swj_sequence(uint8_t s_len, const uint8_t *sequence
#ifdef CMSIS_DAP_JTAG_DEBUG
LOG_DEBUG("cmsis-dap TMS sequence: len=%d", s_len);
- for (int i = 0; i < DIV_ROUND_UP(s_len, 8); ++i)
+ for (unsigned int i = 0; i < DIV_ROUND_UP(s_len, 8); ++i)
printf("%02X ", sequence[i]);
printf("\n");
@@ -760,12 +749,21 @@ static int cmsis_dap_cmd_dap_swo_data(
return ERROR_OK;
}
+
static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
{
- uint8_t *command = cmsis_dap_handle->command;
- struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
+ uint8_t *command = dap->command;
+ struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_put_idx];
- LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %d", block->transfer_count, pending_fifo_put_idx);
+ assert(dap->write_count + dap->read_count == block->transfer_count);
+
+ /* Reset packet size check counters for the next packet */
+ dap->write_count = 0;
+ dap->read_count = 0;
+
+ LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %u%s",
+ block->transfer_count, dap->pending_fifo_put_idx,
+ cmsis_dap_handle->swd_cmds_differ ? "" : ", same swd ops");
if (queued_retval != ERROR_OK) {
LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
@@ -775,12 +773,23 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
if (block->transfer_count == 0)
goto skip;
- command[0] = CMD_DAP_TFER;
+ bool block_cmd = !cmsis_dap_handle->swd_cmds_differ
+ && block->transfer_count >= CMD_DAP_TFER_BLOCK_MIN_OPS;
+ block->command = block_cmd ? CMD_DAP_TFER_BLOCK : CMD_DAP_TFER;
+
+ command[0] = block->command;
command[1] = 0x00; /* DAP Index */
- command[2] = block->transfer_count;
- size_t idx = 3;
- for (int i = 0; i < block->transfer_count; i++) {
+ unsigned int idx;
+ if (block_cmd) {
+ h_u16_to_le(&command[2], block->transfer_count);
+ idx = 4; /* The first transfer will store the common DAP register */
+ } else {
+ command[2] = block->transfer_count;
+ idx = 3;
+ }
+
+ for (unsigned int i = 0; i < block->transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
uint8_t cmd = transfer->cmd;
uint32_t data = transfer->data;
@@ -809,7 +818,9 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
data &= ~CORUNDETECT;
}
- command[idx++] = (cmd >> 1) & 0x0f;
+ if (!block_cmd || i == 0)
+ command[idx++] = (cmd >> 1) & 0x0f;
+
if (!(cmd & SWD_CMD_RNW)) {
h_u32_to_le(&command[idx], data);
idx += 4;
@@ -824,10 +835,10 @@ static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
queued_retval = ERROR_OK;
}
- pending_fifo_put_idx = (pending_fifo_put_idx + 1) % dap->packet_count;
- pending_fifo_block_count++;
- if (pending_fifo_block_count > dap->packet_count)
- LOG_ERROR("too much pending writes %d", pending_fifo_block_count);
+ dap->pending_fifo_put_idx = (dap->pending_fifo_put_idx + 1) % dap->packet_count;
+ dap->pending_fifo_block_count++;
+ if (dap->pending_fifo_block_count > dap->packet_count)
+ LOG_ERROR("too much pending writes %u", dap->pending_fifo_block_count);
return;
@@ -837,9 +848,9 @@ skip:
static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
{
- struct pending_request_block *block = &pending_fifo[pending_fifo_get_idx];
+ struct pending_request_block *block = &dap->pending_fifo[dap->pending_fifo_get_idx];
- if (pending_fifo_block_count == 0)
+ if (dap->pending_fifo_block_count == 0)
LOG_ERROR("no pending write");
/* get reply */
@@ -854,20 +865,28 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
}
uint8_t *resp = dap->response;
- if (resp[0] != CMD_DAP_TFER) {
+ if (resp[0] != block->command) {
LOG_ERROR("CMSIS-DAP command mismatch. Expected 0x%x received 0x%" PRIx8,
- CMD_DAP_TFER, resp[0]);
+ block->command, resp[0]);
queued_retval = ERROR_FAIL;
goto skip;
}
- uint8_t transfer_count = resp[1];
- uint8_t ack = resp[2] & 0x07;
- if (resp[2] & 0x08) {
+ unsigned int transfer_count;
+ unsigned int idx;
+ if (block->command == CMD_DAP_TFER_BLOCK) {
+ transfer_count = le_to_h_u16(&resp[1]);
+ idx = 3;
+ } else {
+ transfer_count = resp[1];
+ idx = 2;
+ }
+ if (resp[idx] & 0x08) {
LOG_DEBUG("CMSIS-DAP Protocol Error @ %d (wrong parity)", transfer_count);
queued_retval = ERROR_FAIL;
goto skip;
}
+ uint8_t ack = resp[idx++] & 0x07;
if (ack != SWD_ACK_OK) {
LOG_DEBUG("SWD ack not OK @ %d %s", transfer_count,
ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK");
@@ -880,10 +899,10 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
LOG_ERROR("CMSIS-DAP transfer count mismatch: expected %d, got %d",
block->transfer_count, transfer_count);
- LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %d",
- transfer_count, pending_fifo_get_idx);
- size_t idx = 3;
- for (int i = 0; i < transfer_count; i++) {
+ LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %u timeout %i",
+ transfer_count, dap->pending_fifo_get_idx, timeout_ms);
+
+ for (unsigned int i = 0; i < transfer_count; i++) {
struct pending_transfer_result *transfer = &(block->transfers[i]);
if (transfer->cmd & SWD_CMD_RNW) {
static uint32_t last_read;
@@ -907,22 +926,22 @@ static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
skip:
block->transfer_count = 0;
- pending_fifo_get_idx = (pending_fifo_get_idx + 1) % dap->packet_count;
- pending_fifo_block_count--;
+ dap->pending_fifo_get_idx = (dap->pending_fifo_get_idx + 1) % dap->packet_count;
+ dap->pending_fifo_block_count--;
}
static int cmsis_dap_swd_run_queue(void)
{
- if (pending_fifo_block_count)
+ if (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
- while (pending_fifo_block_count)
+ while (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
- pending_fifo_put_idx = 0;
- pending_fifo_get_idx = 0;
+ cmsis_dap_handle->pending_fifo_put_idx = 0;
+ cmsis_dap_handle->pending_fifo_get_idx = 0;
int retval = queued_retval;
queued_retval = ERROR_OK;
@@ -930,22 +949,76 @@ static int cmsis_dap_swd_run_queue(void)
return retval;
}
+static unsigned int cmsis_dap_tfer_cmd_size(unsigned int write_count,
+ unsigned int read_count, bool block_tfer)
+{
+ unsigned int size;
+ if (block_tfer) {
+ size = 5; /* DAP_TransferBlock header */
+ size += write_count * 4; /* data */
+ } else {
+ size = 3; /* DAP_Transfer header */
+ size += write_count * (1 + 4); /* DAP register + data */
+ size += read_count; /* DAP register */
+ }
+ return size;
+}
+
+static unsigned int cmsis_dap_tfer_resp_size(unsigned int write_count,
+ unsigned int read_count, bool block_tfer)
+{
+ unsigned int size;
+ if (block_tfer)
+ size = 4; /* DAP_TransferBlock response header */
+ else
+ size = 3; /* DAP_Transfer response header */
+
+ size += read_count * 4; /* data */
+ return size;
+}
+
static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
{
+ /* Compute sizes of the DAP Transfer command and the expected response
+ * for all queued and this operation */
bool targetsel_cmd = swd_cmd(false, false, DP_TARGETSEL) == cmd;
- if (pending_fifo[pending_fifo_put_idx].transfer_count == pending_queue_len
- || targetsel_cmd) {
- if (pending_fifo_block_count)
+ unsigned int write_count = cmsis_dap_handle->write_count;
+ unsigned int read_count = cmsis_dap_handle->read_count;
+ bool block_cmd;
+ if (write_count + read_count < CMD_DAP_TFER_BLOCK_MIN_OPS)
+ block_cmd = false;
+ else
+ block_cmd = !cmsis_dap_handle->swd_cmds_differ
+ && cmd == cmsis_dap_handle->common_swd_cmd;
+
+ if (cmd & SWD_CMD_RNW)
+ read_count++;
+ else
+ write_count++;
+
+ unsigned int cmd_size = cmsis_dap_tfer_cmd_size(write_count, read_count,
+ block_cmd);
+ unsigned int resp_size = cmsis_dap_tfer_resp_size(write_count, read_count,
+ block_cmd);
+
+ /* Does the DAP Transfer command and the expected response fit into one packet?
+ * Run the queue also before a targetsel - it cannot be queued */
+ if (cmd_size > tfer_max_command_size
+ || resp_size > tfer_max_response_size
+ || targetsel_cmd) {
+ if (cmsis_dap_handle->pending_fifo_block_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
/* Not enough room in the queue. Run the queue. */
cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
- if (pending_fifo_block_count >= cmsis_dap_handle->packet_count)
+ if (cmsis_dap_handle->pending_fifo_block_count >= cmsis_dap_handle->packet_count)
cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
}
+ assert(cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx].transfer_count < pending_queue_len);
+
if (queued_retval != ERROR_OK)
return;
@@ -954,13 +1027,23 @@ static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
return;
}
- struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
+ struct pending_request_block *block = &cmsis_dap_handle->pending_fifo[cmsis_dap_handle->pending_fifo_put_idx];
struct pending_transfer_result *transfer = &(block->transfers[block->transfer_count]);
transfer->data = data;
transfer->cmd = cmd;
+ if (block->transfer_count == 0) {
+ cmsis_dap_handle->swd_cmds_differ = false;
+ cmsis_dap_handle->common_swd_cmd = cmd;
+ } else if (cmd != cmsis_dap_handle->common_swd_cmd) {
+ cmsis_dap_handle->swd_cmds_differ = true;
+ }
+
if (cmd & SWD_CMD_RNW) {
/* Queue a read transaction */
transfer->buffer = dst;
+ cmsis_dap_handle->read_count++;
+ } else {
+ cmsis_dap_handle->write_count++;
}
block->transfer_count++;
}
@@ -1022,7 +1105,7 @@ static int cmsis_dap_get_caps_info(void)
cmsis_dap_handle->caps = caps;
- for (int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
+ for (unsigned int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
if (caps & BIT(i))
LOG_INFO("CMSIS-DAP: %s", info_caps_str[i]);
}
@@ -1075,7 +1158,9 @@ static int cmsis_dap_swd_switch_seq(enum swd_special_seq seq)
unsigned int s_len;
int retval;
- if ((output_pins & (SWJ_PIN_SRST | SWJ_PIN_TRST)) == (SWJ_PIN_SRST | SWJ_PIN_TRST)) {
+ if (seq != LINE_RESET &&
+ (output_pins & (SWJ_PIN_SRST | SWJ_PIN_TRST))
+ == (SWJ_PIN_SRST | SWJ_PIN_TRST)) {
/* Following workaround deasserts reset on most adapters.
* Do not reconnect if a reset line is active!
* Reconnecting would break connecting under reset. */
@@ -1200,7 +1285,6 @@ static int cmsis_dap_init(void)
/* Be conservative and suppress submitting multiple HID requests
* until we get packet count info from the adaptor */
cmsis_dap_handle->packet_count = 1;
- pending_queue_len = 12;
/* INFO_ID_PKT_SZ - short */
retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_SZ, &data);
@@ -1210,12 +1294,6 @@ static int cmsis_dap_init(void)
if (data[0] == 2) { /* short */
uint16_t pkt_sz = data[1] + (data[2] << 8);
if (pkt_sz != cmsis_dap_handle->packet_size) {
-
- /* 4 bytes of command header + 5 bytes per register
- * write. For bulk read sequences just 4 bytes are
- * needed per transfer, so this is suboptimal. */
- pending_queue_len = (pkt_sz - 4) / 5;
-
free(cmsis_dap_handle->packet_buffer);
retval = cmsis_dap_handle->backend->packet_buffer_alloc(cmsis_dap_handle, pkt_sz);
if (retval != ERROR_OK)
@@ -1225,23 +1303,34 @@ static int cmsis_dap_init(void)
}
}
+ /* Maximal number of transfers which fit to one packet:
+ * Limited by response size: 3 bytes of response header + 4 per read
+ * Plus writes to full command size: 3 bytes cmd header + 1 per read + 5 per write */
+ tfer_max_command_size = cmsis_dap_handle->packet_usable_size;
+ tfer_max_response_size = cmsis_dap_handle->packet_usable_size;
+ unsigned int max_reads = tfer_max_response_size / 4;
+ pending_queue_len = max_reads + (tfer_max_command_size - max_reads) / 5;
+ cmsis_dap_handle->write_count = 0;
+ cmsis_dap_handle->read_count = 0;
+
/* INFO_ID_PKT_CNT - byte */
retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_CNT, &data);
if (retval != ERROR_OK)
goto init_err;
if (data[0] == 1) { /* byte */
- int pkt_cnt = data[1];
+ unsigned int pkt_cnt = data[1];
if (pkt_cnt > 1)
cmsis_dap_handle->packet_count = MIN(MAX_PENDING_REQUESTS, pkt_cnt);
- LOG_DEBUG("CMSIS-DAP: Packet Count = %d", pkt_cnt);
+ LOG_DEBUG("CMSIS-DAP: Packet Count = %u", pkt_cnt);
}
- LOG_DEBUG("Allocating FIFO for %d pending packets", cmsis_dap_handle->packet_count);
- for (int i = 0; i < cmsis_dap_handle->packet_count; i++) {
- pending_fifo[i].transfers = malloc(pending_queue_len * sizeof(struct pending_transfer_result));
- if (!pending_fifo[i].transfers) {
+ LOG_DEBUG("Allocating FIFO for %u pending packets", cmsis_dap_handle->packet_count);
+ for (unsigned int i = 0; i < cmsis_dap_handle->packet_count; i++) {
+ cmsis_dap_handle->pending_fifo[i].transfers = malloc(pending_queue_len
+ * sizeof(struct pending_transfer_result));
+ if (!cmsis_dap_handle->pending_fifo[i].transfers) {
LOG_ERROR("Unable to allocate memory for CMSIS-DAP queue");
retval = ERROR_FAIL;
goto init_err;
@@ -1367,7 +1456,7 @@ static void cmsis_dap_end_state(tap_state_t state)
}
#ifdef SPRINT_BINARY
-static void sprint_binary(char *s, const uint8_t *buf, int offset, int len)
+static void sprint_binary(char *s, const uint8_t *buf, unsigned int offset, unsigned int len)
{
if (!len)
return;
@@ -1378,7 +1467,7 @@ static void sprint_binary(char *s, const uint8_t *buf, int offset, int len)
buf = { 0xc0 0x18 } offset=3 len=10 should result in: 11000 11000
i=3 there means i/8 = 0 so c = 0xFF, and
*/
- for (int i = offset; i < offset + len; ++i) {
+ for (unsigned int i = offset; i < offset + len; ++i) {
uint8_t c = buf[i / 8], mask = 1 << (i % 8);
if ((i != offset) && !(i % 8))
putchar(' ');
@@ -1492,10 +1581,11 @@ static void cmsis_dap_flush(void)
* sequence=NULL means clock out zeros on TDI
* tdo_buffer=NULL means don't capture TDO
*/
-static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int s_offset,
- bool tms, uint8_t *tdo_buffer, int tdo_buffer_offset)
+static void cmsis_dap_add_jtag_sequence(unsigned int s_len, const uint8_t *sequence,
+ unsigned int s_offset, bool tms,
+ uint8_t *tdo_buffer, unsigned int tdo_buffer_offset)
{
- LOG_DEBUG_IO("[at %d] %d bits, tms %s, seq offset %d, tdo buf %p, tdo offset %d",
+ LOG_DEBUG_IO("[at %d] %u bits, tms %s, seq offset %u, tdo buf %p, tdo offset %u",
queued_seq_buf_end,
s_len, tms ? "HIGH" : "LOW", s_offset, tdo_buffer, tdo_buffer_offset);
@@ -1504,11 +1594,11 @@ static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int
if (s_len > 64) {
LOG_DEBUG_IO("START JTAG SEQ SPLIT");
- for (int offset = 0; offset < s_len; offset += 64) {
- int len = s_len - offset;
+ for (unsigned int offset = 0; offset < s_len; offset += 64) {
+ unsigned int len = s_len - offset;
if (len > 64)
len = 64;
- LOG_DEBUG_IO("Splitting long jtag sequence: %d-bit chunk starting at offset %d", len, offset);
+ LOG_DEBUG_IO("Splitting long jtag sequence: %u-bit chunk starting at offset %u", len, offset);
cmsis_dap_add_jtag_sequence(
len,
sequence,
@@ -1522,7 +1612,7 @@ static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int
return;
}
- int cmd_len = 1 + DIV_ROUND_UP(s_len, 8);
+ unsigned int cmd_len = 1 + DIV_ROUND_UP(s_len, 8);
if (queued_seq_count >= 255 || queued_seq_buf_end + cmd_len > QUEUED_SEQ_BUF_LEN)
/* empty out the buffer */
cmsis_dap_flush();
diff --git a/src/jtag/drivers/cmsis_dap.h b/src/jtag/drivers/cmsis_dap.h
index cf929b0..16885a5 100644
--- a/src/jtag/drivers/cmsis_dap.h
+++ b/src/jtag/drivers/cmsis_dap.h
@@ -7,17 +7,50 @@
struct cmsis_dap_backend;
struct cmsis_dap_backend_data;
-struct command_registration;
+
+struct pending_transfer_result {
+ uint8_t cmd;
+ uint32_t data;
+ void *buffer;
+};
+
+/* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
+ * until the first response arrives */
+#define MAX_PENDING_REQUESTS 4
+
+struct pending_request_block {
+ struct pending_transfer_result *transfers;
+ unsigned int transfer_count;
+ uint8_t command;
+};
struct cmsis_dap {
struct cmsis_dap_backend_data *bdata;
const struct cmsis_dap_backend *backend;
- uint16_t packet_size;
- int packet_count;
+ unsigned int packet_size;
+ unsigned int packet_usable_size;
+ unsigned int packet_buffer_size;
uint8_t *packet_buffer;
- uint16_t packet_buffer_size;
uint8_t *command;
uint8_t *response;
+
+ /* DP/AP register r/w operation counters used for checking the packet size
+ * that would result from the queue run */
+ unsigned int write_count;
+ unsigned int read_count;
+
+ /* We can use DAP_TransferBlock only if all SWD operations in the packet
+ * are either all writes or all reads and use the same DP/AP register.
+ * The following variables keep track of it */
+ uint8_t common_swd_cmd;
+ bool swd_cmds_differ;
+
+ /* Pending requests are organized as a FIFO - circular buffer */
+ struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
+ unsigned int packet_count;
+ unsigned int pending_fifo_put_idx, pending_fifo_get_idx;
+ unsigned int pending_fifo_block_count;
+
uint16_t caps;
uint8_t mode;
uint32_t swo_buf_sz;
diff --git a/src/jtag/drivers/cmsis_dap_usb_bulk.c b/src/jtag/drivers/cmsis_dap_usb_bulk.c
index 55b9a55..6599c41 100644
--- a/src/jtag/drivers/cmsis_dap_usb_bulk.c
+++ b/src/jtag/drivers/cmsis_dap_usb_bulk.c
@@ -352,25 +352,17 @@ static int cmsis_dap_usb_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
return ERROR_FAIL;
}
- dap->packet_size = packet_size;
- dap->packet_buffer_size = packet_size;
dap->bdata->usb_ctx = ctx;
dap->bdata->dev_handle = dev_handle;
dap->bdata->ep_out = ep_out;
dap->bdata->ep_in = ep_in;
dap->bdata->interface = interface_num;
- dap->packet_buffer = malloc(dap->packet_buffer_size);
- if (!dap->packet_buffer) {
- LOG_ERROR("unable to allocate memory");
+ err = cmsis_dap_usb_alloc(dap, packet_size);
+ if (err != ERROR_OK)
cmsis_dap_usb_close(dap);
- return ERROR_FAIL;
- }
-
- dap->command = dap->packet_buffer;
- dap->response = dap->packet_buffer;
- return ERROR_OK;
+ return err;
}
libusb_close(dev_handle);
@@ -445,6 +437,8 @@ static int cmsis_dap_usb_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
dap->packet_buffer = buf;
dap->packet_size = pkt_sz;
dap->packet_buffer_size = pkt_sz;
+ /* Prevent sending zero size USB packets */
+ dap->packet_usable_size = pkt_sz - 1;
dap->command = dap->packet_buffer;
dap->response = dap->packet_buffer;
diff --git a/src/jtag/drivers/cmsis_dap_usb_hid.c b/src/jtag/drivers/cmsis_dap_usb_hid.c
index 592eb09..52dfd76 100644
--- a/src/jtag/drivers/cmsis_dap_usb_hid.c
+++ b/src/jtag/drivers/cmsis_dap_usb_hid.c
@@ -213,6 +213,7 @@ static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
dap->packet_buffer = buf;
dap->packet_size = pkt_sz;
+ dap->packet_usable_size = pkt_sz;
dap->packet_buffer_size = packet_buffer_size;
dap->command = dap->packet_buffer + REPORT_ID_SIZE;
diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index 1b85315..5745681 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -97,7 +97,7 @@ static const struct {
{ ARMV7M_R13, "sp", 32, REG_TYPE_DATA_PTR, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_R14, "lr", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_PC, "pc", 32, REG_TYPE_CODE_PTR, "general", "org.gnu.gdb.arm.m-profile" },
- { ARMV7M_XPSR, "xPSR", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
+ { ARMV7M_XPSR, "xpsr", 32, REG_TYPE_INT, "general", "org.gnu.gdb.arm.m-profile" },
{ ARMV7M_MSP, "msp", 32, REG_TYPE_DATA_PTR, "system", "org.gnu.gdb.arm.m-system" },
{ ARMV7M_PSP, "psp", 32, REG_TYPE_DATA_PTR, "system", "org.gnu.gdb.arm.m-system" },
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 42c9ae7..7962a47 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -3114,37 +3114,6 @@ COMMAND_HANDLER(riscv_set_reset_timeout_sec)
return ERROR_OK;
}
-COMMAND_HANDLER(riscv_set_prefer_sba)
-{
- struct target *target = get_current_target(CMD_CTX);
- RISCV_INFO(r);
- bool prefer_sba;
- LOG_WARNING("`riscv set_prefer_sba` is deprecated. Please use `riscv set_mem_access` instead.");
- if (CMD_ARGC != 1) {
- LOG_ERROR("Command takes exactly 1 parameter");
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
- COMMAND_PARSE_ON_OFF(CMD_ARGV[0], prefer_sba);
- if (prefer_sba) {
- /* Use system bus with highest priority */
- r->mem_access_methods[0] = RISCV_MEM_ACCESS_SYSBUS;
- r->mem_access_methods[1] = RISCV_MEM_ACCESS_PROGBUF;
- r->mem_access_methods[2] = RISCV_MEM_ACCESS_ABSTRACT;
- } else {
- /* Use progbuf with highest priority */
- r->mem_access_methods[0] = RISCV_MEM_ACCESS_PROGBUF;
- r->mem_access_methods[1] = RISCV_MEM_ACCESS_SYSBUS;
- r->mem_access_methods[2] = RISCV_MEM_ACCESS_ABSTRACT;
- }
-
- /* Reset warning flags */
- r->mem_access_progbuf_warn = true;
- r->mem_access_sysbus_warn = true;
- r->mem_access_abstract_warn = true;
-
- return ERROR_OK;
-}
-
COMMAND_HANDLER(riscv_set_mem_access)
{
struct target *target = get_current_target(CMD_CTX);
@@ -4272,14 +4241,6 @@ static const struct command_registration riscv_exec_command_handlers[] = {
.help = "Set the wall-clock timeout (in seconds) after reset is deasserted"
},
{
- .name = "set_prefer_sba",
- .handler = riscv_set_prefer_sba,
- .mode = COMMAND_ANY,
- .usage = "on|off",
- .help = "When on, prefer to use System Bus Access to access memory. "
- "When off (default), prefer to use the Program Buffer to access memory."
- },
- {
.name = "set_mem_access",
.handler = riscv_set_mem_access,
.mode = COMMAND_ANY,
diff --git a/src/transport/transport.c b/src/transport/transport.c
index d72a48b..c05db3f 100644
--- a/src/transport/transport.c
+++ b/src/transport/transport.c
@@ -104,7 +104,7 @@ int allow_transports(struct command_context *ctx, const char * const *vector)
/* autoselect if there's no choice ... */
if (!vector[1]) {
- LOG_INFO("only one transport option; autoselect '%s'", vector[0]);
+ LOG_INFO("only one transport option; autoselecting '%s'", vector[0]);
return transport_select(ctx, vector[0]);
}
diff --git a/tcl/target/hi3798.cfg b/tcl/target/hi3798.cfg
index 4373962..722305d 100644
--- a/tcl/target/hi3798.cfg
+++ b/tcl/target/hi3798.cfg
@@ -42,8 +42,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
#set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/hi6220.cfg b/tcl/target/hi6220.cfg
index f5f7fc9..5b03899 100644
--- a/tcl/target/hi6220.cfg
+++ b/tcl/target/hi6220.cfg
@@ -49,8 +49,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/marvell/88f37x0.cfg b/tcl/target/marvell/88f37x0.cfg
index d80f4ef..738d221 100644
--- a/tcl/target/marvell/88f37x0.cfg
+++ b/tcl/target/marvell/88f37x0.cfg
@@ -57,8 +57,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core 1 } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command ${_TARGETNAME}$_core"
} else {
- # uncomment when "hawt" rtos is merged
- # set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp ${_TARGETNAME}$_core"
}
diff --git a/tcl/target/numicro_m4.cfg b/tcl/target/numicro_m4.cfg
new file mode 100644
index 0000000..1302515
--- /dev/null
+++ b/tcl/target/numicro_m4.cfg
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# script for Nuvoton MuMicro Cortex-M4 Series
+
+source [find target/swj-dp.tcl]
+
+# Set Chipname
+if { [info exists CHIPNAME] } {
+ set _CHIPNAME $CHIPNAME
+} else {
+ set _CHIPNAME NuMicro
+}
+
+# SWD DP-ID Nuvoton NuMicro Cortex-M4 has SWD Transport only.
+if { [info exists CPUDAPID] } {
+ set _CPUDAPID $CPUDAPID
+} else {
+ set _CPUDAPID 0x2BA01477
+}
+
+# Work-area is a space in RAM used for flash programming
+# By default use 16kB
+if { [info exists WORKAREASIZE] } {
+ set _WORKAREASIZE $WORKAREASIZE
+} else {
+ set _WORKAREASIZE 0x4000
+}
+
+
+# Debug Adapter Target Settings
+swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUDAPID
+dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME cortex_m -dap $_CHIPNAME.dap
+
+$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
+
+# flash bank <name> numicro <base> <size(autodetect,set to 0)> 0 0 <target#>
+#set _FLASHNAME $_CHIPNAME.flash
+#flash bank $_FLASHNAME numicro 0 $_FLASHSIZE 0 0 $_TARGETNAME
+# flash size will be probed
+set _FLASHNAME $_CHIPNAME.flash_aprom
+flash bank $_FLASHNAME numicro 0x00000000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_data
+flash bank $_FLASHNAME numicro 0x0001F000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_ldrom
+flash bank $_FLASHNAME numicro 0x00100000 0 0 0 $_TARGETNAME
+set _FLASHNAME $_CHIPNAME.flash_config
+flash bank $_FLASHNAME numicro 0x00300000 0 0 0 $_TARGETNAME
+
+# set default SWCLK frequency
+adapter speed 1000
+
+# set default srst setting "none"
+reset_config none
+
+# HLA doesn't have cortex_m commands
+if {![using_hla]} {
+ # if srst is not fitted use SYSRESETREQ to
+ # perform a soft reset
+ cortex_m reset_config sysresetreq
+}
diff --git a/tcl/target/xilinx_zynqmp.cfg b/tcl/target/xilinx_zynqmp.cfg
index 8933729..9734a18 100644
--- a/tcl/target/xilinx_zynqmp.cfg
+++ b/tcl/target/xilinx_zynqmp.cfg
@@ -86,8 +86,7 @@ for { set _core 0 } { $_core < $_cores } { incr _core } {
set _command "$_command -defer-examine"
set _smp_command "$_smp_command $_TARGETNAME.$_core"
} else {
- # uncomment when "hawt" rtos is merged
- #set _command "$_command -rtos hawt"
+ set _command "$_command -rtos hwthread"
set _smp_command "target smp $_TARGETNAME.$_core"
}
diff --git a/tools/disassemble_inc.sh b/tools/disassemble_inc.sh
new file mode 100755
index 0000000..d4b5f80
--- /dev/null
+++ b/tools/disassemble_inc.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# Simple script to disassemble a file .inc generated by
+# src/helper/bin2char.sh
+# Can be useful to check the correctness of the file .inc
+#
+# By default it decodes ARM thumb little-endian, e.g. cortex-m.
+# Set CROSS_COMPILE for other toolchains.
+# Set OBJDUMP_FLAGS for different objdump flags.
+#
+# Usage:
+# contrib/loaders/disassemble_inc.sh file.inc
+
+default_CROSS_COMPILE="arm-none-eabi-"
+default_OBJDUMP_FLAGS="-m arm -EL -M force-thumb"
+
+if [ $# != 1 -o ! -f "$1" ]; then
+ echo "Usage:"
+ echo " $0 path/to/file.inc"
+ echo ""
+ echo "Set CROSS_COMPILE and/or OBJDUMP_FLAGS to override current default:"
+ echo " export CROSS_COMPILE=\"${default_CROSS_COMPILE}\""
+ echo " export OBJDUMP_FLAGS=\"${default_OBJDUMP_FLAGS}\""
+ exit 1
+fi
+
+if [ -z "${CROSS_COMPILE}" ]; then
+ CROSS_COMPILE="${default_CROSS_COMPILE}"
+fi
+
+if [ -z "${OBJDUMP_FLAGS}" ]; then
+ OBJDUMP_FLAGS="${default_OBJDUMP_FLAGS}"
+fi
+
+perl -v > /dev/null 2>&1
+if [ $? != 0 ]; then
+ echo "Error: 'perl' interpreter not available."
+ exit 1
+fi
+
+tmpfile=$(mktemp --suffix=.bin)
+
+echo "Disassemble $1:"
+echo "${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}"
+
+perl -e 'while (<>){while ($_=~/(0x..)/g){print chr(hex($1));}}' $1 > ${tmpfile}
+${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}
+
+rm ${tmpfile}