GnIce

Aus BECOM Systems Support
Zur Navigation springen Zur Suche springen

Description

The gnICE is a fast and low cost USB JTAG In-Circuit-Emulator for Blackfin processors. It's designed to provide reliable JTAG debugging and CFI NOR Flash programming via USB. The gnICE JTAG Adapter Cable is an Open Source Hardware, based on the FT2232 chip from Future Technology Devices International Ltd.

gnICE description: https://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice

gnICE+ description (faster): https://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice-plus

Get a gnICE+

gnICE+ can be ordered from Bluetechnix, please see our web page.

Linux: Set proper USB permissions for gnICE/gnICE+

By default, you won't be able to communicate with the gnICE without root permissions.

To tell udev to set the proper permissions on gnICE's device files, add the file /etc/udev/rules.d/10-gnice.rules with the following content:

SUBSYSTEMS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="kcontrol_rules_end"
SYSFS{idProduct}=="f001", SYSFS{idVendor}=="0456", MODE="660", GROUP="plugdev"
SYSFS{idProduct}=="f000", SYSFS{idVendor}=="0456", MODE="660", GROUP="plugdev"
LABEL="kcontrol_rules_end"

Afterwards, restart udev:

sudo /etc/init.d/udev restart

Programming flash memory with bfin-jtag from the GNU tool chain

Note #1: bfin-jtag does not support flash bank switching with GPIOs on Bluetechnix Core Modules, so on most modules, only 2MB of the flash memory will be available (but that is sufficient to program BLACKSheep or U-Boot)

Note #2: If this solution does not work for you, please read below!

Note #3: We recommend using tool chain version 2009R1.1-RC2


We use a Linux operating system and assume that bfin-jtag's path is in your ${PATH}.

Connect gnICE/gnICE+.

bfin-jtag -q

Now, enter the following commands to flash e.g. U-Boot.

cable gnICE
- or -
cable gnICE+

detect
initbus $BOARDTYPE
detectflash 0x20000000
flashmem 0x20000000 $BINFILE

where $BOARDTYPE depends on your Blackfin processor

  • BF518: Use bf51x
  • BF525: Use bf52x
  • BF527: Use bf52x
  • BF533: Use bf53x
  • BF537: Use bf53x
  • BF548: Use bf548_ezkit
  • BF561: Use bf561_ezkit

and $BINFILE is a binary file containing the desired flash content (e.g. u-boot.bin).

Example

harald@WS-HP4600-35:~$ bfin-jtag -q
jtag> cable gnICE
Connected to libftdi driver.
jtag> detect
IR length: 10
Chain length: 2
Device Id: 01010010011110111011000011001011 (0x00000000527BB0CB)
  Manufacturer: Analog Devices
  Part(0):         BF561
  Stepping:     5
  Filename:     /home/harald/blackfin/toolchain2009r1.1-rc2/opt/uClinux//bfin-elf/bin/../share/urjtag/analog /bf561/bf561
Device Id: 01010010011110111011000011001011 (0x00000000527BB0CB)
  Manufacturer: Analog Devices
  Part(1):         BF561
  Stepping:     5
  Filename:     /home/harald/blackfin/toolchain2009r1.1-rc2/opt/uClinux//bfin-elf/bin/../share/urjtag/analog/bf561/bf561
jtag> initbus bf561_ezkit
jtag> detectflash 0x20000000
Query identification string: 
	Primary Algorithm Command Set and Control Interface ID Code: 0x0001 (Intel/Sharp Extended Command Set)
	Alternate Algorithm Command Set and Control Interface ID Code: 0x0000 (null)
Query system interface information:
	Vcc Logic Supply Minimum Write/Erase or Write voltage: 2300 mV
	Vcc Logic Supply Maximum Write/Erase or Write voltage: 3600 mV
	Vpp [Programming] Supply Minimum Write/Erase voltage: 8500 mV
	Vpp [Programming] Supply Maximum Write/Erase voltage: 9500 mV
	Typical timeout per single byte/word program: 256 us
	Typical timeout for maximum-size multi-byte program: 512 us
	Typical timeout per individual block erase: 1024 ms
	Typical timeout for full chip erase: 0 ms
	Maximum timeout for byte/word program: 512 us
	Maximum timeout for multi-byte program: 1024 us
	Maximum timeout per individual block erase: 4096 ms
	Maximum timeout for chip erase: 0 ms
