navienginebsp/tools/testreference/lauterbach/Platforms/ne1_tb/flash.cmm
author Ryan Harkin <ryan.harkin@nokia.com>
Tue, 28 Sep 2010 18:00:05 +0100
changeset 0 5de814552237
permissions -rw-r--r--
Initial contribution supporting NaviEngine 1 This package_definition.xml will build support for three memory models - Single (sne1_tb) - Multiple (ne1_tb) - Flexible (fne1_tb)

//
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:  
//
//////////////////////////////////////////////////////////////////////////////
//
// NaviEngine NOR flash download script
//
// Change History:
//
// 11/11/2008 1.0 : Initial version
// 12/02/2009 1.1 : Merged working script in from old naviengine_flash.cmm
// 08/05/2009 1.2 : Updated to accept the image name and address passed as parameters
//
//////////////////////////////////////////////////////////////////////////////

&scriptversion=1.2
entry &imageName &imageAddr &skipHeader

print "======================================================================="
print "&Platform NOR flashing script &scriptversion"

; Stop all CPU cores on the board to prevent them interfering with the flashing
do &PlatformsDir\&Platform\stopcpus.cmm

; Reset the Lauterbach flash configuration
flash.reset

; Configure the flash to either use a helper executable on the machine (faster) or
; to use the Lauterbach (slower) to perform the writing
if "&FlashOptionTarget"=="yes"
	(
		; Target controlled flashing requires a binary downloaded to the development board
		print "Using target assisted flashing"
		flash.create 1. &FlashStart--&FlashEnd &FlashBlockSize TARGET &FlashWidth

		; Determine where to store the target binary (and how big it is)
		flash.target &RamAddr &RamAddr+0x1000 0x1000 ../demo/arm/flash/&FlashWidth/&FlashType.bin
	)
	else
	(
		; Emulator controlled flashing is controlled from the host and is a lot slower
		print "Using basic emulator flashing (slow)"
		flash.create 1. &FlashStart--&FlashEnd &FlashBlockSize &FlashType &FlashWidth
	)

; Determine the size of the image to be written
&fileSize=os.file.size(&imageName)

print "Flash Configuration:"
print "-----------------------------"
print "RAM address:       &RamAddr"
print "Image name:        &imageName"
print "Image Size:        &fileSize"
print "Image Skip Header: &skipHeader"
print "Flash Start:       &imageAddr"
print "Flash End:         &FlashEnd"
print "Flash Type:        &FlashType"
print "Flash Block Size:  &FlashBlockSize"
print "Flash Width:       &FlashWidth"
print "-----------------------------"

flash.unlock &imageAddr++&fileSize
flash.erase &imageAddr++&fileSize
flash.program &imageAddr++&fileSize

if "&skipHeader"=="true"
	(
	print "Skipping EPOC header"
	data.load.binary "&imageName" &imageAddr /SKIP 100
	)
else
	(
	data.load.binary &imageName &imageAddr /WORD
	)

; Programming done, relock the flash
flash.program off
flash.lock 1.

; Compare what we wrote against what is there now
print "Verifying image..."
if "&skipHeader"=="true"
	(
	data.load.binary "&imageName" &imageAddr /SKIP 100 /compare
	)
else
	(
	data.load.binary "&imageName" &imageAddr /compare
	)

; On an error the script will abort before printing OK (and print the error)
print "Verified OK.  Flash programming completed"

; Disconnect the JTAG as the user is likely to power cycle the board and it might confuse us
sys.down

enddo