mirror of
https://github.com/linux-msm/openocd.git
synced 2026-02-25 13:15:07 -08:00
bluenrg-x: simplyfied the driver
Adopted only fast algorithm for flash programming: - write_word and write_byte methods have been removed. - start and end write alignments have been defined. Moved flash controller registers offsets in a common file shared with the flash algorithm. - the flash base address is passed to the flash algorithm as a parameter. Removed unused functions Change-Id: I80aeab3994e477044bbcf02e66d9525dae0cb491 Signed-off-by: luca vinci <luca.vinci@st.com> Reviewed-on: http://openocd.zylin.com/5393 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-by: Michele Sardo <msmttchr@gmail.com>
This commit is contained in:
@@ -8,18 +8,15 @@ OBJDUMP=$(CROSS_COMPILE)objdump
|
||||
|
||||
CFLAGS = -c -mthumb -mcpu=cortex-m0 -O3 -g
|
||||
|
||||
all:bluenrg-2_write.inc bluenrg-lp_write.inc
|
||||
all: bluenrg-x_write.inc
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
.INTERMEDIATE: bluenrg-x_write.o
|
||||
|
||||
bluenrg-2_write.o: bluenrg-x_write.c
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -Wall -Wextra -Wa,-adhln=$*.lst $< -o $@
|
||||
|
||||
bluenrg-lp_write.o: bluenrg-x_write.c
|
||||
$(CC) $(CFLAGS) -D BLUENRG_LP -Wall -Wextra -Wa,-adhln=$*.lst $< -o $@
|
||||
|
||||
%.bin: %.o
|
||||
$(OBJCOPY) -Obinary $< $@
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x05,0x93,0x43,0x68,0x06,0x00,0x09,0x93,0x05,0x9b,0x07,0x91,0x06,0x92,0x34,0x4d,
|
||||
0x34,0x4c,0x00,0x2b,0x5d,0xd0,0x72,0x68,0x33,0x68,0x9a,0x42,0xfb,0xd0,0x33,0x68,
|
||||
0x00,0x2b,0x56,0xd0,0x72,0x68,0x33,0x68,0x9a,0x42,0x53,0xd9,0x73,0x68,0x07,0x9a,
|
||||
0xd3,0x1a,0x0f,0x2b,0xef,0xdd,0x00,0x21,0x2b,0x4a,0x03,0x93,0x11,0x60,0x00,0x2b,
|
||||
0x37,0xd0,0x2a,0x4a,0x06,0x9b,0x94,0x46,0x63,0x44,0x18,0x00,0x73,0x68,0x08,0x96,
|
||||
0x04,0x93,0x1a,0x00,0x26,0x4b,0x99,0x46,0x26,0x4b,0x98,0x46,0x26,0x4b,0x9c,0x46,
|
||||
0x26,0x4b,0x9b,0x46,0x26,0x4b,0x9a,0x46,0x01,0x23,0x91,0x68,0x17,0x68,0x01,0x91,
|
||||
0xd1,0x68,0x56,0x68,0x02,0x91,0x3f,0x21,0x29,0x60,0x81,0x03,0x09,0x0c,0x21,0x60,
|
||||
0x49,0x46,0x0f,0x60,0x47,0x46,0x3e,0x60,0x66,0x46,0x01,0x99,0x31,0x60,0x5e,0x46,
|
||||
0x02,0x99,0x31,0x60,0x51,0x46,0xcc,0x26,0x0e,0x60,0x29,0x68,0x0b,0x42,0xfc,0xd0,
|
||||
0x04,0x99,0x03,0x9e,0x10,0x32,0x10,0x30,0x51,0x1a,0x8e,0x42,0xdd,0xd8,0x08,0x9e,
|
||||
0x72,0x60,0x03,0x9a,0x06,0x9b,0x94,0x46,0x63,0x44,0x06,0x93,0x07,0x9a,0x73,0x68,
|
||||
0x9a,0x42,0x01,0xd8,0x09,0x9b,0x73,0x60,0x05,0x9b,0x03,0x9a,0x9b,0x1a,0x05,0x93,
|
||||
0xa1,0xd1,0x00,0xbe,0x33,0x68,0x72,0x68,0x9b,0x1a,0xaa,0xd5,0x9b,0xe7,0xc0,0x46,
|
||||
0x10,0x00,0x10,0x40,0x18,0x00,0x10,0x40,0x0c,0x00,0x10,0x40,0x00,0x00,0xfc,0xef,
|
||||
0x40,0x00,0x10,0x40,0x44,0x00,0x10,0x40,0x48,0x00,0x10,0x40,0x4c,0x00,0x10,0x40,
|
||||
0x00,0x00,0x10,0x40,
|
||||
@@ -1,18 +0,0 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x05,0x93,0x43,0x68,0x06,0x00,0x09,0x93,0x05,0x9b,0x07,0x91,0x06,0x92,0x34,0x4d,
|
||||
0x34,0x4c,0x00,0x2b,0x5d,0xd0,0x72,0x68,0x33,0x68,0x9a,0x42,0xfb,0xd0,0x33,0x68,
|
||||
0x00,0x2b,0x56,0xd0,0x72,0x68,0x33,0x68,0x9a,0x42,0x53,0xd9,0x73,0x68,0x07,0x9a,
|
||||
0xd3,0x1a,0x0f,0x2b,0xef,0xdd,0x00,0x21,0x2b,0x4a,0x03,0x93,0x11,0x60,0x00,0x2b,
|
||||
0x37,0xd0,0x2a,0x4a,0x06,0x9b,0x94,0x46,0x63,0x44,0x18,0x00,0x73,0x68,0x08,0x96,
|
||||
0x04,0x93,0x1a,0x00,0x26,0x4b,0x99,0x46,0x26,0x4b,0x98,0x46,0x26,0x4b,0x9c,0x46,
|
||||
0x26,0x4b,0x9b,0x46,0x26,0x4b,0x9a,0x46,0x01,0x23,0x91,0x68,0x17,0x68,0x01,0x91,
|
||||
0xd1,0x68,0x56,0x68,0x02,0x91,0x3f,0x21,0x29,0x60,0x81,0x03,0x09,0x0c,0x21,0x60,
|
||||
0x49,0x46,0x0f,0x60,0x47,0x46,0x3e,0x60,0x66,0x46,0x01,0x99,0x31,0x60,0x5e,0x46,
|
||||
0x02,0x99,0x31,0x60,0x51,0x46,0xcc,0x26,0x0e,0x60,0x29,0x68,0x0b,0x42,0xfc,0xd0,
|
||||
0x04,0x99,0x03,0x9e,0x10,0x32,0x10,0x30,0x51,0x1a,0x8e,0x42,0xdd,0xd8,0x08,0x9e,
|
||||
0x72,0x60,0x03,0x9a,0x06,0x9b,0x94,0x46,0x63,0x44,0x06,0x93,0x07,0x9a,0x73,0x68,
|
||||
0x9a,0x42,0x01,0xd8,0x09,0x9b,0x73,0x60,0x05,0x9b,0x03,0x9a,0x9b,0x1a,0x05,0x93,
|
||||
0xa1,0xd1,0x00,0xbe,0x33,0x68,0x72,0x68,0x9b,0x1a,0xaa,0xd5,0x9b,0xe7,0xc0,0x46,
|
||||
0x10,0x10,0x00,0x40,0x18,0x10,0x00,0x40,0x0c,0x10,0x00,0x40,0x00,0x00,0xfc,0xef,
|
||||
0x40,0x10,0x00,0x40,0x44,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,
|
||||
0x00,0x10,0x00,0x40,
|
||||
@@ -2,6 +2,7 @@
|
||||
/* Then postprocess output of command "arm-none-eabi-objdump -d bluenrgx.o" to make a C array of bytes */
|
||||
|
||||
#include <stdint.h>
|
||||
#include "../../../../src/flash/nor/bluenrg-x.h"
|
||||
|
||||
/* Status Values ----------------------------------------------------------*/
|
||||
#define SUCCESS 0
|
||||
@@ -13,59 +14,22 @@
|
||||
#define ERR_ERASE_REQUIRED 6
|
||||
#define ERR_VERIFY_FAILED 7
|
||||
|
||||
/* Flash Controller defines ---------------------------------------------------*/
|
||||
#ifdef BLUENRG_LP
|
||||
#define FLASH_REG_COMMAND ((volatile uint32_t *)0x40001000)
|
||||
#define FLASH_REG_CONFIG ((volatile uint32_t *)0x40001004)
|
||||
#define FLASH_REG_IRQSTAT ((volatile uint32_t *)0x40001008)
|
||||
#define FLASH_REG_IRQMASK ((volatile uint32_t *)0x4000100C)
|
||||
#define FLASH_REG_IRQRAW ((volatile uint32_t *)0x40001010)
|
||||
#define FLASH_REG_ADDRESS ((volatile uint32_t *)0x40001018)
|
||||
#define FLASH_REG_UNLOCKM ((volatile uint32_t *)0x4000101C)
|
||||
#define FLASH_REG_UNLOCKL ((volatile uint32_t *)0x40001020)
|
||||
#define FLASH_REG_DATA0 ((volatile uint32_t *)0x40001040)
|
||||
#define FLASH_REG_DATA1 ((volatile uint32_t *)0x40001044)
|
||||
#define FLASH_REG_DATA2 ((volatile uint32_t *)0x40001048)
|
||||
#define FLASH_REG_DATA3 ((volatile uint32_t *)0x4000104C)
|
||||
#define FLASH_SIZE_REG 0x40001014
|
||||
#else
|
||||
#define FLASH_REG_COMMAND ((volatile uint32_t *)0x40100000)
|
||||
#define FLASH_REG_CONFIG ((volatile uint32_t *)0x40100004)
|
||||
#define FLASH_REG_IRQSTAT ((volatile uint32_t *)0x40100008)
|
||||
#define FLASH_REG_IRQMASK ((volatile uint32_t *)0x4010000C)
|
||||
#define FLASH_REG_IRQRAW ((volatile uint32_t *)0x40100010)
|
||||
#define FLASH_REG_ADDRESS ((volatile uint32_t *)0x40100018)
|
||||
#define FLASH_REG_UNLOCKM ((volatile uint32_t *)0x4010001C)
|
||||
#define FLASH_REG_UNLOCKL ((volatile uint32_t *)0x40100020)
|
||||
#define FLASH_REG_DATA0 ((volatile uint32_t *)0x40100040)
|
||||
#define FLASH_REG_DATA1 ((volatile uint32_t *)0x40100044)
|
||||
#define FLASH_REG_DATA2 ((volatile uint32_t *)0x40100048)
|
||||
#define FLASH_REG_DATA3 ((volatile uint32_t *)0x4010004C)
|
||||
#define FLASH_SIZE_REG 0x40100014
|
||||
#endif
|
||||
|
||||
#define MFB_MASS_ERASE 0x01
|
||||
#define MFB_PAGE_ERASE 0x02
|
||||
|
||||
#define DO_ERASE 0x0100
|
||||
#define DO_VERIFY 0x0200
|
||||
#define FLASH_CMD_ERASE_PAGE 0x11
|
||||
#define FLASH_CMD_MASSERASE 0x22
|
||||
#define FLASH_CMD_WRITE 0x33
|
||||
#define FLASH_CMD_BURSTWRITE 0xCC
|
||||
#define FLASH_INT_CMDDONE 0x01
|
||||
#define MFB_BOTTOM (0x10040000)
|
||||
#define MFB_SIZE_B ((16 * (((*(uint32_t *) FLASH_SIZE_REG) + 1) >> 12)) * 1024)
|
||||
#define MFB_SIZE_W (MFB_SIZE_B/4)
|
||||
#define MFB_TOP (MFB_BOTTOM+MFB_SIZE_B-1)
|
||||
#define MFB_PAGE_SIZE_B (2048)
|
||||
#define MFB_PAGE_SIZE_W (MFB_PAGE_SIZE_B/4)
|
||||
|
||||
#define MFB_BOTTOM (0x10040000)
|
||||
#define MFB_SIZE_B(regs_base) ((16 * (((*(volatile uint32_t *)(regs_base + FLASH_SIZE_REG)) + 1) >> 12)) * 1024)
|
||||
#define MFB_SIZE_W (MFB_SIZE_B/4)
|
||||
#define MFB_TOP (MFB_BOTTOM+MFB_SIZE_B-1)
|
||||
#define MFB_PAGE_SIZE_B (2048)
|
||||
#define MFB_PAGE_SIZE_W (MFB_PAGE_SIZE_B/4)
|
||||
|
||||
#define AREA_ERROR 0x01
|
||||
#define AREA_MFB 0x04
|
||||
|
||||
#define FLASH_WORD_LEN 4
|
||||
|
||||
typedef struct {
|
||||
volatile uint8_t *wp;
|
||||
uint8_t *rp;
|
||||
@@ -73,29 +37,29 @@ typedef struct {
|
||||
|
||||
/* Flash Commands --------------------------------------------------------*/
|
||||
static inline __attribute__((always_inline)) uint32_t flashWrite(uint32_t address, uint8_t **data,
|
||||
uint32_t writeLength)
|
||||
uint32_t writeLength, uint32_t flash_regs_base)
|
||||
{
|
||||
uint32_t index, flash_word[4];
|
||||
uint8_t i;
|
||||
|
||||
*FLASH_REG_IRQMASK = 0;
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_IRQMASK)) = 0;
|
||||
for (index = 0; index < writeLength; index += (FLASH_WORD_LEN*4)) {
|
||||
for (i = 0; i < 4; i++)
|
||||
flash_word[i] = (*(uint32_t *) (*data + i*4));
|
||||
|
||||
/* Clear the IRQ flags */
|
||||
*FLASH_REG_IRQRAW = 0x0000003F;
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_IRQRAW)) = 0x0000003F;
|
||||
/* Load the flash address to write */
|
||||
*FLASH_REG_ADDRESS = (uint16_t)((address + index - MFB_BOTTOM) >> 2);
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_ADDRESS)) = (uint16_t)((address + index - MFB_BOTTOM) >> 2);
|
||||
/* Prepare and load the data to flash */
|
||||
*FLASH_REG_DATA0 = flash_word[0];
|
||||
*FLASH_REG_DATA1 = flash_word[1];
|
||||
*FLASH_REG_DATA2 = flash_word[2];
|
||||
*FLASH_REG_DATA3 = flash_word[3];
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA0)) = flash_word[0];
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA1)) = flash_word[1];
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA2)) = flash_word[2];
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA3)) = flash_word[3];
|
||||
/* Flash write command */
|
||||
*FLASH_REG_COMMAND = FLASH_CMD_BURSTWRITE;
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_COMMAND)) = FLASH_CMD_BURSTWRITE;
|
||||
/* Wait the end of the flash write command */
|
||||
while ((*FLASH_REG_IRQRAW & FLASH_INT_CMDDONE) == 0)
|
||||
while ((*((volatile uint32_t *)(flash_regs_base + FLASH_REG_IRQRAW)) & FLASH_INT_CMDDONE) == 0)
|
||||
;
|
||||
*data += (FLASH_WORD_LEN * 4);
|
||||
}
|
||||
@@ -106,7 +70,8 @@ static inline __attribute__((always_inline)) uint32_t flashWrite(uint32_t addres
|
||||
__attribute__((naked)) __attribute__((noreturn)) void write(uint8_t *work_area_p,
|
||||
uint8_t *fifo_end,
|
||||
uint8_t *target_address,
|
||||
uint32_t count)
|
||||
uint32_t count,
|
||||
uint32_t flash_regs_base)
|
||||
{
|
||||
uint32_t retval;
|
||||
volatile work_area_t *work_area = (work_area_t *) work_area_p;
|
||||
@@ -134,7 +99,7 @@ __attribute__((naked)) __attribute__((noreturn)) void write(uint8_t *work_area_p
|
||||
continue;
|
||||
}
|
||||
|
||||
retval = flashWrite((uint32_t) target_address, (uint8_t **) &work_area->rp, fifo_linear_size);
|
||||
retval = flashWrite((uint32_t) target_address, (uint8_t **) &work_area->rp, fifo_linear_size, flash_regs_base);
|
||||
if (retval != SUCCESS) {
|
||||
work_area->rp = (uint8_t *)retval;
|
||||
break;
|
||||
|
||||
17
contrib/loaders/flash/bluenrg-x/bluenrg-x_write.inc
Normal file
17
contrib/loaders/flash/bluenrg-x/bluenrg-x_write.inc
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x05,0x93,0x43,0x68,0x14,0x9e,0x09,0x93,0x05,0x9b,0x05,0x00,0x07,0x91,0x06,0x92,
|
||||
0x01,0x24,0xb1,0x46,0x00,0x2b,0x68,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0xfb,0xd0,
|
||||
0x2b,0x68,0x00,0x2b,0x61,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0x5e,0xd9,0x6b,0x68,
|
||||
0x07,0x9a,0xd3,0x1a,0x0f,0x2b,0xef,0xdd,0x4a,0x46,0x00,0x21,0x03,0x93,0xd1,0x60,
|
||||
0x00,0x2b,0x42,0xd0,0x40,0x22,0x4a,0x44,0x90,0x46,0x44,0x22,0x4a,0x44,0x00,0x92,
|
||||
0x48,0x22,0x4a,0x44,0x93,0x46,0x4c,0x22,0x27,0x4f,0x4a,0x44,0xbc,0x46,0x4e,0x46,
|
||||
0x92,0x46,0x06,0x99,0x4b,0x46,0x61,0x44,0x08,0x00,0x00,0x99,0x18,0x36,0x6a,0x68,
|
||||
0x08,0x95,0x8c,0x46,0x55,0x46,0xda,0x46,0xb3,0x46,0x10,0x33,0x04,0x92,0x11,0x68,
|
||||
0x5e,0x46,0x00,0x91,0x51,0x68,0x97,0x68,0x01,0x91,0xd1,0x68,0x02,0x91,0x3f,0x21,
|
||||
0x19,0x60,0x81,0x03,0x09,0x0c,0x31,0x60,0x46,0x46,0x00,0x99,0x31,0x60,0x66,0x46,
|
||||
0x01,0x99,0x31,0x60,0x56,0x46,0x02,0x99,0x37,0x60,0x29,0x60,0xcc,0x26,0x49,0x46,
|
||||
0x0e,0x60,0x19,0x68,0x0c,0x42,0xfc,0xd0,0x04,0x99,0x03,0x9e,0x10,0x32,0x10,0x30,
|
||||
0x51,0x1a,0x8e,0x42,0xdb,0xd8,0x08,0x9d,0x6a,0x60,0x03,0x9a,0x06,0x9b,0x94,0x46,
|
||||
0x63,0x44,0x06,0x93,0x07,0x9a,0x6b,0x68,0x9a,0x42,0x01,0xd8,0x09,0x9b,0x6b,0x60,
|
||||
0x05,0x9b,0x03,0x9a,0x9b,0x1a,0x05,0x93,0x96,0xd1,0x00,0xbe,0x2b,0x68,0x6a,0x68,
|
||||
0x9b,0x1a,0x9f,0xd5,0x90,0xe7,0xc0,0x46,0x00,0x00,0xfc,0xef,
|
||||
@@ -5842,15 +5842,7 @@ Note that when users ask to erase all the sectors of the flash, a mass erase com
|
||||
each single sector one by one.
|
||||
|
||||
@example
|
||||
flash erase_sector 0 0 79 # It will perform a mass erase on BlueNRG-1
|
||||
@end example
|
||||
|
||||
@example
|
||||
flash erase_sector 0 0 127 # It will perform a mass erase on BlueNRG-2
|
||||
@end example
|
||||
|
||||
@example
|
||||
flash erase_sector 0 0 127 # It will perform a mass erase on BlueNRG-LP
|
||||
flash erase_sector 0 0 last # It will perform a mass erase
|
||||
@end example
|
||||
|
||||
Triggering a mass erase is also useful when users want to disable readout protection.
|
||||
|
||||
@@ -76,6 +76,7 @@ NOR_DRIVERS = \
|
||||
NORHEADERS = \
|
||||
%D%/core.h \
|
||||
%D%/cc3220sf.h \
|
||||
%D%/bluenrg-x.h \
|
||||
%D%/cc26xx.h \
|
||||
%D%/cfi.h \
|
||||
%D%/driver.h \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
45
src/flash/nor/bluenrg-x.h
Normal file
45
src/flash/nor/bluenrg-x.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2019 by STMicroelectronics. *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef OPENOCD_FLASH_NOR_BLUENRGX_H
|
||||
#define OPENOCD_FLASH_NOR_BLUENRGX_H
|
||||
|
||||
/* Flash Controller registers offsets */
|
||||
#define FLASH_REG_COMMAND 0x00
|
||||
#define FLASH_REG_CONFIG 0x04
|
||||
#define FLASH_REG_IRQSTAT 0x08
|
||||
#define FLASH_REG_IRQMASK 0x0C
|
||||
#define FLASH_REG_IRQRAW 0x10
|
||||
#define FLASH_REG_ADDRESS 0x18
|
||||
#define FLASH_REG_UNLOCKM 0x1C
|
||||
#define FLASH_REG_UNLOCKL 0x20
|
||||
#define FLASH_REG_DATA0 0x40
|
||||
#define FLASH_REG_DATA1 0x44
|
||||
#define FLASH_REG_DATA2 0x48
|
||||
#define FLASH_REG_DATA3 0x4C
|
||||
#define FLASH_SIZE_REG 0x14
|
||||
|
||||
/* Flash Controller commands */
|
||||
#define FLASH_CMD_ERASE_PAGE 0x11
|
||||
#define FLASH_CMD_MASSERASE 0x22
|
||||
#define FLASH_CMD_WRITE 0x33
|
||||
#define FLASH_CMD_BURSTWRITE 0xCC
|
||||
#define FLASH_INT_CMDDONE 0x01
|
||||
|
||||
#define FLASH_WORD_LEN 4
|
||||
|
||||
#endif /* OPENOCD_FLASH_NOR_BLUENRGX_H */
|
||||
@@ -23,13 +23,7 @@ if { [info exists WORKAREASIZE] } {
|
||||
|
||||
adapter speed 4000
|
||||
|
||||
if { [info exists CPUTAPID] } {
|
||||
set _CPUTAPID $CPUTAPID
|
||||
} else {
|
||||
set _CPUTAPID 0x0bb11477
|
||||
}
|
||||
|
||||
swj_newdap $_CHIPNAME cpu -expected-id $_CPUTAPID
|
||||
swj_newdap $_CHIPNAME cpu -expected-id 0x0bb11477 -expected-id 0x0bc11477
|
||||
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
|
||||
|
||||
set _TARGETNAME $_CHIPNAME.cpu
|
||||
|
||||
Reference in New Issue
Block a user