Device geometry definition:
	Device Size: 8388608 B (8192 KiB, 8 MiB)
	Flash Device Interface Code description: 0x0001 (x16)
	Maximum number of bytes in multi-byte program: 64
	Number of Erase Block Regions within device: 2
	Erase Block Region Information:
		Region 0:
			Erase Block Size: 32768 B (32 KiB)
			Number of Erase Blocks: 4
		Region 1:
			Erase Block Size: 131072 B (128 KiB)
			Number of Erase Blocks: 63
jtag> flashmem 0x20000000 /tftpboot/u-boot.ldr
Manufacturer: Intel
Chip: Unknown (0x8820)!
program:

block 0 unlocked
erasing block 0: 0
addr: 0x20007F00
block 1 unlocked
erasing block 1: 0
addr: 0x2000FF00
block 2 unlocked
erasing block 2: 0
addr: 0x20017F00
block 3 unlocked
erasing block 3: 0
addr: 0x2001FF00
block 4 unlocked
erasing block 4: 0
addr: 0x2002A49A
verify:
addr: 0x2002A49A
Done.
jtag>

Programming flash memory with bfin-gdbproxy and Visual DSP++ Flash Tool Driver

The trunk repository of the GNU tool chain (File: e.g. blackfin-toolchain-2010R1-RC4.src.tar.bz2) contains some gdb-scripts, among them the vdsp-flash-programmer.sh script. This script uses a flash tool driver for the Visual DSP++ IDDE for flash programming.

Note #1: With this method, the whole flash size is available for programming, because the flash tool drivers are specifically implemented for our Core Modules.


  • Get the gdb scripts:
svn checkout svn://firewall-sources.blackfin.uclinux.org:80/svn/toolchain/trunk/debug-helpers/gdb-scripts gdb-scripts
  • Get the flash tool drivers:
They are available via Bluetechnix SVN portal (https://support.becom-group.com/software/); you have to register to download them.
Also see Flash tool driver files.
  • Start bfin-gdbproxy (from the GNU tool chain). It will automatically detect gnICE and gnICE+ JTAG devices and connect to the Blackfin CPU.
bfin-gdbproxy bfin --reset
  • Open a new terminal and execute vdsp-flash-programmer.sh
gdb-scripts/vdsp-flash-programmer.sh $FLASHTOOLDRIVER.dxe
  • Optional: Set pagination mode off
set pagination off
  • Use command flrestore for flash programming now, the syntax is as follows
flrestore $BIN_FILE 0 $FILE_SIZE_IN_HEX
We recommend to round up the file size to the end of the next sector (One sector is normally 128 KiB large). We observed cases where the last byte was incorrectly written if the file was given exactly.

Example

GDB:

harald@WS-HP4600-35:~/temp$ gdb-scripts/vdsp-flash-programmer.sh CM-BF561_Flash.dxe 
INFO: Cleaning up driver: CM-BF561_Flash.dxe
INFO: Launching gdb
(no debugging symbols found)
[New Thread 1]
[New Thread 2]
0xef001fae in ?? ()
[New Thread 1]
[New Thread 2]
0xef001fb0 in ?? ()
Loading section L1_data_b, size 0x10a4 lma 0xff900000
Loading section L1_code, size 0x3ef0 lma 0xffa00000
Loading section L1_code_cache, size 0x94a lma 0xffa10000
Start address 0xffa00000, load size 22750
Transfer rate: 138403 bits/sec, 7583 bytes/write.
Hardware assisted breakpoint 1 at 0xffa01b8c

Flash Programmer information:
 Title         : CM-BF561-V2
 Description   : Intel P30
 DeviceCompany : Intel
 BuildDate     : Feb  3 2010
 DrvVersion    : 1.01.0
 Buffer        : 0xff804440
 Size          : 0x3000
 ManCode       : 0x89
 DevCode       : 0x20
 Error         : 0

---Type <return> to continue, or q <return> to quit---
Flash layout: (16 bit, 256 sectors, 7 MiB)
  0: 0x00000000 0x00008000 0x00010000 0x00018000 0x00020000 
  5: 0x00028000 0x00030000 0x00038000 0x00040000 0x00048000 
 10: 0x00050000 0x00058000 0x00060000 0x00068000 0x00070000 
 15: 0x00078000 0x00080000 0x00088000 0x00090000 0x00098000 
 20: 0x000a0000 0x000a8000 0x000b0000 0x000b8000 0x000c0000 
 25: 0x000c8000 0x000d0000 0x000d8000 0x000e0000 0x000e8000 
 30: 0x000f0000 0x000f8000 0x00100000 0x00108000 0x00110000 
 35: 0x00118000 0x00120000 0x00128000 0x00130000 0x00138000 
 40: 0x00140000 0x00148000 0x00150000 0x00158000 0x00160000 
 45: 0x00168000 0x00170000 0x00178000 0x00180000 0x00188000 
 50: 0x00190000 0x00198000 0x001a0000 0x001a8000 0x001b0000 
 55: 0x001b8000 0x001c0000 0x001c8000 0x001d0000 0x001d8000 
 60: 0x001e0000 0x001e8000 0x001f0000 0x001f8000 0x00200000 
 65: 0x00208000 0x00210000 0x00218000 0x00220000 0x00228000 
 70: 0x00230000 0x00238000 0x00240000 0x00248000 0x00250000 
 75: 0x00258000 0x00260000 0x00268000 0x00270000 0x00278000 
 80: 0x00280000 0x00288000 0x00290000 0x00298000 0x002a0000 
 85: 0x002a8000 0x002b0000 0x002b8000 0x002c0000 0x002c8000 
 90: 0x002d0000 0x002d8000 0x002e0000 0x002e8000 0x002f0000 
 95: 0x002f8000 0x00300000 0x00308000 0x00310000 0x00318000 

Now you can use the commands (run 'help cmd' for more info):
---Type <return> to continue, or q <return> to quit---
	fldrvinfo
	flinfo
	flstat
	flcmd
	flerase_sector
	flerase
	flwrite
	flrestore
	flread
	fldump
(gdb) set pagination off
(gdb) flrestore /tftpboot/u-boot.ldr 0 0x2A49C
Restoring 0 to 0x2a49c (173212 bytes)
 Erase complete; Starting write cycle     
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff807440)
Restoring binary file /tftpboot/u-boot.ldr into memory (0xff804440 to 0xff8048dc)
 0x49c bytes @ 0x2a000 (99%%)
