Cypress CY7C601xx ユーザーズマニュアル

ページ / 68
 
CY7C601xx, CY7C602xx
Document 38-16016 Rev. *E
Page 16 of 68
Two important variables used for all functions are KEY1 and
KEY2. These variables help discriminate between valid and
inadvertent SSCs. KEY1 always has a value of 3Ah, while KEY2
has the same value as the stack pointer when the SROM
function begins execution. This is the Stack Pointer value when
the SSC opcode is executed, plus three. If either of the keys do
not match the expected values, the M8C halts (with the exception
of the SWBootReset function). The following code puts the
correct value in KEY1 and KEY2. The code starts with a halt, to
force the program to jump directly into the setup code and not
run into it.
halt
SSCOP: mov [KEY1], 3ah
mov X, SP
mov A, X
add A, 3
mov [KEY2], A
11.4.1  Return Codes
The SROM also features Return Codes and Lockouts.
Return codes determine the success or failure of a particular
function. The return code is stored in KEY1’s position in the
parameter block. The CheckSum and TableRead functions do
not have return codes because KEY1’s position in the parameter
block is used to return other data.
Read, write, and erase operations may fail if the target block is
read or write protected. Block protection levels are set during
device programming.
The EraseAll function overwrites data in addition to leaving the
entire user Flash in the erase state. The EraseAll function loops
through the number of Flash macros in the product, executing
the following sequence: erase, bulk program all zeros, erase.
After the user space in all Flash macros are erased, a second
loop erases and then programs each protection block with zeros.
11.5  SROM Function Descriptions
11.5.1  SWBootReset Function
The SROM function, SWBootReset, is responsible for transi-
tioning the device from a reset state to running user code. The
SWBootReset function is executed whenever the SROM is
entered with an M8C accumulator value of 00h: the SRAM
parameter block is not used as an input to the function. This
happens, by design, after a hardware reset, because the M8C's
accumulator is reset to 00h or when user code executes the SSC
instruction with an accumulator value of 00h. The SWBootReset
function does not execute when the SSC instruction is executed
with a bad key value and a non zero function code. An enCoRe
II LV device executes the HALT instruction if a bad value is given
for either KEY1 or KEY2.
The SWBootReset function verifies the integrity of the calibration
data by way of a 16-bit checksum, before releasing the M8C to
run user code. 
11.5.2  ReadBlock Function
The ReadBlock function is used to read 64 contiguous bytes
from Flash: a block.
The function first checks the protection bits and determines if the
desired BLOCKID is readable. If read protection is turned on, the
ReadBlock function exits setting the accumulator and KEY2 back
to 00h. KEY1 has a value of 01h, indicating a read failure. If read
protection is not enabled, the function reads 64 bytes from the
Flash using a ROMX instruction and stores the results in SRAM
using an MVI instruction. The first of the 64 bytes is stored in
SRAM at the address indicated by the value of the POINTER
parameter. When the ReadBlock completes successfully the
accumulator, KEY1 and KEY2 all have a value of 00h.
Table 11-2.  SROM Function Parameters
Variable Name
SRAM Address
Key1/Counter/Return Code
0,F8h
Key2/TMP
0,F9h
BlockID
0,FAh
Pointer
0,FBh
Clock
0,FCh
Mode
0,FDh
Delay
0,FEh
PCL
0,FFh
Table 11-3.  SROM Return Codes
Return Code
Description
00h
Success
01h
Function not allowed due to level of protection 
on block
02h
Software reset without hardware reset
03h
Fatal error, SROM halted
Table 11-4.  ReadBlock Parameters
Name
Address
Description
KEY1
0,F8h
3Ah
KEY2
0,F9h
Stack Pointer value, when SSC is 
executed
BLOCKID
0,FAh
Flash block number
POINTER
0,FBh
First of 64 addresses in SRAM 
where returned data is stored