(gdb) 
(gdb) q
The program is running.  Exit anyway? (y or n) y
Quitting: /tmp/tmp.58IX02eR6Y: No such file or directory.
harald@WS-HP4600-35:~/temp$ 

bfin-gdbproxy:

harald@WS-HP4600-35:~$ bfin-gdbproxy bfin --reset

Remote proxy for GDB, v0.7.2, Copyright (C) 1999 Quality Quorum Inc.
MSP430 adaption Copyright (C) 2002 Chris Liechti and Steve Underwood
Blackfin adaption Copyright (C) 2008 Analog Devices, Inc.

GDBproxy comes with ABSOLUTELY NO WARRANTY; for details
use `--warranty' option. This is Open Source software. You are
welcome to redistribute it under certain conditions. Use the
'--copying' option for details.

Found USB cable: gnICE
Connected to libftdi driver.
IR length: 10
Chain length: 2
Device Id: 01010010011110111011000011001011 (0x527BB0CB)
  Manufacturer: Analog Devices, Inc. (0x0CB)
  Part(0):      BF561 (0x27BB)
  Stepping:     5
  Filename:     /home/harald/blackfin/toolchain2010r1-rc4/opt/uClinux//bfin-elf/bin/../share/urjtag/analog/bf561/bf561
Device Id: 01010010011110111011000011001011 (0x527BB0CB)
  Manufacturer: Analog Devices, Inc. (0x0CB)
  Part(1):      BF561 (0x27BB)
  Stepping:     5
  Filename:     /home/harald/blackfin/toolchain2010r1-rc4/opt/uClinux//bfin-elf/bin/../share/urjtag/analog/bf561/bf561
warning:   bfin: no board selected, 2 cores are detected
warning:   bfin:   cores: [BF561 BF561] 
notice:    bfin: jc: waiting on TCP port 2001
notice:    bfin: jc:  (you must connect GDB before using jtag console)
notice:    bfin-gdbproxy: waiting on TCP port 2000
notice:    bfin-gdbproxy: connected
info:      Resetting ...
info:      [0] locked: DBGSTAT [0x006A]
info:      bfin-gdbproxy: session killed. Will wait for a new connection
notice:    bfin-gdbproxy: connected
info:      Resetting ...
info:      [0] locked: DBGSTAT [0x006A]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin: [1] emulation single step: PC [0xFFA01B90] FP [0xFF8043E8]
info:      bfin: [1] watchpoint event occured: PC [0xFFA01B8C] FP [0xFF8043E8]
info:      bfin-gdbproxy: session killed. Will wait for a new connection
^C
harald@WS-HP4600-35:~$