T
Serial Interface Developers Guide
for the
ECS-320A
T
T
Embeddable Camera Electronics System
(Document Number 700-00000040-R10)
10503 Timberwood Circle
Suite 120
Louisville, KY 40223
(502) 423-7225
SERIAL INTERFACE DEVELOPERS GUIDE
T
Table of Contents
T
...........................................................................................................2
.....................................................................................................................................2
...................................................................................................................................2
4 INTERFACE PROTOCOL........................................................................................... 3
4.1 PC Master Information .........................................................................................................................3
4.2 Communications Configuration .........................................................................................................3
5 HOST SIDE INTERFACE............................................................................................ 4
5.1 Baud Rate..............................................................................................................................................4
...................................................................................................................................4
5.2.1 McbOpenCom .................................................................................................................................4
5.2.2 McbCloseCom ................................................................................................................................4
5.2.3 McbDetect .......................................................................................................................................4
5.2.4 McbGetInfo .....................................................................................................................................4
5.2.8 McbSendAppCmd...........................................................................................................................5
5.2.9 McbGetAppCmdStatus ...................................................................................................................5
.........................................................................................................................5
.........................................................................................................................5
................................................................................................................5
.............................................................................................................5
5.3.1 CMD_COPY_SFLASH_PAGE .......................................................................................................6
5.3.2 CMD_PROG_SFLASH_FULL ........................................................................................................7
5.3.3 CMD_PROG_SFLASH_PARTIAL ..................................................................................................7
5.3.14 CMD_IMAGE_GRAB ..................................................................................................................11
5.3.15 CMD_READ_UTILITY_MEMORY ..............................................................................................11
..........................................................................................................7
..........................................................................................................8
...........................................................................................................8
...........................................................................................................9
..........................................................................................................9
...........................................................................................................9
...............................................................................................................9
.............................................................................................................10
....................................................................................................10
..................................................................................................10
iii
SERIAL INTERFACE DEVELOPERS GUIDE
5.3.19 CMD_TEC_DRV_ENABLE.........................................................................................................12
5.3.20 CMD_TEC_TEMP_SELECT ......................................................................................................12
5.3.21 CMD_CAL_FLAG_SERVO.........................................................................................................12
5.3.22 CMD_CAL_FLAG_REFERENCE ...............................................................................................13
5.3.23 CMD_ONE_PT_REFRESH ........................................................................................................13
5.3.24 CMD_TWO_PT_NUC .................................................................................................................14
5.3.25 CMD_LOAD_COLOR_PAL ........................................................................................................14
5.3.26 CMD_LOAD_OVLY_PAL ...........................................................................................................14
5.3.27 CMD_PIN_CHECK .....................................................................................................................14
5.3.28 CMD_FAN_SPEED_OPERATION .............................................................................................14
5.3.29 CMD_GET_ADC_VALUES ........................................................................................................15
5.3.30 CMD_ENABLE_RETICLE ..........................................................................................................15
5.3.31 CMD_RETICLE_POSITION .......................................................................................................15
5.3.32 CMD_ONE_PT_UPDATE...........................................................................................................15
5.3.33 CMD_WRITE_VID_ENC_REG...................................................................................................15
5.3.34 CMD_PERFORM_TEST ............................................................................................................16
5.3.35 CMD_OVERLAY_REFRESH .....................................................................................................16
5.3.36 CMD_FREEZE_IMAGE ..............................................................................................................16
5.3.37 CMD_DETECT_BAD_PIXELS ...................................................................................................16
5.3.38 CMD_IRCON_LOAD_LUT .........................................................................................................17
5.3.39 CMD_LOAD_RAD_PARAMS .....................................................................................................17
5.3.40 CMD_RESET_PFV_COUNT ......................................................................................................17
5.3.41 CMD_CLEAR_CONTINUE_FLAG .............................................................................................17
5.3.42 CMD_UNIFORMITY_TEST ........................................................................................................17
5.3.43 CMD_WRITE_UTILITY_MEMORY ............................................................................................17
5.3.44 CMD_ADV_DETECT_BAD_PIXELS..........................................................................................18
5.3.45 CMD_UPLOAD_NUC .................................................................................................................18
5.3.46 CMD_DOWNLOAD_NUC...........................................................................................................18
5.3.47 CMD_COMPILE_DEFECT_LISTS .............................................................................................18
5.3.48 CMD_RESTORE_FACTORY_DEFECTS ..................................................................................19
5.3.49 CMD_ENABLE_RANGE_RETICLE ...........................................................................................19
5.3.50 CMD_INIT_NUC_TABLE............................................................................................................19
........................................................................................................11
..................................................................................................11
UT
......................................................................................................19
......................................................................................................19
6.1 DSP Data Memory ..............................................................................................................................20
...............................................................................................................21
6.2.2 CameraConfig.updateNVM...........................................................................................................21
6.2.3 CameraConfig.continueFlag .........................................................................................................21
6.2.4 CameraConfig.CmdsReceived .....................................................................................................21
6.2.5 CameraConfig.camStats...............................................................................................................21
6.2.6 CameraConfig.camErrors .............................................................................................................22
6.2.7 CameraConfig.camTime ...............................................................................................................22
6.2.8 CameraConfig.expPort .................................................................................................................22
6.2.9 CameraConfig.swVersion .............................................................................................................22
6.2.10 CameraConfig.swBuild ...............................................................................................................22
6.2.11 CameraConfig.fpgaVersion[2] ....................................................................................................23
................................................................................................................23
iv
SERIAL INTERFACE DEVELOPERS GUIDE
6.2.15 CameraConfig.actOpName[4] ....................................................................................................23
6.2.16 CameraConfig.actNucName[4] ...................................................................................................23
6.2.17 CameraConfig.bitFieldIndex .......................................................................................................23
6.2.18 CameraConfig.radSWInfo...........................................................................................................24
6.2.19 CameraConfig.alarm ...................................................................................................................24
6.2.20 CameraConfig.calFlagRefs.........................................................................................................24
6.2.21 CameraConfig.fpaInfo.................................................................................................................24
..................................................................................................23
...................................................................................................25
...................................................................................................25
.............................................................................................................26
......................................................................................................................26
.......................................................................................................................26
........................................................................................................................27
6.3.4 nvmData.AutoNucData .................................................................................................................27
6.3.5 nvmData.AutoRfshTime................................................................................................................27
6.3.6 nvmData.AutoRfshTemp ..............................................................................................................27
6.3.7 nvmData.ActPal ............................................................................................................................27
6.3.13 nvmData.AgcLimits .....................................................................................................................28
6.3.14 nvmData.LinearMap ...................................................................................................................29
6.3.18 nvmData.ImageParams ..............................................................................................................29
6.3.19 nvmData.LensID .........................................................................................................................29
........................................................................................................................27
........................................................................................................................28
.....................................................................................................................28
.....................................................................................................................28
...................................................................................................................28
.................................................................................................................29
.................................................................................................................29
...........................................................................................................29
...................................................................................................................31
...................................................................................................................................32
....................................................................................................................................32
6.6.4 Memory Test .................................................................................................................................33
................................................................................................................................33
................................................................................................................................34
6.6.11 Video Encoder Test ....................................................................................................................35
..........................................................................................................................34
..............................................................................................................34
............................................................................................................35
..........................................................................................................35
...............................................................................................................................36
v
SERIAL INTERFACE DEVELOPERS GUIDE
6.9.3 FPA Processor User Mode Control Register ................................................................................37
6.9.4 ATC Offset Coefficient Register....................................................................................................38
6.10 Access to Serial Data Flash ............................................................................................................38
7.3 One Point Update Calibration (Internal Flag): .................................................................................39
7.4 One Point Update Calibration (External Flag): ................................................................................40
7.5 Two Point Calibration (Internal Flags): ............................................................................................40
7.6 Two Point Calibration (External Flags): ...........................................................................................40
7.7 Defective Pixel Detection ..................................................................................................................41
7.8 User Defined Defective Pixel Map ....................................................................................................41
7.9 Upload NUC Table from Host ............................................................................................................41
7.10 Download NUC Table to Host .........................................................................................................42
vi
SERIAL INTERFACE DEVELOPERS GUIDE
1 Introduction
This guide has been written to help the developer become acquainted with and be able to develop
around the Serial Interface Protocol requirements for the Embeddable Camera Electronics System
hardware.
An overview of the system requirements and a detailed description of the protocol are provided. This
guide also provides information on how the Lumitron Operational Manager Application software
interacts with the ECS-320A hardware during system operation. This is done to provide examples on
how the host application can communicate with the camera electronics.
The interface is based on a product developed by Motorola specifically for DSP integration. It consists
of two components one that resides on the DSP (one of the camera electronics software drivers) and
one that resides on a host (typically a PC). The protocol software that exists on the host can be
custom developed, or the developer can integrate the Motorola provided software library. This
document will deal only with the communications library provided by Motorola.
This document has been written with the assumption that the user is knowledgeable about Microsoft
Windows OS based applications as well as how to create these applications.
This document is intended to encompass all camera application versions up to v11 b91 but is specific
to that version. Earlier versions may not have all the features or commands listed in this document
and there may be some differences in the data types/locations. Please contact Lumitron for specifics
about previous camera software versions.
2 General Requirements
Software developed to interface with the camera electronics will need to incorporate the Motorola
communications library version 1.2. This is the key component in development of an interface for a
Windows based application. The files necessary to build an application can be obtained from
Motorola. At the very least these files can be obtained by downloading or ordering (at no cost) the
entire Motorola software development kit (MSW3SDK000AA: Embedded Software Development Kit for
56800/56800E), which will contain these files.
The files are as follows:
Mcbc12.dll
Mcbc12.lib
Mcbcom.chm
Mcbcom.h
Mcberr.h
Dynamic Link Library
Library File
Compiled HTML help file
Header File for library/dll
Header File with error codes
Along with the exposed interface provided by Motorola there are various defines, structures, and
enumerations that are required to correctly transfer data to and from the camera electronics. This
information can be obtained from Lumitron and portions of it may be listed in this document.
Host software requires an IBM PC or PC compatible with an available COM port. Lumitron’s host
application was designed for Windows 2000 and a minimum screen size setting of 1024 x 768.
3 Camera Boot Sequence
There are always two executables located on the camera electronics. The first is located in DSP boot
flash and will be referred to as the “bootloader”. This code provides a means for the camera to initially
load or update the second executable (embedded camera application).
When a power on or reset occurs on the electronics: the DSP, via an interrupt, jumps to the boot flash
and executes code located there. This code configures the DSP serial port peripheral registers to be
1
SERIAL INTERFACE DEVELOPERS GUIDE
used for text/file transfer. The bootloader is JTAG loaded into the DSP boot flash, typically during the
production of the camera electronics.
After the bootloader has configured the serial port it will output some text messages informing the host
of its status and go into a wait state (approximately 5 seconds). During the wait state the host can
initiate a file upload. Once a file upload is complete or the wait state times out, then execution is
transferred to the application software loaded in DSP program flash memory.
3.1 Communication Configuration
The serial configuration of the camera while executing the bootloader is fixed:
•
•
•
•
115,200 Baud
8 Data Bits
No Parity
1 Stop Bit
3.2 Boot Messages
During bootloader execution several text messages are output to the host. In a typical boot process
where no file upload is attempted the following message is output.
Lumitron Bootloader v0003 for 49MHz Configuration.
© 2000-2001 Motorola Inc. S-Record loader. Version 1.3
Pause for transfer!
Application Started
As the host is monitoring the bootloader for text output it can key off of the ‘Pause for Transfer!’
message. At this point the host has a couple of seconds to begin the upload process. A typical boot
process where a file is uploaded will have the following typical message.
Lumitron Bootloader v0003 for 49MHz Configuration.
© 2000-2001 Motorola Inc. S-Record loader. Version 1.3
Pause for transfer!
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++
Loaded 0x8e1e Program and 0x0e70 Data words.
Application Started
The string of ‘+’ characters in the message represent the file upload progress. Note that the message
contains the Lumitron bootloader version, the controller board configuration oscillator rate, and the
Motorola S-Record loader version.
3.3 Software Upload
The host application can be used to upgrade the camera electronics application software. To
accomplish this task - the application needs to be ‘ready’ when the camera electronics receives a
power on reset. This is the only way to initiate a file upload. The host application needs to be in the
proper communications configuration (paragraph
X
3.1), have the file ready for upload (already stored in
X
a buffer), and be prepared to trigger on the incoming message.
2
SERIAL INTERFACE DEVELOPERS GUIDE
When the trigger occurs the host application can begin writing the file data to the COM port. The
bootloader receives the incoming data stream, converts the text data, and writes the executable to the
proper location in DSP program and data flash.
Once the file transfer is complete execution is transferred to the embedded application that was just
loaded.
Lumitron v0003 Bootloader Version:
The latest bootloader version no longer uses a ‘Xon/Xoff’ protocol. This is due to the implementation
of the RS-485 for specific camera configurations. Since, for this protocol we need to simulate half
duplex communications, the host computer will send a single (complete) Motorola S-Record at a time.
The data will be processed by the camera and then acknowledged with a ‘+’ character in response.
This tells the host that the camera is ready for another S-Record. Hosts that do not implement this
‘send record : wait for response’ will not function with this version of the bootloader.
Lumitron v0002/v0001 Bootloader Versions:
The upload of the embedded operational application is done using a standard “Xon/Xoff” protocol.
Where the ‘Xon’ character is hexadecimal 0x11 and the ‘Xoff’ character is hexadecimal 0x13. The
bootloader uploads files in the Motorola S-Record format.
4 Interface Protocol
The interface protocol is the set of simple binary structures and conventions, enabling data/code
exchange between a host PC and a target camera electronics controller board. It uses raw 8-bits, no
parity serial transfer at the controller board configured speed (115200 kbps by default).
The communication model is based on a master-slave basis. The PC computer sends a message
with a command plus any arguments, and the target responds immediately (within specified time) with
operation status code and return data. The target never initiates the communication. Its responses are
exactly specified and always of fixed (known) length.
4.1 PC Master Information
PC Master is a protocol that was developed by Motorola for the real time test, debugging, and
operation of DSP based hardware. It is made up of two parts: one that exists on the host and one that
exists on the DSP controller.
The module that exists on the DSP controller is part of the software development kit (SDK) that was
used in the design of the embedded camera application. Information specific to that SDK driver and
its capabilities can be obtained from Motorola (Embedded SDK: Targeting Motorola DSP56F80x
Platform SDK126/D, Embedded SDK: PC Master User Manual SDK111/D).
PC Master exists on the camera electronics as the only serial port driver for COM port 0. It operates in
a polling mode and does not initiate a transmission but only responds to them. Using fixed memory
mapped information about the DSP controller and the embedded application; it is possible to
read/write DSP peripheral registers (paragraph
variables (paragraph 6.2). Using Lumitron defined commands the capability expands to allow access
to the real time clock, non-volatile RAM (paragraph TBD), serial data flash (paragraph 6.10), and
X
6.8
X
), Xilinx FPGA registers (paragraph
X
0
X
), and global
X
X
X
X
coefficient data flash (paragraph TBD) parts via the DSP controller. This provides the host with a
means to control/modify/check almost any configuration parameter that exists in the embedded
software.
4.2 Communications Configuration
The configuration of the serial communications has two parts. The host will need to be able to
configure which on-board port it will use and the baud rate of the port. It may also need to detect the
configured baud rate of the camera electronics. This can easily be done by cycling through the
3
SERIAL INTERFACE DEVELOPERS GUIDE
possible baud rates (9600, 38400, 115200) and verifying communication status. The remainder of the
settings are automatically configured by the communications library.
5 Host Side Interface
5.1 Baud Rate
The baud rate of the host side can be fixed to the configuration of the camera electronics or it can be
designed to detect the active baud rate. When opening the port on the host application side the
function requires a baud rate parameter. See function definition below.
DWORD McbOpenCom(HMCBCOM* phCom, int port, int speed = 9600, LPWSTR remoteServer = NULL);
Using the open handle with the desired baud rate, the host application can call the function below.
DWORD McbDetect(HMCBCOM hCom, LPMCB_RESP_GETINFO pinfo);
By verifying the return of this function it can be determined if the baud rate setting is valid. Once it has
been determined the connection is valid then data transfer can begin.
5.2 Function Subset
All of the functions contained in the Motorola communications library can be found in the ‘mcbcom.h’
file as well as the ‘Mcbcom.chm’ compiled HTML help file. Only those that are typical for interfacing
with the camera electronics will be discussed here.
5.2.1 McbOpenCom
This function is used to open a PC Master Communications resource to begin data transfer. The
pointer that is supplied is filled with a handle to the resource if successful. That handle is used in
every subsequent call via the library to the camera electronics.
Function Definition: MCBCOM_API DWORD McbOpenCom(HMCBCOM* phCom, int port, int speed =
9600, LPWSTR remoteServer = NULL);
5.2.2 McbCloseCom
This function is used to close an existing PC Master communications resource. This function should
be called when exiting the application, or when needing to change the resource configuration (baud
rate).
Function Definition: MCBCOM_API void McbCloseCom(HMCBCOM hCom);
5.2.3 McbDetect
Call this function to detect if the communications link to the camera electronics is successful.
Function Definition: MCBCOM_API DWORD McbDetect(HMCBCOM hCom,
LPMCB_RESP_GETINFO pinfo);
5.2.4 McbGetInfo
Call this function to obtain information about the protocol as it exists on the camera electronics. The
supplied pointer is used to fill a data structure with the requested data.
Function Definition: MCBCOM MCBCOM_API DWORD McbGetInfo(HMCBCOM hCom,
LPMCB_RESP_GETINFO pinfo);
4
SERIAL INTERFACE DEVELOPERS GUIDE
5.2.5 McbReadDataMem
Call this function to read a block of memory from the DSP. At the lower level the call may be broken
into several calls to the DSP controller to read the entire block. This function can also be used to read
registers or a block of registers that are mapped into the DSP data memory space.
Function Definition: MCBCOM MCBCOM_API DWORD McbReadDataMem(HMCBCOM hCom,
LPVOID dest, DWORD addr, WORD size);
Note that the function parameter for size is in bytes and the DSP base integer size is 16-bits, so to
read a single memory location requires the parameter to be 2.
5.2.6 McbWriteDataMem
Call this function to write a block of memory to the DSP. At the lower level the call may be broken into
several calls to the DSP controller to write the entire block. This function can also be used to write
registers or a block of registers that are mapped into the DSP data memory space.
Function Definition: MCBCOM_API DWORD McbWriteDataMem(HMCBCOM hCom, LPCVOID src,
DWORD addr, WORD size);
5.2.7 McbWriteDataMemMask
Call this function to write a block memory to the DSP with a mask parameter. At the lower level the
call may be broken into several calls to the DSP controller to write the entire block. This function is
useful when it is necessary to modify only a portion of a 16-bit register or location, thus providing a
means to update a location without having to perform a read-modify-write at the higher level.
Function Definition: MCBCOM_API DWORD McbWriteDataMemMask(HMCBCOM hCom, LPCVOID
src, LPCVOID mask, DWORD addr, WORD size);
5.2.8 McbSendAppCmd
Call this function to initiate a user defined command on the DSP controller. Typically commands are
used when it is necessary to perform a sequence of events or to access resources that are outside of
the DSP data memory space.
Function Definition: MCBCOM_API DWORD McbSendAppCmd(HMCBCOM hCom, BYTE code,
DWORD argSize, LPCVOID argBuff);
An example of this function is shown below in paragraph
X
5.3.
X
5.2.9 McbGetAppCmdStatus
Call this function to retrieve the status of any outstanding commands. It is good practice to call this
function to check the camera status before sending any new commands.
Function Definition: MCBCOM_API DWORD McbGetAppCmdStatus(HMCBCOM hCom, LPBYTE
pCmdStatus);
5.3 Lumitron Defined Commands
Once the connection is verified a command can be sent to the camera electronics. A full list of
available commands for the electronics is listed in. The paragraphs that follow will have a more
detailed description of each command, the command response, and any arguments that are supplied
with a specific command.
Below is an example of how to initiate a command to enable the focus motor in the ‘far’ direction. First
check the status of the camera to ensure that a command is not already being executed. The
‘GetPCMStatus’ is a wrapper function that calls the McbGetAppCmdStatus function and includes a
timeout.
5
SERIAL INTERFACE DEVELOPERS GUIDE
…
// Wait until DSP is ready for next command
status = GetPCMStatus(m_hComPCM);
// Send Focus Motor Far Command
retVal = McbSendAppCmd(
m_hComPCM,
(BYTE)CMD_FOCUS_MOTOR_FAR,
0,
NULL
);
// If failed we need to break
if (FAILED(retVal))
{
tStr.Format(IDS_PC_MSTR_ERROR, retVal);
DoMessageBox(tStr, MB_OK, 0);
}
…
Notes:
•
The third argument of the call ‘McbSendAppCmd’ is set to zero and the fourth argument is
NULL. That is because this command requires no additional data for the command to perform
its task.
•
•
Several of the commands refer to the ‘scratch pad’ buffer. The scratch pad buffer is fixed at
memory location 0x00C0 and has a length of 160 16-bit words (320 bytes). This gives the
embedded application a place to temporarily store large amounts of data without having to
break up serial flash, NUC flash, or utility memory reads/writes while trying to interface with
the host.
Some of the commands are part of a multi-command/function sequence to achieve the
desired result. For example it takes two commands to read memory from the serial data flash.
The first command takes the serial data flash address and the data transfer size as an
argument, reads the appropriate flash page, and places the data read into a global ‘scratch
pad’ buffer. The second command (function) calls the standard ‘McbReadDataMem’ to
retrieve the data from the ‘scratch pad’ buffer into a local host buffer.
•
The base data type for the PC side is 32-bit. The DSP on the other hand has a base of 16-
bits. Bit fields are used as often as possible to provide efficient access to register values and
configuration parameters. Also with the bit manipulation capability of the DSP it creates more
efficient code for the embedded application. But the size difference between the base data
types makes it difficult to use the same structures on both platforms. The structures that are
listed in this document are pulled from the code on the PC side. This means that some data
members are listed just as UWord16 instead of being cast to a 16-bit data structure. So bit
fields within some data members will need a different method of extracting values (masking,
cast after read, etc.).
5.3.1 CMD_COPY_SFLASH_PAGE
Description: Copy a page of serial flash memory to the DSP scratch pad buffer. Serial flash pages
are 264 bytes long. The serial flash is used to store operational mode descriptor tables, NUC mode
descriptor tables, vide palettes, overlay palettes, FPGA configuration files, and other additional items.
Command Code: Enumeration for CMD_COPY_SFLASH_PAGE
Argument Size: size of UWord16
Argument: Page number to be copied (0 - 4095)
Note: Use the McbReadDataMem function to read data from scratch pad.
6
SERIAL INTERFACE DEVELOPERS GUIDE
5.3.2 CMD_PROG_SFLASH_FULL
Description: Program a full page to serial flash. The data to be programmed will need to be written to
the scratch pad (DSP memory location 0x00C0) before initiating this command. The offset for the
write into serial flash will be 0 regardless of the structure value.
Command Code: Enumeration for CMD_PROG_SFLASH_FULL
Argument Size: size of flash_XFER
Argument: See below.
struct _flash_XFER {
WORD
WORD
WORD
WORD
eraseFlag;
page;
offset;
size;
// Status Flag to check if flash is erased
// Start Page in Serial flash (0 - 4095)
// Offset for smaller than page size xfers ( < 264)
// Size in Bytes to program to flash (<= 264)
};
Note: Use the McbWriteDataMem function to move data into scratch pad.
5.3.3 CMD_PROG_SFLASH_PARTIAL
Description: Programs a partial page to serial flash. The data to be programmed will need to be
written to the scratch pad (DSP memory location 0x00C0) before initiating this command.
Command Code: Enumeration for CMD_PROG_SFLASH_FULL
Argument Size: size of flash_XFER
Argument: See below.
struct _flash_XFER {
WORD
WORD
WORD
WORD
eraseFlag;
page;
offset;
size;
// Status Flag to check if flash is erased
// Start Page in Serial flash (0 - 4095)
// Offset for smaller than page size xfers ( < 264)
// Size in Bytes to program to flash (<= 264)
};
Note: Use the McbWriteDataMem function to move data into scratch pad.
5.3.4 CMD_PROG_PRODUCT_ID
Description: Program DSP Data flash with Product ID’s. The product ID’s will need to be written to
the scratch pad (DSP memory location 0x00C0) before initiating this command. The product ID data
is written to the DSP data flash starting at address 0x2000.
Command Code: Enumeration for CMD_PROG_PRODUCT_ID
Argument Size: 0
Argument: Null
Note: Use the McbWriteDataMem function to move data into scratch pad. Associated data structures
listed below:
/* General Structure to hold component revision, type, and serial number */
struct _COMP_SER_NUM
{
Word16
UWord32
RevAndType;
SerNum;
};
/* Size = 3 Words */
typedef struct _COMP_SER_NUM COMP_SER_NUM, *PTR_COMP_SER_NUM;
/* Top level structure to hold info on each defined component */
struct _PRODUCT_ID
{
COMP_SER_NUM
COMP_SER_NUM
COMP_SER_NUM
camera;
controllerBD;
camSupportBD;
7
SERIAL INTERFACE DEVELOPERS GUIDE
COMP_SER_NUM
COMP_SER_NUM
COMP_SER_NUM
COMP_SER_NUM
UWord16
fpaSupportBD;
calFlagAssy;
peripheral[4];
fpa;
ReserveBlk_A[2];
};
/* Size = 32 Words */
typedef struct _PRODUCT_ID PRODUCT_ID, *PTR_PRODUCT_ID;
5.3.5 CMD_READ_PRODUCT_ID
Description: Read Product ID from DSP Data flash and place into the scratch pad buffer.
Command Code: Enumeration for CMD_READ_PRODUCT_ID
Argument Size: 0
Argument: Null
Note: Use the McbReadDataMem function to read data from scratch pad. See data structures above.
5.3.6 CMD_PROG_STATIC_CFG
Description: Program DSP Data flash with the Static Configuration. The static configuration data will
need to be written to the scratch pad (DSP memory location 0x00C0) before initiating this command.
The static configuration data is written to the DSP data flash starting at address 0x2020.
Command Code: Enumeration for CMD_PROG_STATIC_CFG
Argument Size: 0
Argument: Null
Note: Use the McbWriteDataMem function to move data into scratch pad. Associated data structures
listed below:
/* Cal Flag Servo Configuration Structure */
struct _CAL_FLAG_CFG
{
UWord16
UWord16
UWord16
PwmPeriodFctr;
PwmCloseFctr;
PwmOpenFctr;
};
typedef struct _CAL_FLAG_CFG CAL_FLAG_CFG, *PTR_CAL_FLAG_CFG;
/* Lens Mode Configuration Structure */
struct _LENS_CFG
{
/* 1st Word */
unsigned
unsigned
unsigned
IDCode:8;
FocusMode:4;
ZoomMode:4;
/* Lens ID Code (Bits 0 - 7) */
/* Lens Focus Mode (Bits 8 - 11) */
/* Lens Zoom Mode (Bits 12 - 15) */
/* 2nd Word */
unsigned
unsigned
BaseIndex:6;
LimitIndex:6;
RsvdBits_A:4;
/* NUC Base Index (Bits 0 - 5) */
/* NUC Limit Index (Bits 6 - 11) */
/* Reserved (Bits 12 - 15) */
unsigned
};
typedef struct _LENS_CFG LENS_CFG, *PTR_LENS_CFG;
/* Static Configuration Structure */
struct _STATIC_CFG
{
UWord16
UWord16
RefClkRate;
comCfg;
UWord16
dspVideo;
UWord16
CAL_FLAG_CFG
UWord16
procVideo;
calFlag;
ReserveBlk_B[17];
8
SERIAL INTERFACE DEVELOPERS GUIDE
LENS_CFG
lens[4];
};
typedef struct _STATIC_CFG STATIC_CFG, *PTR_STATIC_CFG;
5.3.7 CMD_READ_STATIC_CFG
Description: Read Static Configuration from DSP Data flash and place into the scratch pad buffer.
Command Code: Enumeration for CMD_READ_STATIC_CFG
Argument Size: 0
Argument: Null
Note: Use the McbReadDataMem function to read data from scratch pad. See data structures above.
5.3.8 CMD_GET_CAMERA_TIME
Description: Read the Real Time Clock data and place into the scratch pad buffer. The time data is
read from the serial peripheral Dallas real time clock chip.
Command Code: Enumeration for CMD_GET_CAMERA_TIME
Argument Size: 0
Argument: Null
Note: Use the McbReadDataMem function to read data from scratch pad. Associated data structures
listed below:
/* Structure to hold time info from Real Time Clock */
struct _RTC_DATA
{
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
seconds;
minutes;
hours;
day;
date;
month;
year;
/* 0 - 59 */
/* 0 - 59 */
/* 0 - 23 */
/* 1 - 7 */
/* 1 - 31 */
/* 1 - 12 */
/* 0 - 99 (Add 2000 to get year) */
}; /* Size = 7 Words */
typedef struct _RTC_DATA RTC_DATA, *PTR_RTC_DATA;
5.3.9 CMD_SET_CAMERA_TIME
Description: Set the Real Time Clock data from values stored in the scratch pad buffer.
Command Code: Enumeration for CMD_SET_CAMERA_TIME
Argument Size: 0
Argument: Null
Note: Use the McbWriteDataMem function to move data into scratch pad. See data structures above.
5.3.10 CMD_GET_NVM_DATA
Description: Read a block of memory from the serial peripheral Dallas non-volatile memory (NVM) to
the scratch pad buffer. The NVM block is used to store dynamic configuration data for the camera
such as AGC/ALC mode, overlay mode, reticle position, active operation mode, active NUC table
index, and many other settings. These settings are used during the boot process to restore the
camera to a known state.
Command Code: Enumeration for CMD_GET_NVM_DATA
Argument Size: size of NVM_XFER
9
SERIAL INTERFACE DEVELOPERS GUIDE
Argument: See below.
struct _NVM_XFER {
UWord16
UWord16
};
offset;
size;
// Offset from byte 0
// Size in bytes
typedef struct _NVM_XFER NVM_XFER, *PTR_NVM_XFER;
Note: Use the McbReadDataMem function to read data from scratch pad. The offset term in the data
structure determines the offset address relative to the NVM part. This command allows the host to
retrieve any portion or all of the current NVM contents.
Do not confuse access to this memory block with the portion of the global configuration data structure
that has a structure member that contains the shadow version. On boot data from the NVM part is
loaded into the global data structure for real time use by the software.
See
X
Appendix D for information on how the memory is mapped on the serial NVM part.
X
5.3.11 CMD_SET_NVM_DATA
Description: Write a block of memory to the serial peripheral Dallas non-volatile memory (NVM) from
the scratch pad buffer.
Command Code: Enumeration for CMD_SET_NVM_DATA
Argument Size: size of NVM_XFER
Argument: See paragraph
X
5.3.10
X
Note: Use the McbWriteDataMem function to move data into scratch pad. The offset term in the data
structure determines the offset address relative to the NVM part.
Do not confuse access to this memory block with the portion of the global configuration data structure
that has a structure member that contains the shadow version. On boot data from the NVM part is
loaded into the global data structure for real time use by the software.
See
X
Appendix D for information on how the memory is mapped on the serial NVM part.
X
5.3.12 CMD_FOCUS_MOTOR_FAR
Description: Calls the focus-out routine, which enables the focus motor in the forward direction for
200ms.
Command Code: Enumeration for CMD_FOCUS_MOTOR_FAR
Argument Size: 0
Argument: Null
Note: none.
5.3.13 CMD_FOCUS_MOTOR_NEAR
Description: Calls the focus-in routine, which enables the focus motor in the reverse direction for
200ms.
Command Code: Enumeration for CMD_FOCUS_MOTOR_NEAR
Argument Size: 0
Argument: Null
Note: none.
10
SERIAL INTERFACE DEVELOPERS GUIDE
5.3.14 CMD_IMAGE_GRAB
Description: Perform an image grab into one of the utility memory buffers.
Command Code: Enumeration for CMD_IMAGE_GRAB
Argument Size: UWord16
Argument: Buffer to be selected (0 – data placed in image grab buffer A, and 1 - data placed in image
grab buffer B).
Note: This command was included for debug and development and should not be used for normal
operation since a write operation takes place. Buffers may be in use by real time camera operation
and conflicts may occur.
5.3.15 CMD_READ_UTILITY_MEMORY
Description: Read a block of utility memory. The utility memory is external RAM that is interfaced
through the Xilinx FPGA. It is used to store image grab data, histogram data, intensity transform
tables, NUC refresh coefficients, and symbology overlay data.
Command Code: Enumeration for CMD_READ_UTILITY_MEMORY
Argument Size: size of UTIL_MEM_XFER
Argument: See below.
struct _UTIL_MEM_XFER{
UWord32
UWord16
addr;
size;
// Address in utility memory to read/write
// Size in WORDS (Limit to 160)
};
typedef struct _UTIL_MEM_XFER UTIL_MEM_XFER, *PTR_UTIL_MEM_XFER;
Base addresses of utility memory partitions are defined as follows:
/* Utility Memory MAR Base Addresses */
#define
#define
#define
#define
#define
#define
#define
#define
MAR_ITT_LOW
MAR_ITT_HIGH
0x00000000 /* Thru 0x00003FFF */
0x00004000 /* Thru 0x00007FFF */
0x00008000 /* Thru 0x0000BFFF */
0x0000C000 /* Thru 0x0001FFFF */
0x00020000 /* Thru 0x00033FFF */
0x00034000 /* Thru 0x00047FFF */
0x00048000 /* Thru 0x0005BFFF */
0x0005C000 /* Thru 0x0007FFFF */
MAR_HISTO_GRAB
MAR_IMAGE_GRAB_A
MAR_IMAGE_GRAB_B
MAR_SYMBOLOGY_OVLY
MAR_NUC_REFRESH
MAR_EXT_DATA
Note: Buffers may be in use by real time camera operation and conflicts may occur.
5.3.16 CMD_NUC_FLASH_RAMP
Description: Debug command to tell the camera to write ramp count to the parameter blocks (0 – 7) of
the external NUC coefficient flash. The NUC coefficient flash is interfaced via the Xilinx FPGA.
Command Code: Enumeration for CMD_NUC_FLASH_RAMP
Argument Size: 0
Argument: Null
Note: Used to help with the development and testing of the flash memory interface to the FPGA and
DSP.
5.3.17 CMD_NUC_FLASH_MEMORY
Description: Read a block of external NUC flash memory into the scratch pad buffer.
Command Code: Enumeration for CMD_NUC_FLASH_MEMORY
11
SERIAL INTERFACE DEVELOPERS GUIDE
Argument Size: size of NUC_MEM_XFER
Argument: See below.
struct _NUC_MEM_XFER{
UWord32
UWord16
addr;
size;
// Address in NUC flash memory to read
// Size in WORDS (Limit to 160)
};
typedef struct _NUC_MEM_XFER NUC_MEM_XFER, *PTR_NUC_MEM_XFER;
Note: Use the McbReadDataMem function to read data from scratch pad. Multiple calls of this
function would allow the host to read an entire set of NUC coefficients.
5.3.18 CMD_NUC_FLASH_TEST_PATTERN
Description: Debug command to tell the camera to write ramp count to the base blocks (10 – 14) of
the external NUC coefficient flash. The NUC coefficient flash is interfaced via the Xilinx FPGA.
Command Code: Enumeration for CMD_NUC_FLASH_TEST_PATTERN
Argument Size: 0
Argument: Null
Note: Used to help with the development and testing of the flash memory interface to the FPGA and
DSP.
5.3.19 CMD_TEC_DRV_ENABLE
Description: Enables or Disables the TEC Drive circuitry.
Command Code: Enumeration for CMD_TEC_DRV_ENABLE
Argument Size: UWord16
Argument: 0 – for disable, 1 – for enable
Note: Normally this operation would be controlled by settings in the NUC block descriptor table, but
can be overridden for test purposes.
5.3.20 CMD_TEC_TEMP_SELECT
Description: Select TEC Temperature state to high or low.
Command Code: Enumeration for CMD_TEC_TEMP_SELECT
Argument Size: UWord16
Argument: 0 – for low temp state, 1 – for high temp state
Note: Normally this operation would be controlled by settings in the NUC block descriptor table, but
can be overridden for test purposes.
5.3.21 CMD_CAL_FLAG_SERVO
Description: Calls the desired open servo, close servo, or set by factor routine. If the open or close
mode is commanded then the values from data flash are used to set the servo position. If the factor
mode is commanded then the factor supplied with the command packet will be used to set the
position.
Command Code: Enumeration for CMD_CAL_FLAG_SERVO
Argument Size: Size of SERVO_MODE.
Argument: See below.
/* Commanded Servo Setting Structure */
12
SERIAL INTERFACE DEVELOPERS GUIDE
struct _SERVO_MODE
{
UWord16
UWord16
mode;
factor;
/* Mode of Servo: Open, Closed, Factor */
/* PWM Factor for user specified setting */
};
typedef struct _SERVO_MODE SERVO_MODE, *PTR_SERVO_MODE;
/* Servo Mode Enumeration */
enum
{
SERVO_OPEN = 0,
SERVO_CLOSE,
SERVO_FACTOR
};
Note: This command is to be used for test purposes. Once configured the servo will be controlled by
the embedded application during normal operation
5.3.22 CMD_CAL_FLAG_REFERENCE
Description: Sets the calibration flag reference to the supplied state. If hot or cold reference is
selected then the factors stored in the serial data flash (active NUC mode table) are used. If factor
mode is selected then the value supplied with the command packet will be used to set the reference
temperature.
Command Code: Enumeration for CMD_CAL_FLAG_REFERENCE
Argument Size: Size of CAL_FLAG_STATE.
Argument: See below.
/* Commanded Calibration Flag Setting Structure */
struct _CAL_FLAG_STATE
{
UWord16
UWord16
state;
factor;
/* State of Flag: Ambient, Cold, Hot, Factor */
/* Factor for user specified setting */
};
typedef struct _CAL_FLAG_STATE CAL_FLAG_STATE, *PTR_CAL_FLAG_STATE;
/* Calibration Reference Flag Enumeration */
enum
{
CAL_FLAG_AMBIENT = 0,
CAL_FLAG_HOT,
CAL_FLAG_COLD,
CAL_FLAG_FACTOR
};
Note: This command is to be used for test purposes. Once configured the calibration flag will be
controlled by the embedded application during normal operation.
5.3.23 CMD_ONE_PT_REFRESH
Description: Initiates a 1-point refresh calibration.
Command Code: Enumeration for CMD_ONE_PT_REFRESH
Argument Size: UWord16
Argument: 0 – external reference, 1 – internal reference
Note: Since the 1 point refresh calibration using external flag requires placement of cold sources it is
necessary to implement this command in ‘sub-protocol’ form. See paragraph
X
7.1 for details.
X
13
SERIAL INTERFACE DEVELOPERS GUIDE
5.3.24 CMD_TWO_PT_NUC
Description: Initiates a 2-point calibration. The host is required to check/update the status of a global
associated with the calibration process.
Command Code: Enumeration for CMD_TWO_PT_NUC
Argument Size: UWord16
Argument: 0 – external reference, 1 – internal reference
Note: Since the 2 point calibration requires placement of hot and cold sources it is necessary to
implement this command in ‘sub-protocol’ form. See paragraph
X
7.5 for details.
X
5.3.25 CMD_LOAD_COLOR_PAL
Description: Load a video color palette from serial flash (make active).
Command Code: Enumeration for CMD_LOAD_COLOR_PAL
Argument Size: UWord16
Argument: index of desired palette (0 – 15)
Note: No check is performed to see if palette data in serial flash is valid.
5.3.26 CMD_LOAD_OVLY_PAL
Description: Load an overlay palette from serial flash (make active).
Command Code: Enumeration for CMD_LOAD_OVLY_PAL
Argument Size: UWord16
Argument: index of desired palette (0 – 7)
Note: No check is performed to see if palette data in serial flash is valid.
5.3.27 CMD_PIN_CHECK
Description: Supply a PIN for unlocking various memory locations in the camera for updating settings.
Command Code: Enumeration for CMD_PIN_CHECK
Argument Size: UWord16
Argument: PIN value (0 – 65535)
Note: This routine is supplied for advanced user operation. Portions of memory are locked to prevent
inadvertent re-configuring of camera settings that could potentially put the camera in an unusable
state.
5.3.28 CMD_FAN_SPEED_OPERATION
Description: Command to test fan operation.
Command Code: Enumeration for CMD_FAN_SPEED_OPERATION
Argument Size: UWord16
Argument: 0 – to disable fan, 1 – to enable fan
Note: Fan speed is normally controlled by software during operation, but can be overridden for test
purposes.
14
SERIAL INTERFACE DEVELOPERS GUIDE
5.3.29 CMD_GET_ADC_VALUES
Description: Command to retrieve the current value of all active ADC values. The data is placed into
the scratch pad buffer.
Command Code: Enumeration for CMD_GET_ADC_VALUES
Argument Size: 0
Argument: Null
Note: Use the McbReadDataMem function to read data from scratch pad. This command was added
for developmental purposes. The ADC channels read: ADC A Channels – 0 through 7, ADC B
Channels 0 – 3, 7.
5.3.30 CMD_ENABLE_RETICLE
Description: Enables or disables the selected reticle on the overlay symbology.
Command Code: Enumeration for CMD_ENABLE_RETICLE
Argument Size: size of RETICLE_XFER
Argument: See below.
struct _RETICLE_XFER {
unsigned
unsigned
unsigned
unsigned
unsigned
select:1;
enable:1;
horPos:9;
size:4;
// Select A (0) or B (1)
// Reticle Enable
// Reticle Horizontal Position
// Reticle Radius
empty:1;
// Open
unsigned
unsigned
emissivity:8;
verPos:8;
// Reticle Emissivity
// Reticle Vertical Position
};
typedef struct _RETICLE_XFER RETICLE_XFER, *PTR_RETICLE_XFER;
Note: The data contains all the data needed to enable the reticle on the desired screen location.
5.3.31 CMD_RETICLE_POSITION
Description: Move the selected reticle to desired location.
Command Code: Enumeration for CMD_RETICLE_POSITION
Argument Size: size of RETICLE_XFER
Argument: See paragraph
X
5.3.30.
X
Note: This command and CMD_ENABLE_RETICLE are functionally identical.
5.3.32 CMD_ONE_PT_UPDATE
Description: Perform a directed 1-point update calibration. Offset coefficients computed by the
calibration are stored in NUC flash (become part of the permanent NUC coefficient set).
Command Code: Enumeration for CMD_ONE_PT_UPDATE
Argument Size: UWord16
Argument: 0 – do not use internal calibration flag, 1 – use internal calibration flag.
Note: Since the 1 point update calibration may require placement of reference source, it is necessary
to implement this command in ‘sub-protocol’ form. See paragraph
X
7.3 for details.
X
5.3.33 CMD_WRITE_VID_ENC_REG
Description: Command to write value to video encoder register.
15
SERIAL INTERFACE DEVELOPERS GUIDE
Command Code: Enumeration for CMD_WRITE_VID_ENC_REG
Argument Size: size of 2 * UWord16
Argument: 1st
P
UWord16 – offset, 2nd
P
UWord16 – data. The offset term is relative to the video encoder
P
P
mode 0 register. In other words if a value of 0 is supplied as the offset then data will be written to the
mode 0 register.
Note: This command is intended for development purposes and should not be used for normal
operation.
5.3.34 CMD_PERFORM_TEST
Description: Perform test specified by argument in command packet.
Command Code: Enumeration for CMD_PERFORM_TEST
Argument Size: UWord16
Argument: Index from enumeration below.
enum
{
TEST_REGISTERS = 0,
TEST_OPERATIONAL,
TEST_MEMORY,
TEST_UNDEFINED
};
Note: After issuing a test command it is necessary to delay for several seconds until the camera has
completed testing. Then the results can be obtained by reading the global configuration structure
member ‘CAMERA_ERRORS’ (see
X
Appendix A).
X
5.3.35 CMD_OVERLAY_REFRESH
Description: Command to perform a refresh of the symbology overlay.
Command Code: Enumeration for CMD_OVERLAY_REFRESH
Argument Size: 0
Argument: Null
Note: Erases contents of overlay memory and sets flag so that all objects are repainted.
5.3.36 CMD_FREEZE_IMAGE
Description: Command to (un)freeze display imagery.
Command Code: Enumeration for CMD_FREEZE_IMAGE
Argument Size: UWord16
Argument: 0 – normal imagery, 1 – freeze image
Note: none.
5.3.37 CMD_DETECT_BAD_PIXELS
Description: Command to initiate a defective pixel detection routine.
Command Code: Enumeration for CMD_DETECT_BAD_PIXELS
Argument Size: 0
Argument: Null
16
SERIAL INTERFACE DEVELOPERS GUIDE
Note: Since the defective pixel requires placement of reference sources it is necessary to implement
this command in ‘sub-protocol’ form. See paragraph
X
7.7 for details.
X
5.3.38 CMD_IRCON_LOAD_LUT
Description: Custom LUT table creation for radiometry. Contact Lumitron for specifics.
5.3.39 CMD_LOAD_RAD_PARAMS
Description: Custom load radiometric parameters for compile time software. Contact Lumitron for
specifics.
5.3.40 CMD_RESET_PFV_COUNT
Description: Resets the processed FPA video frame count.
Command Code: Enumeration for CMD_RESET_PFV_COUNT
Argument Size: 0
Argument: Null
Note: none.
5.3.41 CMD_CLEAR_CONTINUE_FLAG
Description: Clears (resets) the idle while fault continue flag.
Command Code: Enumeration for CMD_CLEAR_CONTINUE_FLAG
Argument Size: 0
Argument: Null
Note: Errors that are trapped during the boot process or while operating under normal conditions
cause the embedded software to enter an idle routine. While in this routine the host can check the
error code and associated information. Once the fault has been acknowledged the continue flag can
be cleared and the software will resume where it left off.
5.3.42 CMD_UNIFORMITY_TEST
Description: Command to initiate a uniformity test.
Command Code: Enumeration for CMD_UNIFORMITY_TEST
Argument Size: 0
Argument: Null
Note: This test is still under development.
5.3.43 CMD_WRITE_UTILITY_MEMORY
Description: Write data to the utility memory. The utility memory is external RAM that is interfaced
through the Xilinx FPGA. The data to be programmed will need to be written to the scratch pad (DSP
memory location 0x00C0) before initiating this command.
Command Code: Enumeration for CMD_WRITE_UTILITY_MEMORY
Argument Size: size of UTIL_MEM_XFER
Argument: See below.
struct _UTIL_MEM_XFER{
UWord32
UWord16
addr;
size;
// Address in utility memory to read/write
// Size in WORDS (Limit to 160)
17
SERIAL INTERFACE DEVELOPERS GUIDE
};
typedef struct _UTIL_MEM_XFER UTIL_MEM_XFER, *PTR_UTIL_MEM_XFER;
Note: Use the McbWriteDataMem function to move data into scratch pad.
5.3.44 CMD_ADV_DETECT_BAD_PIXELS
Description: Command no longer used.
5.3.45 CMD_UPLOAD_NUC
Description: Command to upload a complete NUC table to the desired NUC index. The NUC table
will be formatted for the embedded application and will contain pixel replace index values for defective
pixels. Due to limited resources on the camera controller board, the command needs to be executed
twice to upload both the gain and offset terms.
Command Code: Enumeration for CMD_UPLOAD_NUC
Argument Size: UWord16 parameter[2]
Argument:
parameter [0] – 0 for gain terms, 1 for offset terms.
parameter [1] – Base NUC address of the NUC table that is being uploaded. This value is the
same value as that which would be written to the Xilinx NucTableBaseReg register and is
computed as follows: Value = (NucTable * 5) + 3; where 0 >= NucTable <= 63. It translates to the
MS bits of the NUC flash memory.
Note: See paragraph
X
7.9 for details on how to complete this process.
X
5.3.46 CMD_DOWNLOAD_NUC
Description: Command to download a complete NUC table to the desired NUC index. The NUC table
will be formatted for the embedded application and will contain pixel replace index values for defective
pixels. Due to limited resources on the camera controller board, the command needs to be executed
twice to upload both the gain and offset terms.
Command Code: Enumeration for CMD_DOWNLOAD_NUC
Argument Size: UWord16 parameter[2]
Argument:
parameter [0] – 0 for gain terms, 1 for offset terms.
parameter [1] – Base NUC address of the NUC table that is being downloaded. This value is the
same value as that which would be written to the Xilinx NucTableBaseReg register and is
computed as follows: Value = (NucTable * 5) + 3; where 0 >= NucTable <= 63. It translates to the
MS bits of the NUC flash memory.
Note: See paragraph
X
7.10 for details on how to complete this process.
X
5.3.47 CMD_COMPILE_DEFECT_LISTS
Description: Command to initiate a defective pixel list build for all valid NUC tables. The address
range in NUC flash where each of the defect lists are stored will be erased prior to beginning the
compile.
Command Code: Enumeration for CMD_COMPILE_DEFECT_LISTS
Argument Size: 0
Argument: None
18
SERIAL INTERFACE DEVELOPERS GUIDE
Note: Once the command has been sent the embedded application will set the status code to
BEGIN_PROCESS. The host can monitor this code until it is returned to HOST_READY which
indicates the routine has completed compiling the defects.
5.3.48 CMD_RESTORE_FACTORY_DEFECTS
Description: Command to restore the active NUC table to the factory defect state. When complete,
the coefficients of the NUC table will be erased, except for the locations where defects from the factory
compiled list have been incorporated.
Command Code: Enumeration for CMD_RESTORE_FACTORY_DEFECTS
Argument Size: 0
Argument: None
Note: Once the command has been sent the embedded application will set the status code to
BEGIN_PROCESS. The host can monitor this code until it is returned to DEFECT_COMPLETED or
HOST_READY which indicates the routine has completed the restore process.
5.3.49 CMD_ENABLE_RANGE_RETICLE
Description: Enable or disable the range reticle.
Command Code: Enumeration for CMD_ENABLE_RANGE_RETICLE
Argument Size: UWord16
Argument: 0 – disable range reticle, 1 – enable range reticle
Note: The reticle will only enable if the lens type is set for 100mm.
5.3.50 CMD_INIT_NUC_TABLE
Description: Erases the active NUC table.
Command Code: Enumeration for CMD_INIT_NUC_TABLE
Argument Size: 0
Argument: None
Note: The Current NUC table information will be lost.
5.3.51 CMD_CAMERA_RECOVER
Description: Initiates a camera recover command (calls routine to reset the NUC mode and reload
various FPGA registers).
Command Code: Enumeration for CMD_CAMERA_RECOVER
Argument Size: 0
Argument: None
Note: Intended to be used only if corruption of digital port data has been detected.
5.3.52 CMD_UPDATE_EXP_PORT
Description: Initiates a camera command that outputs current value of a shadow register to the write
only expansion register. The shadow register is located in the global configuration data structure.
Command Code: Enumeration for CMD_UPDATE_EXP_PORT
Argument Size: 0
19
SERIAL INTERFACE DEVELOPERS GUIDE
Argument: None
Note: Use of this command assumes that the host knows the current state of the shadow register in
the global configuration structure
6 Camera Electronics Side Interface
The communications on the camera side is carried out by a PC Master Device driver that is part of the
Motorola SDK targeted for the DSP 56F80X family. After transfer of execution from the bootloader,
the software initializes a driver that in effect will ‘take control’ of the serial port. Once initialized the
serial port will be in a listening mode, awaiting commands from the connected host. When an
incoming command is detected, an interrupt occurs, and the command is parsed.
Standard commands (such as the reading and writing of DSP data memory) are executed and
acknowledged immediately.
When a custom defined command (such as those listed in paragraph 5.3) is received, a command
busy flag is set. This prevents the host from sending another command before the current one has
been executed. The embedded software is responsible for polling the command status to establish if
the host has requested some type of operation be performed. The command index is parsed, the task
is performed, and then the command status flag is reset.
Initially the protocol baud rate is configured for 115200 bps. Shortly after the peripheral device drivers
have been initialized, a check of the static configuration is done. If the camera electronics have been
configured for a different baud rate then the serial configuration is modified appropriately.
6.1 DSP Data Memory
Using the PC Master Protocol direct access to the DSP data memory is permissible. There is however
no direct access to the flash portion of the DSP data memory. This can be done indirectly to specific
locations as described in paragraphs
space as listed below.
X
5.3.4
X
-
X
5.3.7. The Motorola DSP56F807 has a data memory
X
Data Memory Map (Word Addresses):
0x0000 – 0x0FFF Data RAM
0x1000 – 0x17FF DSP Peripherals
0x1800 – 0x1FFF Reserved
0x2000 – 0x3FFF Data Flash
0x4000 – 0xFF7F External Memory
0xFF80 – 0xFFFF Core Registers
What Lumitron has done is to map various camera configuration and status data into pre-defined
addresses so that the host can monitor/modify the camera electronics behavior. The paragraphs that
follow will describe where the data is mapped and define the associated structure.
6.2 Global Configuration Structure (CAMERA_CONFIG)
The global configuration structure houses the current status of the camera electronics as well as
information about the embedded application. This data structure has been mapped to address
0x0040 and has been allocated a length of 128 words. The structure is listed in
X
Appendix A. As
X
further updates to the embedded code are required the structure may be modified, but only by adding
data members to the end of the structure. This way existing host applications can continue to access
data members without updating code.
20
SERIAL INTERFACE DEVELOPERS GUIDE
Any portion up to the entire structure can be read using the ‘McbReadDataMem’ routine. For
example, if the host wanted to retrieve the current embedded application version, a read of the data
member at address 0x0040 + offset of the ‘swVersion’, member could be performed.
The paragraphs below will provide information about each of the data members.
6.2.1 CameraConfig.nvmData
Type: NVM_GLOBAL_CFG
Size: 40 Words
Description: See paragraph TBD
6.2.2 CameraConfig.updateNVM
Type: bool
Size: 1 Word
Description: Set this value to non-zero when it is desired to update the non-volatile memory with the
contents of the CameraConfig.nvmData. The setting is cleared by the embedded application.
6.2.3 CameraConfig.continueFlag
Type: bool
Size: 1 Word
Description: Under certain circumstances when the embedded application detects an error that it can
recover from it goes into an idle state. In this idle routine the embedded application loops while
checking for the state of this flag or a timeout to occur. Set the value of this flag to 1 (true or non-zero)
for the code to return to normal operation.
6.2.4 CameraConfig.CmdsReceived
Type: UWord16
Size: 1 Word
Description: Debug value to keep track of user commands the camera has acknowledged since boot.
6.2.5 CameraConfig.camStats
Type: CAMERA_STATUS
/* Camera Status Code Structure */
struct _CAMERA_STATUS
{
UWord16
UWord16
UWord16
UWord16
ProcessCode;
ProgressCode;
HostStatusCode;
HostData;
/* Process Code Value */
/* Progress Code Value */
/* Host Status Code */
/* Status flag 2 */
};
typedef struct _CAMERA_STATUS CAMERA_STATUS, *PTR_CAMERA_STATUS;
Size: 4 Words
Description: Structure that contains four sub values for tracking boot progress, or interacting with the
host during tests and calibrations. See paragraph
detection.
X
6.5 below for information on the progress code
X
21
SERIAL INTERFACE DEVELOPERS GUIDE
6.2.6 CameraConfig.camErrors
Type: CAMERA_ERRORS
/* Camera Error Code Structure */
struct _CAMERA_ERRORS
{
UWord16
UWord16
UWord16
UWord16
ErrorCode;
/* Error Code */
/* Error Code */
/* Additional errors after 1st */
/* Error Data Array */
ErrorSubCode;
ErrorCount;
ErrorData[5];
};
typedef struct _CAMERA_ERRORS CAMERA_ERRORS, *PTR_CAMERA_ERRORS;
Size: 8 Words
Description: Structure that contains various sub values for gathering information about errors that have
occurred during testing and normal operation. See paragraph
detection.
X
6.6 for information on the error code
X
6.2.7 CameraConfig.camTime
Type: RTC_DATA
/* Structure to hold time info from Real Time Clock */
struct _RTC_DATA
{
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
seconds;
minutes;
hours;
day;
date;
month;
year;
/* 0 - 59 */
/* 0 - 59 */
/* 0 - 23 */
/* 1 - 7 */
/* 1 - 31 */
/* 1 - 12 */
/* 0 - 99 (Add 2000 to get year) */
}; /* Size = 7 Words */
typedef struct _RTC_DATA RTC_DATA, *PTR_RTC_DATA;
Size: 7 Words
Description: Structure that contains the camera’s current time and date information. Read only data
member.
6.2.8 CameraConfig.expPort
Type: UWord16
Size: 1 Word
Description: Shadow value of the output expansion port used by the embedded application. Read
only data member.
6.2.9 CameraConfig.swVersion
Type: UWord16
Size: 1 Word
Description: Software version ID of the loaded embedded application. Read only data member.
6.2.10 CameraConfig.swBuild
Type: UWord16
Size: 1 Word
22
SERIAL INTERFACE DEVELOPERS GUIDE
Description: Software build ID of the loaded embedded application. Read only data member.
6.2.11 CameraConfig.fpgaVersion[2]
Type: UWord16
Size: 2 Words
Description: Xilinx FPGA version code of the stored configuration file. Read only data member.
6.2.12 CameraConfig.fpaSize
Type: IMAGE_SIZE
/* FPA Size Structure */
struct _IMAGE_SIZE
{
UWord16
UWord16
rows;
cols;
/* Rows (Vertical) */
/* Columns (Horizontal) */
};
typedef struct _IMAGE_SIZE
IMAGE_SIZE, *PTR_IMAGE_SIZE;
Size: 2 Words
Description: Structure that is filled at run time once it is determined the type of FPA that the embedded
application will be configured to operate. Read only data member.
6.2.13 CameraConfig.agcLowIntensity
Type: UWord16
Size: 1 Word
Description: Value computed from any of the automatic gain and level control routines. Read only
data member.
6.2.14 CameraConfig.agcHighIntensity
Type: UWord16
Size: 1 Word
Description: Value computed from any of the automatic gain and level control routines. Read only
data member.
6.2.15 CameraConfig.actOpName[4]
Type: UWord16
Size: 4 Words (8 Bytes)
Description: Mnemonic for the active operational mode. Read only data member.
6.2.16 CameraConfig.actNucName[4]
Type: UWord16
Size: 4 Words (8 Bytes)
Description: Mnemonic for the active NUC mode. Read only data member.
6.2.17 CameraConfig.bitFieldIndex
Type: UWord16
23
SERIAL INTERFACE DEVELOPERS GUIDE
Size: 1 Word
Description: The member is divided into the following bit fields.
Fan Speed Index: (Bits 0 - 2) Current internal fan speed index. Read only data member.
Base NUC table: (Bits 3 - 8) Current base NUC index. Read only data member.
Limit NUC table: (Bits 9 - 14) Current limit NUC index. Read only data member.
No Refresh: (Bit 15) Set to disable automatic NUC refreshes. Only use this bit during specific
operations (defective pixel detection). Then clear when done.
6.2.18 CameraConfig.radSWInfo
Type: UWord16
Size: 1 Word
Description: OEM radiometric software version ID of the loaded embedded application. Read only
data member.
6.2.19 CameraConfig.alarm
Type: UWord16
Size: 1 Word
Description: This member is divided into the following bit fields for alarm state monitoring and other
miscellaneous settings. Read only data member(s).
Overtemp Alarm State: (Bit 0) Current overtemp alarm state.
Overtemp Acknowledge Alarm State: (Bit 1) Camera software acknowledge.
Battery Level State: (Bit 2) Low battery state value.
Battery Level Acknowledge State: (Bit 3) Camera software acknowledge.
FPA TEC Disable State: (Bit 4) TEC disable state (due to over temp condition).
Reserved Bits: (Bits 5 – 15).
6.2.20 CameraConfig.calFlagRefs
Type: UWord16
Size: 1 Word
Description: Calibration flag ADC reference settings as copied from the active NUC mode. These
settings are used in subsequent calibrations that incorporate the internal calibration flag. The variable
is divided as follows. Read only data member.
Cold Reference Setting: (Bits 0 – 7)
Hot Reference Setting: (Bits 8 – 15)
6.2.21 CameraConfig.fpaInfo
Type: UWord16
Size: 1 Word
Description: This value is broken into FPA type and sub-type as configured by the manufacturer/OEM.
The value is read on boot from the DSP data flash and can be used by the host to configure host
application settings. The variable is divided as follows. Read only data member.
FPA Type Identifier: (Bits 0 – 3)
24
SERIAL INTERFACE DEVELOPERS GUIDE
FPA Sub-type Identifier: (Bits 4 – 7)
Range Reticle Enable: (Bit 8)
Reserved: (Bits 9 – 14)
Lock Memory Mirror Bit: (Bit 15)
The following enumerations are used for the type and subtype codes:
/* Fpa Type Enumerations */
enum
{
FPA_NONE = 0,
FPA_DRS_U3000A,
FPA_SOFRADIR,
/* No FPA */
/* Ulis */
FPA_RESERVED,
FPA_INDIGO_9705,
FPA_INDIGO_9809,
FPA_INDIGO_0202,
FPA_UNDEFINED
/* x to 15 Reserved */
};
/* Fpa Sub-Type Enumerations */
enum
{
FPA_9809_INSB = 0,
FPA_9809_INGAAS,
FPA_9809_UNDEFINED
};
6.2.22 CameraConfig.adcAFiltered[4]
Type: UWord16
Size: 4 Words
Description: Each word contains a filtered result of a corresponding ADC channel on the DSP. Read
only data member. These filtered values have been shifted up one bit location for precision/rounding
purposes. It is necessary to divide the value by 65535 to get a properly scaled value to use in
voltage/temperature equations.
Index [0]: DSP Channel A0
Index [1]: DSP Channel A1
Index [2]: DSP Channel A2
Index [3]: DSP Channel A3
6.2.23 CameraConfig.adcBFiltered[4]
Type: UWord16
Size: 4 Words
Description: Each word contains a filtered result of a corresponding ADC channel on the DSP. Read
only data member. These filtered values have been shifted up one bit location for precision/rounding
purposes. It is necessary to divide the value by 65535 to get a properly scaled value to use in
voltage/temperature equations.
Index [0]: DSP Channel B0
Index [1]: DSP Channel B1
Index [2]: DSP Channel B2
25
SERIAL INTERFACE DEVELOPERS GUIDE
Index [3]: DSP Channel B3
6.2.24 CameraConfig.btnPanel
Type: BTN_PANEL
/* Button Panel State Structure */
struct _BTN_PANEL
{
unsigned
menuUpdate:1;
/* Set if button was pressed and menu needs update.
Should only be set by Host and only cleared by camera. */
unsigned
actMenuID:7;
/* Active Menu or message ID from enumeration */
unsigned
unsigned
actCursor:4;
menuRows:4;
/* Current or active cursor location */
/* Number of rows in menu */
/***** Camera Only Access *****/
unsigned
unsigned
reservedA:1;
prevMenuID:7;
/* Previous Menu or message ID from enumeration */
unsigned
unsigned
unsigned
prevCursor:4;
execState:2;
reservedB:2;
/* Previous cursor location */
/* Execution state for main loop processing */
};
/* 2 Words */
typedef struct _BTN_PANEL
BTN_PANEL, *PTR_BTN_PANEL;
Size: 2 Words
Description: Structure that is modified by an attached custom button panel for menu control of
camera. Do not modify this data.
6.3 Dynamic Configuration Structure (NVM_GLOBAL_CFG)
The dynamic configuration structure is the first structure member included in the global configuration.
It contains settings that control the camera’s ‘look and feel’. Typical settings include selection of video
and overlay palettes, AGC mode, reticle position, and additional features. The type definition of the
structure is located in
X
Appendix A.
X
On boot - the structure is filled with data that is read back from a subset of the nonvolatile RAM on the
real time clock chip. This is the reason for the ‘NVM’ being a part of the member name. A complete
description of the contents of the nonvolatile RAM is located in
X
Appendix E.
X
During program flow the software will use the settings located in the NVM_GLOBAL_CFG structure to
control behavior. The host can read these settings to determine the existing state and then use the
‘McbWriteDataMem’ routine to change a setting.
The paragraphs below will provide information about each of the data members (excluding reserved
areas) in this structure.
6.3.1 nvmData.CamMode
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.2 nvmData.FpaMode
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E
X
for specifics on this value.
26
SERIAL INTERFACE DEVELOPERS GUIDE
6.3.3 nvmData.ActMode
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.4 nvmData.AutoNucData
Type: NVM_AUTO_NUC_MODE
/* Auto NUC Switch Parameters */
struct _NVM_AUTO_NUC_MODE
{
unsigned
unsigned
unsigned
LowSatInt:14;
ReservedA:2;
LowSatCount:16;
/* Auto NUC switch low saturation intensity */
/* Reserved */
/* Auto NUC switch low saturation count */
unsigned
unsigned
unsigned
HighSatInt:14;
ReservedB:2;
/* Auto NUC switch high saturation intensity */
/* Reserved */
HighSatCount:16; /* Auto NUC switch high saturation count */
};
typedef struct _NVM_AUTO_NUC_MODE
NVM_AUTO_NUC_MODE, *PTR_NVM_AUTO_NUC_MODE;
Size: 4 Words
Description: See
X
Appendix E for specifics on this value.
X
6.3.5 nvmData.AutoRfshTime
Type: UWord16
Size: 1 Word
Description: If the auto refresh time flag is enabled; then this value determines the time interval
between automatic 1-point NUC refresh calibrations. Counter is reset upon any 1-point NUC refresh
calibrations.
6.3.6 nvmData.AutoRfshTemp
Type: UWord16
Size: 1 Word
Description: If the auto refresh on temperature flag is enabled; then this value determines the
temperature delta required to perform an automatic 1-point NUC refresh calibrations. This value is
stored as an ADC count value. ADC count is saved upon any 1-point NUC refresh calibrations.
6.3.7 nvmData.ActPal
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.8 nvmData.OvlMode
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
27
SERIAL INTERFACE DEVELOPERS GUIDE
6.3.9 nvmData.RtclXPos
Type: NVM_RETICLE_POS
/* Reticle Position & Emissivity */
struct _NVM_RETICLE_POS
{
unsigned
unsigned
unsigned
unsigned
RtclHorPos:9;
Reserved:7;
RtclVerPos:8;
RtclEmiss:8;
/* Reticle Horizontal Position */
/* Reserved */
/* Reticle Vertical Position */
/* Reticle Emissivity */
};
typedef struct _NVM_RETICLE_POS NVM_RETICLE_POS, *PTR_NVM_RETICLE_POS;
Size: 2 Words
Description: Same for both A and B reticles. See
X
Appendix E for specifics on this value.
X
6.3.10 nvmData.RadMode
Type: UWord16
Size: 1 Word
Description: Bit 0 contains radiometric units (0 – Celsius, 1 – Fahrenheit).
6.3.11 nvmData.AgcMode
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.12 nvmData.ManualITT
Type: NVM_MANUAL_ITT
/* Display Video Brightness & Contrast Data */
struct _NVM_MANUAL_ITT
{
unsigned
unsigned
LowInt:14;
ReservedA:2;
/* Manual Low Intensity */
/* Reserved */
unsigned
unsigned
HighInt:14;
ReservedB:2;
/* Manual High Intensity */
/* Reserved */
};
typedef struct _NVM_MANUAL_ITT NVM_MANUAL_ITT, *PTR_NVM_MANUAL_ITT;
Size: 2 Words
Description: See
X
Appendix E for specifics on this value.
X
6.3.13 nvmData.AgcLimits
Type: NVM_AGC_LIMITS
/* AGC Intensity Limits */
struct _NVM_AGC_LIMITS
{
unsigned
unsigned
AgcLowLimit:14;
ReservedA:2;
/* AGC Low Limit Intensity */
/* Reserved */
unsigned
unsigned
AgcHighLimit:14; /* AGC High Limit Intensity */
ReservedB:2;
/* Reserved */
};
28
SERIAL INTERFACE DEVELOPERS GUIDE
typedef struct _NVM_AGC_LIMITS NVM_AGC_LIMITS, *PTR_NVM_AGC_LIMITS;
Size: 2 Words
Description: See
X
Appendix E for specifics on this value.
X
6.3.14 nvmData.LinearMap
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.15 nvmData.AgcBinLimit
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E for specifics on this value.
X
6.3.16 nvmData.ActZoneStat
Type: UWord16
Size: 1 Word
Description: Currently not used.
6.3.17 nvmData.VidScaleTemps
Type: NVM_VID_SCALE_TEMPS
/* Display Video Zero & Full Scale Temperatures (Addr: 100) */
struct _NVM_VID_SCALE_TEMPS
{
UWord16
UWord16
ZeroScaleTemp;
FullScaleTemp;
/* Display Video Zero Scale Temp */
/* Display Video Full Scale Temp */
};
typedef struct _NVM_VID_SCALE_TEMPS NVM_VID_SCALE_TEMPS, *PTR_NVM_VID_SCALE_TEMPS;
Size: 2 Words
Description: See
X
Appendix E for specifics on this value.
X
6.3.18 nvmData.ImageParams
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E
X
for specifics on this value.
6.3.19 nvmData.LensID
Type: UWord16
Size: 1 Word
Description: See
X
Appendix E
X
for specifics on this value.
Note: a change to the NVM_GLOBAL_CFG structure is only temporary. If the host wants that setting
to be permanent (occur after next power on/reset), it is also necessary to set the ‘updateNVM’ flag.
This tells the software to save the NVM_GLOBAL_CFG data to nonvolatile RAM at the next available
29
SERIAL INTERFACE DEVELOPERS GUIDE
opportunity. In other words if the host intends on changing the current AGC mode and have that
mode restored on subsequent boots – then two writes are required. The first to change the global
data structure and then a second to force an update of the nonvolatile RAM.
6.4 Process Code Detection (CAMERA_STATUS)
During various routines, during normal operation, the embedded software will set a process codes.
This code can be read by the host application to indicate why a camera may not be responding as
desired. For example when the host requests a change in operational modes that triggers a change in
the TEC setting, the camera may delay (freeze) for a minute or two while the TEC is allowed to
stabilize. The code is located in the ‘ProcessCode’ member of the CAMERA_STATUS data structure.
The current process codes are listed below.
/* Process Code Enumerations */
enum
{
PRC_UNDETERMINED = 0,
PRC_FPGA_TESTS,
PRC_OP_TESTS,
PRC_MEM_TESTS,
PRC_VIDENC_TESTS,
PRC_TEC_STABILIZING,
PRC_CAM_READY
};
6.5 Progress Code Detection (CAMERA_STATUS)
As the embedded software initializes hardware, performs built-in tests, and then enters the main
operational loop, it sets progress codes. Reading the codes allows the host to detect the software’s
progress towards start of normal operation. The code is located in the ‘ProgressCode’ member of the
CAMERA_STATUS data structure.
The current progress codes are listed below.
/* Progress Code Enumerations */
enum
{
UNDETERMINED = 0,
UNCONFIGURED_CONTROLLER,
FAULT_DETECTED,
MAIN_START,
DRIVERS_INITIALIZED,
GLOBALS_INITIALIZED,
SYSTEM_RESET,
BOARD_ID_CONFIRM,
FPGA_PROGRAMMED,
FPGA_REGISTER_TEST,
CAMERA_OP_TEST_SETUP,
INIT_FPA_SUPPORT_PWR,
TEC_DRIVE_INITIALIZED,
SYSTEM_TESTS_COMPLETE,
CAL_FLAG_INITIALIZED,
ENTERING_MAIN_LOOP,
PALETTES_LOADED,
OP_MODE_LOADED,
OVERLAY_INITIALIZED,
TEC_STABILIZED,
CAMERA_READY
};
It is not required to take any action when reading these values but the host should not begin intensive
communications with the camera until it has detected the CAMERA_READY progress code. This
code is set just before entering the main processing loop (normal operation).
30
SERIAL INTERFACE DEVELOPERS GUIDE
It is also recommended that the host check regularly (including the boot sequence) for the
UNCONFIGURED_CONTROLLER and the FAULT_DETECTED codes.
The FAULT_DETECTED code is set by the embedded application when a built-in test fails or when a
mismatch between the configured hardware and detected hardware occurs. The embedded software
will jump to an idle loop to give the host a chance to read error data (see paragraph
X
6.6
X
) and then set
the continue flag (structure member ‘continueFlag’, paragraph
and will automatically return after time expires.
X
6.2.3
X
). This idle routine has a timeout
The UNCONFIGURED_CONTROLLER code is set by the embedded application when it detects
erased product ID’s, missing Xilinx FPGA configuration files, or an error programming the FPGA
occurs. The embedded software will jump to an idle loop to give the host an opportunity to configure
the controller (load product ID’s, upload a Xilinx FPGA configuration file). This routine can not be
exited, a power on/reset is required to return to normal operation.
6.6 Error Code Detection (CAMERA_ERRORS)
During the boot process several checks are made of the hardware. If a fault is detected then an error
code is set along with any additional error data using the CAMERA_ERRORS data structure (see
paragraph
X
6.2.5). Once the error data has been logged the code jumps to an idle state routine.
X
Inside this routine the global configuration member progress code (paragraph
FAULT_DETECTED and a timer is started.
X
6.2.5) is set to
X
While in this idle state the host has the opportunity to determine that a fault has occurred, read the
error information and then set the continue flag (see paragraph 6.2.3). If the host does not
X
X
acknowledge the error and the timer expires the code will continue operation. It should be noted that it
may take a significantly longer time to boot if errors are present and the host does not acknowledge
them appropriately.
The following is a list of possible error codes.
/* Camera Error Codes */
#define ERR_NONE
#define ERR_PC_MSTR
#define ERR_FPGA_LOAD
#define ERR_FPGA_TEST
#define ERR_MEM_TEST
#define ERR_VID_ENCODER
#define ERR_FORCE_ZERO
#define ERR_FORCE_ONE
#define ERR_FORCE_COUNT
#define ERR_HISTO_GRAB
#define ERR_GAIN_OFFSET
#define ERR_FORCE_COUNT_COADD
#define ERR_CONFIG_MISMATCH
#define ERR_NUC_FLASH_PARAM
#define ERR_TEST_SKIPPED
0x0000
0x8001
0x8002
0x8003
0x8004
0x8005
0x8006
0x8007
0x8008
0x8009
0x800A
0x800B
0x800C
0x800D
0x8FFF
6.6.1 Configuration ID Error
This check is of the configuration ID’s stored in flash versus the ID’s read back via the ADC.
Data from CameraConfig.camErrors:
ErrorCode: ERR_CONFIG_MISMATCH define.
ErrorSubCode: a more specific description of the error from the following enumeration.
/* Cfg Board ID Error SubCodes (#define ERR_CONFIG_MISMATCH 0x800C) */
enum
{
ERR_LENS_MISMATCH = 1,
ERR_FPA_SPRT_BD_MISMATCH,
ERR_FPA_MISMATCH,
ERR_CAM_CTRL_BD_MISMATCH,
31
SERIAL INTERFACE DEVELOPERS GUIDE
ERR_CAM_SPRT_BD_MISMATCH,
ERR_SUBCODE_UNDEFINED
};
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value stored in configuration flash.
ErrorData [1] Value read from the ADC.
ErrorData [2] – [4] Not used.
6.6.2 FPGA Load
This error is set during the configuration of the Xilinx FPGA.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FPGA_LOAD define.
ErrorSubCode: a more specific description of the error from the following enumeration.
/* FPGA Load Error SubCodes (#define ERR_FPGA_LOAD 0x8002) */
enum
{
ERR_FPGA_LOAD_UNDEFINED = 0,
ERR_FPGA_NOT_DONE
};
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] – [4] Not used.
6.6.3 FPGA Test
This error is set during the testing of the Xilinx FPGA registers.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FPGA_TEST define.
ErrorSubCode: a more specific description of the error from the following enumeration.
/* FPGA Test Error SubCodes (#define ERR_FPGA_TEST 0x8003) */
enum
{
ERR_FPGA_TEST_UNDEFINED = 0,
ERR_WALKING_0_1,
ERR_CROSSTALK,
ERR_FPGA_MEMORY
};
ErrorCount: a count of the total number of errors since boot.
For SubCode ERR_WALKING_0_1:
ErrorData [0] Output pattern.
ErrorData [1] Register value read back.
ErrorData [2] Register test mask.
ErrorData [3] Address of register under test.
ErrorData [4] Not used.
32
SERIAL INTERFACE DEVELOPERS GUIDE
For SubCode ERR_CROSSTALK:
ErrorData [0] Address of register being written to.
ErrorData [1] Address of register being tested for crosstalk.
ErrorData [2] Crosstalk register value.
ErrorData [3] Cross talk register test mask.
ErrorData [4] Not used.
For SubCode ERR_FPGA_MEMORY:
ErrorData [0] Value expected.
ErrorData [1] Value read from memory.
ErrorData [2] Test mask.
ErrorData [3] Memory address.
ErrorData [4] Not used.
6.6.4 Memory Test
This error is set during the testing of the controller utility memory.
Data from CameraConfig.camErrors:
ErrorCode: ERR_MEM_TEST define.
ErrorSubCode: a more specific description of the error from the following enumeration.
/* FPGA Test Error SubCodes (#define ERR_MEM_TEST 0x8004) */
enum
{
ERR_MEM_TEST_UNDEFINED = 0,
ERR_UTIL_RAMP_MAR_A,
ERR_UTIL_ZERO_MAR_A,
ERR_UTIL_RAMP_MAR_B,
ERR_UTIL_ZERO_MAR_B
};
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected.
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.5 Force ‘0’ Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FORCE_ZERO define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected (0x0000).
33
SERIAL INTERFACE DEVELOPERS GUIDE
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.6 Force ‘1’ Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FORCE_ONE define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected (0x2000).
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.7 Force Count Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FORCE_COUNT define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected.
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.8 Force Count Coadd Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_FORCE_COADD define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected.
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
34
SERIAL INTERFACE DEVELOPERS GUIDE
ErrorData [4] Upper 16 bits of memory address.
6.6.9 Histogram Data Grab Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_HISTO_GRAB define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected.
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.10 NUC Gain and Offset Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_GAIN_OFFSET define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value expected.
ErrorData [1] Value read back.
ErrorData [2] Test mask.
ErrorData [3] Lower 16 bits of memory address.
ErrorData [4] Upper 16 bits of memory address.
6.6.11 Video Encoder Test
This error is set during operational tests.
Data from CameraConfig.camErrors:
ErrorCode: ERR_VID_ENCODER define.
ErrorSubCode: No subcode.
ErrorCount: a count of the total number of errors since boot.
ErrorData [0] Value output to encoder.
ErrorData [1] Value read back from encoder.
ErrorData [2] Test mask.
ErrorData [3] – [4] Not used.
35
SERIAL INTERFACE DEVELOPERS GUIDE
6.7 Command Polling
During normal operation of the embedded application, a poll is done to check for user defined
commands that have been issued by the host. When a command is detected the appropriate action is
taken. Once the action is completed the command status is either reset or set to a status (see list
below) to let the host know that it can proceed with the task at hand.
/* PC Master Command Code Response Enumerations */
enum
{
CMDST_OK = 1,
CMDST_SFLASH_PAGE_READY,
CMDST_SFLASH_NOT_ERASED,
CMDST_INVALID_PARAMETER,
CMDST_X_DATA_READY,
CMDST_P_DATA_READY,
CMDST_XFLASH_RW_ERROR,
CMDST_PFLASH_RW_ERROR,
CMDST_NUC_FLASH_BUSY,
CMDST_INVALID_PIN,
CMDST_MEMORY_LOCKED,
CMDST_TIMEOUT,
CMDST_UNDEFINED
};
The use of a command status other than CMDST_OK is typically used for providing the host with an
indication of the result of the latest command. For example, when reading a page of serial data flash,
two commands are required. The first would be CMD_COPY_SFLASH_PAGE, which reads the data
from flash, places the data in the scratch pad buffer, and then sets the command status to
CMDST_SFLASH_PAGE_READY. When the host sees that the data is available (using the
McbGetAppCmdStatus routine), it can execute a McbReadDataMem command to retrieve that data.
As long as the return status is not MCB_APPCMDRESULT_RUNNING a command may be issued to
the camera.
6.8 Access to DSP Peripheral Registers (ArchIO)
The DSP peripheral registers are mapped into data memory space. These registers can be read from
or written to using the standard ‘McbReadDataMem/McbWriteDataMem’ functions. Since the
embedded application has built in drivers controlling the enabled peripherals, it is not recommended
that the host application modifies any of these registers. It can be useful though to read various
registers directly once the embedded application has initialized the peripherals. For example by
reading the memory at the proper address, all of the current ADC count results can be obtained.
Using the proper equations, these values can be converted to temperatures for the user application.
Information on these registers can be obtained in the Motorola DSP56F80X User’s Manual
(DSP56F801-7UM/D).
The base register is mapped to memory address location 0x1000.
6.9 Access to Xilinx FPGA Registers (FpgaIO)
The Xilinx FPGA registers are mapped into DSP external memory data space. The data structure (or
register map) is shown in
X
Appendix B. These registers can be read from or written to using the
X
standard ‘McbReadDataMem/McbWriteDataMem’ functions, although it is not recommended that
these registers are written to unless the user fully understands the results of the register modification.
•
•
The base register is mapped to address location 0x4000.
The registers are only available after the FPGA has been configured by embedded
application.
36
SERIAL INTERFACE DEVELOPERS GUIDE
There are only a couple of registers that the host will typically modify. They are listed in the following
paragraphs.
6.9.1 FPA Processor Operational Control Register Low
Address: 0x4000
Bit 0 (Unit Gain): 0 – Use NUC Coefficient Memory Gain; 1 – Force NUC Gain to Unity (1.0)
Bit 1 (Zero Ofst): 0 – Use NUC Coefficient Memory Offset; 1 – Force NUC Offset to Zero
Bit 2 (Zero Rf Ofst): 0 – Use Utility Memory NUC Refresh Offset Coefficient; 1 – Force NUC Refresh
Offset to Zero
Bit 3 (Zero Px Rpl): 0 – Use NUC Coefficient Memory Pixel Replace Address; 1 – Force Defective
Pixels to Zero
Bit 4 (Cam Pwr Dwn): 0 – Normal Camera Operation; 1 – Force Camera Timing into Power Down
State (Set on power down detect interrupt)
Bit 6 (Act Itt Sel): 0 – Low ITT Applied to FPA Video; 1 – High ITT Applied to FPA Video
Bit 8 (Dspl Act): 0 – Blank FPA Image on Display; 1 – Enable FPA Image on Display
Bit 9 (Dspl Frz Mod): 0 – Normal (Live) FPA Image on Display; 1 –Freeze FPA Image on Display
(Previously Captured in Image Grab Buffer B)
Bit 10 (Dspl Zm Mod): 0 – 1X FPA Image on Display; 1 –2X FPA Image on Display
Bits 11-12 (Dspl Byte Sel): 0 – ITT/FB Bits 7:0 Displayed; 1 – ITT/FB Bits 15:8 Displayed; 2 – FB Bits
17:10 Displayed (when in Freeze Mode); 3 - Reserved
Bit 13 (Ovl Act): 0 – Disable Overlays on Display; 1 – Enable Overlays on Display
Bit 15 (Pfv Act): 0 – Disable Processed FPA Video Port Signals; 1 – Enable Processed FPA Video
Port Signals
6.9.2 FPA Processor Operational Control Register High
Address: 0x4001
Bit 0 (DFld Intr En): 0 – Disable Display Field Interrupt; 1 – Enable Display Field Interrupt
Bit 1 (FFrm Intr En): 0 – Disable FPA Frame Interrupt; 1 – Enable FPA Frame Interrupt
Bits 4-5 (EC Mem Dev Acc): 0 – No Memory Access; 1 - Instrumentation Header Memory Access; 2
– Color Palette Y Access; 3 – Color Palette Cr/Cb Access
Bits 8-9 (Tst Mux Sel): Test Mux Select: 0 – Digital FPA Video (Normal Operation); 1 – Test Count; 2
– Force 0; 3 – Force 1 (0x2000)
Bit 15 (Pfv FCnt En): 0 – Disable Processed FPA Video Frame Counter (Force to Zero); 1 – Enable
Processed FPA Video Frame Counter
6.9.3 FPA Processor User Mode Control Register
Address: 0x4002
Bits 0-1 (Mstr Sync Mod): 0 – Internal (Use Programmable Sync Generator); 1 – Reserved; 2 –
External (Field Toggle); 3 – External (Field Coherent)
Bit 6 (Dspl Vid Pol): 0 – Normal (“White Hot”); 1 – Inverted (“Black Hot”)
Bit 7 (Clr Bar En): 0 – Disable Display Color Bar; 1 – Enable Display Color Bar
Bit 8 (Clr Plt Y Sel): 0 – Low Byte of Color Palette Displayed (Normal Mode); 1 – High Byte of Color
Palette Displayed (Gamma Corrected)
37
SERIAL INTERFACE DEVELOPERS GUIDE
Bits 10-11 (Pfv Src Sel): Processed FPA Video Source Select: 0 – Digital FPA Video; 1 – NUC
Corrected Video; 2 – Pixel Replaced Video; 3 – ITT Video
6.9.4 ATC Offset Coefficient Register
Address: 0x4007
16-Bit Signed Constant Added to Output of NUC Circuit (Prior to NUC Refresh)
-16,384 <= Atc Ofst <= 16,383.5
6.10 Access to Serial Data Flash
The Atmel serial data flash chip has 4096 pages of storage each with 264 bytes. The pages have
been allocated as follows for the embedded application.
U
Page(s)
U
U
Allocated Use
0 - 7
Reserved
8 - 23
24 - 87
Op Mode Descriptor Tables (16x)
NUC Mode Descriptor Tables (64x)
Reserved
88 - 127
128 - 159
160 - 190
191
Zone Statistic Descriptor Tables (32x) (Currently not used)
Reserved
Overlay Palettes (8x)
192 - 223
224 - 255
256 - 319
320 - 511
512 - 1145
1146 - 1535
1536 - 2175
2176 - 2815
2816 - 3455
3456 - 4095
Color Palette Y Tables (16x)
Color Palette Cr/Cb Tables (16x)
User Defect Pixel Lists (64x) (Currently not used)
Reserved
FPA Processor FPGA Configuration File
Expansion FPGA Configuration File
Stored Image 0 (Currently not used)
Stored Image 1 (Currently not used)
Stored Image 2 (Currently not used)
Stored Image 3 (Currently not used)
The host can read/write to these locations through the use of the CMD_COPY_SFLASH_PAGE,
CMD_PROG_SFLASH_FULL, CMD_PROG_SFLASH_PARTIAL commands. These commands are
implemented in Lumitron’s host applications to load palettes, FPGA configuration files, operational
mode descriptors, and NUC mode descriptors.
7 Remote Calibration Process
The process to complete a non-uniformity calibration is initiated with a Lumitron defined command.
After the calibration command has been issued, the embedded application communicates with the
host based on the state of the “CameraConfig.camStats.HostStatusCode” global structure member.
This variable, hereafter referred to as status code, has its state set by either the embedded application
or the host application depending upon the next step in the process.
Status codes that are used in the calibration or defective pixel detection process are as follows:
38
SERIAL INTERFACE DEVELOPERS GUIDE
/* Calibration and Defect Communication Status Enumerations */
enum
{
HOST_READY = 0xFFFF,
BEGIN_PROCESS = 0,
CAL_PLACE_COLD_REF,
CAL_COLD_REF_IN_PLACE,
CAL_PLACE_HOT_REF,
CAL_HOT_REF_IN_PLACE,
CAL_DELTA_TOO_SMALL,
CAL_COMPLETED,
CAL_CALC_COEFFICIENTS,
DEFECT_TOO_MANY,
DEFECT_ERASE_FLASH,
DEFECT_ERASE_ACK,
DEFECT_COMPLETED,
UNIFORMITY_TEST_IN_PROGRESS,
NUC_FLASH_PROGRAMMED,
HOST_UNDEFINED
};
7.1 One Point Refresh Calibration (Internal Flag):
(A)
T
Send
T
CMD_ONE_PT_REFRESH
T
command with argument for using internal calibration flag.
(B)
T
Embedded application will set the
T
status code to BEGIN_PROCESS, and then begin execution of
the calibration.
T
(C) Host may monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_COMPLETED.
(D) Calibration is complete
7.2 One Point Refresh Calibration (External Flag):
(A) Send CMD_ONE_PT_REFRESH command with argument for using external calibration flag.
(B) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the calibration.
(C) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_PLACE_COLD_REF.
(D) Host/User automatically or manually places the cold reference in the sensor field of view.
(E) Host application sets the status code to CAL_COLD_REF_IN_PLACE.
(F) Host will monitor the status code data member until it is set by the embedded application to
CAL_CALC_COEFFICIENTS or CAL_COMPLETED.
(G) The host/user may now remove the cold reference if desired.
(H) Calibration is complete
7.3 One Point Update Calibration (Internal Flag):
(A) Send CMD_ONE_PT_UPDATE command with argument for using internal calibration flag.
(B) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the calibration.
(C) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_COMPLETED.
(D) Read the “CameraConfig.camStats.HostData” member to retrieve number of defects if desired.
39
SERIAL INTERFACE DEVELOPERS GUIDE
(E) Calibration is complete.
7.4 One Point Update Calibration (External Flag):
(A) Send CMD_ONE_PT_UPDATE command with argument for using external calibration flag.
(B) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the calibration.
(C) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_PLACE_COLD_REF.
(D) Host/User automatically or manually places the cold reference in the sensor field of view.
(E) Host application sets the status code to CAL_COLD_REF_IN_PLACE.
(F) Host will monitor the status code data member until it is set by the embedded application to
CAL_CALC_COEFFICIENTS.
(G) The host/user may now remove the cold reference if desired.
(H) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_COMPLETED.
(I) Read the “CameraConfig.camStats.HostData” member to retrieve number of defects if desired.
(J) Calibration is complete.
7.5 Two Point Calibration (Internal Flags):
(A) Send CMD_TWO_PT_NUC command with argument for using internal calibration flags.
(B) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the calibration.
(C) Host will monitor the status code data member until it is set by the embedded application to
CAL_CALC_COEFFICIENTS or CAL_DELTA_TOO_SMALL. If the CAL_DELTA_TOO_SMALL
code is received then the embedded application has aborted the calibration.
(D) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_COMPLETED.
(E) Read the “CameraConfig.camStats.HostData” member to retrieve number of defects if desired.
(F) Calibration is complete.
7.6 Two Point Calibration (External Flags):
(G) Send CMD_TWO_PT_NUC command with argument for using external calibration flags.
(H) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the calibration.
(I) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_PLACE_COLD_REF.
(J) Host/User automatically or manually places the cold reference in the sensor field of view.
(K) Host application sets the status code to CAL_COLD_REF_IN_PLACE.
(L) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_PLACE_HOT_REF.
(M) Host/User automatically or manually places the hot reference in the sensor field of view.
(N) Host application sets the status code to CAL_HOT_REF_IN_PLACE
40
SERIAL INTERFACE DEVELOPERS GUIDE
(O) Host will monitor the status code data member until it is set by the embedded application to
CAL_CALC_COEFFICIENTS or CAL_DELTA_TOO_SMALL. If the CAL_DELTA_TOO_SMALL
code is received then the embedded application has aborted the calibration.
(P) The host/user may now remove the hot reference if desired.
(Q) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to CAL_COMPLETED.
(R) Read the “CameraConfig.camStats.HostData” member to retrieve number of defects if desired.
(S) Calibration is complete.
7.7 Defective Pixel Detection
Lumitron has removed the automatic detection feature from the camera. Defective pixels are now
solely identified through calibrations and external operations defined by the user.
7.8 User Defined Defective Pixel Map
This process can be followed to supply a user defined defective pixel map to the active NUC table. It
assumes the host already has created a defective pixel map of the entire array. The pixels will marked
as defective in the active NUC table, which will be erased in the process. A 2-point calibration is
required after this process is complete.
(A) Disable the automatic NUC refresh operation by setting BIT-15 of the camera configuration
bitFieldIndex member.
(B) Using the ‘McbWriteDataMem’ command - write a portion of the map to the scratch pad buffer.
Remember it is sized at 160 words.
(C) Send the CMD_WRITE_UTILITY_MEMORY command with the proper address offset (base is
MAR_IMAGE_GRAB_B) and data size (see paragraph
scratch pad to the Xilinx utility memory.
X
5.3.43) to move the data from the DSP
X
(D) Repeat steps (B) and (C) until the entire map is loaded to utility memory.
(A) Send CMD_ADV_DETECT_BAD_PIXELS command (no arguments).
(B) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the routine.
(C) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to DEFECT_ERASE_FLASH.
(D) If DEFECT_ERASE_FLASH status is detected then the embedded application needs to know
whether the host wants the NUC flash erased or not.
(E) Host needs to set the “CameraConfig.camStats.HostData” member to 0xFFFF for erase flash or to
0x0000 to skip the erase process and exit.
(F) Host application sets the status code to DEFECT_ERASE_ACK.
(G) Host will monitor the status code data member until it is set by the embedded application to
DEFECT_COMPLETED.
(H) Re-enable automatic NUC refresh bit.
(I) The user defective map now exists in the active NUC flash and is ready for a two point calibration.
7.9 Upload NUC Table from Host
This process can be followed to supply a host created set of NUC coefficients to the desired table
index. It assumes the host already has created the offsets, gains, and replacement index (if needed)
41
SERIAL INTERFACE DEVELOPERS GUIDE
for each pixel in the entire array. The NUC data will also need to be formatted for use in the hardware
(see
X
Appendix F
X
). It will also be necessary to save NUC mode data to serial data flash that
corresponds to the uploaded NUC data (see paragraph
X
5.3.2 for further details).
X
(A) Disable the automatic NUC refresh operation by setting BIT-15 of the camera configuration
bitFieldIndex member.
(B) Set up for the first pass (gain terms only).
(C) Using the ‘McbWriteDataMem’ command - write a portion of the gain coefficients to the scratch
pad buffer. Remember it is sized at 160 words.
(D) Send the CMD_WRITE_UTILITY_MEMORY command with the proper address offset (base is
MAR_IMAGE_GRAB_B) and data size (see paragraph
scratch pad to the Xilinx utility memory.
X
5.3.43) to move the data from the DSP
X
(E) Repeat steps (C) and (D) until the entire set of gain coefficients is loaded contiguously to utility
memory.
(F) Send CMD_UPLOAD_NUC command with the arguments set for ‘gain terms’ and desired NUC
base.
(G) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the routine.
(H) The entire NUC Flash block is erased on the upload of gain terms only, which is why they are
uploaded first.
(I) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to NUC_FLASH_PROGRAMMED or HOST_READY.
(J) Set up for the second pass (offset terms only).
(K) Using the ‘McbWriteDataMem’ command - write a portion of the offset coefficients to the scratch
pad buffer. Remember it is sized at 160 words.
(L) Send the CMD_WRITE_UTILITY_MEMORY command with the proper address offset (base is
MAR_IMAGE_GRAB_B) and data size (see paragraph
scratch pad to the Xilinx utility memory.
X
5.3.43) to move the data from the DSP
X
(M) Repeat steps (K) and (L) until the entire set of offset coefficients is loaded to utility memory.
(N) Send CMD_UPLOAD_NUC command with the arguments for ‘offset terms’ and desired NUC
base.
(O) Embedded application will set the status code to BEGIN_PROCESS, and then begin execution of
the routine.
(P) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to NUC_FLASH_PROGRAMMED or HOST_READY.
(Q) Re-enable automatic NUC refresh bit.
(R) The host supplied NUC coefficient set now exists in the desired NUC flash table and is ready for
use.
7.10 Download NUC Table to Host
This process can be followed to retrieve a set of NUC coefficients from the camera at the desired table
index. It assumes the host already has created a buffer for the storage of the coefficients. The NUC
data will be read in a form that is formatted for use in the camera hardware (see
host may need to perform casting/conversion before using it locally.
X
Appendix F), so the
X
(A) Set up for the first pass (gain terms only).
42
SERIAL INTERFACE DEVELOPERS GUIDE
(B) Send CMD_DOWNLOAD_NUC command with the arguments set for ‘gain terms’ and desired
NUC base. This will instruct the camera to read the NUC flash and store the gain terms in utility
memory (at base of MAR_IMAGE_GRAB_B).
(C) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to HOST_READY.
(D) Send the CMD_READ_UTILITY_MEMORY command with the proper address offset (base is
MAR_IMAGE_GRAB_B) and data size (see paragraph
utility memory to the DSP scratch pad memory area.
X
5.3.15) to move the data from the Xilinx
X
(E) Using the ‘McbReadDataMem’ command - read a portion of the gain coefficients to the scratch
pad buffer. Remember it is sized at 160 words.
(F) Repeat steps (D) and (E) until the entire set of gain coefficients is downloaded to local host
memory.
(G) Set up for the second pass (offset terms only).
(H) Send CMD_DOWNLOAD_NUC command with the arguments set for ‘offset terms’ and desired
NUC base. This will instruct the camera to read the NUC flash and store the offset terms in utility
memory (at base of MAR_IMAGE_GRAB_B).
(I) Host will monitor (periodically read) the status code data member until it is set by the embedded
application to HOST_READY.
(J) Send the CMD_READ_UTILITY_MEMORY command with the proper address offset (base is
MAR_IMAGE_GRAB_B) and data size (see paragraph
utility memory to the DSP scratch pad memory area.
X
5.3.15) to move the data from the Xilinx
X
(K) Using the ‘McbReadDataMem’ command - read a portion of the offset coefficients to the scratch
pad buffer. Remember it is sized at 160 words.
(L) Repeat steps (J) and (K) until the entire set of offset coefficients is downloaded to local host
memory.
(M) The host now has a local copy of the desired NUC flash table.
43
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix A - Camera Configuration Data Structures
/*
Current Camera Configuration Information Structure:
This structure will contain information about the camera that will be useful for standard
operation as well as for the remote user to have access. Therefore this data structure is fixed
in memory so that the info is always available via PCMaster.
*/
struct _CAMERA_CONFIG
{
/* NVM Config Data for Global Access */
NVM_GLOBAL_CFG
nvmData;
/* 40 Words */
/* 1 Word */
/* NVM Data Update Flag */
UWord16 updateNVM;
/* Debug Values for Development Platform */
UWord16
UWord16
continueFlag;
CmdsReceived;
/* 1 Word */
/* 1 Word */
/* Camera Status Codes */
CAMERA_STATUS camStats;
/* 4 Words */
/* 8 Words */
/* 7 Words */
/* Camera Error Codes */
CAMERA_ERRORS
camErrors;
/* Current camera time */
RTC_DATA
camTime;
/* Mirror of Output Port Expansion Register */
UWord16 expPort;
/* 1 Word */
/* 1 Word */
/* 1 Word */
/* 2 Words */
/* 2 Words */
/* Software Version */
UWord16
swVersion;
/* Software Build */
UWord16
swBuild;
/* FPGA Proc Version */
UWord16
fpgaVersion[2];
/* FPA Dimensions */
IMAGE_SIZE
fpaSize;
/* Global AGC Parameters */
UWord16
UWord16
agcLowIntensity;
agcHighIntensity;
/* 1 Word */
/* 1 Word */
/* Op Mode Name */
UWord16
actOpName[4];
/* 4 Words */
/* 4 Words */
/* Nuc Mode Name */
UWord16
actNucName[4];
/* Misc Index Values */
UWord16
bitFieldIndex;
/* 1 Word */
// fanSpeedIndex:3;
// baseNuc:6;
// limitNuc:6;
// noRefresh:1;
/* Fan Speed Index, (Bits 0 - 2) */
/* Base NUC table, (Bits 3 - 8) */
/* Limit NUC table, (Bits 9 - 14) */
/* Lock out refresh, (Bit 15) */
/* Radiometric Softwre Data */
UWord16 radSWInfo;
/* 1 Word */
/* 1 Word */
/* Camera alarm state info data */
UWord16 alarm;
44
SERIAL INTERFACE DEVELOPERS GUIDE
/* Cal-flag Settings data */
UWord16
calFlagRefs;
/* 1 Word */
// coldRef:8;
// hotRef:8;
/* Cold Ref Setting, (Bits 0 - 7) */
/* Hot Ref Setting, (Bits 8 - 15) */
/* FPA Type Information */
UWord16
fpaInfo;
/* 1 Word */
// fpaType:4;
// fpaSubType:4;
// retRangeEn:1;
// notUsed:6;
// lockMemMirror:1;
/* FPA Type Identifier (Bits 0 - 3) */
/* FPA Sub-Type Identifier (Bits 4 - 7) */
/* Ranging Reticle Enable (Bit 8) */
/* Currently not used (Bits 9 - 14) */
/* Set if memory unlocked (Bit 15) */
/* Filtered ADC Chnl A Result Values (A0, A1, A2, A3) */
UWord16 adcAFiltered[4]; // 4 Words
/* Filtered ADC Chnl B Result Values (B0, B1, B2, B3) */
UWord16
adcBFiltered[4];
// 4 Words
// 2 Words
/* Current Button Panel Status */
BTN_PANEL btnPanel;
};
typedef struct _CAMERA_CONFIG CAMERA_CONFIG, *PTR_CAMERA_CONFIG;
45
SERIAL INTERFACE DEVELOPERS GUIDE
/*
Partial Camera Dynamic Configuration Info Structure – matches what is stored in global memory.
*/
struct _NVM_GLOBAL_CFG
{
UWord16
UWord16
CamMode;
FpaMode;
/* Cast to/from NVM_CAM_MODE */
/* Cast to/from NVM_FPA_PROC_MODE */
UWord16
UWord16
UWord16
ReserveA;
ActMode;
ReserveB;
/* Reserved */
/* Cast to/from NVM_AUTO_NUC_MODE */
/* Reserved */
NVM_AUTO_NUC_MODE AutoNucData;
/* See Struct Above */
UWord16
UWord16
AutoRfshTime;
AutoRfshTemp;
/* Automatic calibration time period */
/* Automatic calibration temp delta (counts) */
UWord16
ReserveC[2];
/* Reserved */
UWord16
UWord16
ActPal;
OvlMode;
/* Cast to/from NVM_ACT_PAL */
/* Cast to/from NVM_OVL_MODE */
NVM_RETICLE_POS
NVM_RETICLE_POS
RtclAPos;
RtclBPos;
/* See Struct Above */
/* See Struct Above */
UWord16
UWord16
UWord16
RadMode;
AgcMode;
ReserveE;
/* Cast to/from RAD_MODE */
/* Cast to/from NVM_AGC_MODE */
/* Reserved */
NVM_MANUAL_ITT
NVM_AGC_LIMITS
ManualITT; /* See Struct Above */
AgcLimits; /* See Struct Above */
UWord16
UWord16
UWord16
UWord16
LinearMap;
AgcBinLimit;
/* Cast to/from LINEAR_MAP */
/* AGC Bin Limit Value */
/* Reserved */
ReserveF[4];
ActZoneStat;
/* Cast to/from NVM_ACT_ZONE_STATS */
NVM_VID_SCALE_TEMPS
VidScaleTemps;
/* See Struct Above */
/* Cast to/from NVM_IMG_PARAMS */
/* Cast to/from NVM_LENS_ID */
/* Reserved */
UWord16
UWord16
UWord16
ImageParams;
LensID;
ReserveG[3];
};
typedef struct _NVM_GLOBAL_CFG NVM_GLOBAL_CFG, *PTR_NVM_GLOBAL_CFG;
46
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix B - Xilinx Register/Data Structure
/* Xilinx FPGA Register Map Structure */
typedef struct
{
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
OpCtrlRegLo;
OpCtrlRegHi;
UserCtrlReg;
StaticCtrlReg;
ImgHistoGrabReg;
InterruptReg;
Spare0Reg;
AtcOffsetCoefReg;
Reserved0[8];
/* Map to 0x4X00 */
/* Map to 0x4X01 */
/* Map to 0x4X02 */
/* Map to 0x4X03 */
/* Map to 0x4X04 */
/* Map to 0x4X05 */
/* Map to 0x4X06 */
/* Map to 0x4X07 */
/* Map to 0x4X08 - 0x4X0F */
UWord16
Reserved1[16];
/* Map to 0x4X10 - 0x4X1F */
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
ProgSyncRegLo;
ProgSyncRegHi;
/* Map to 0x4X20 */
/* Map to 0x4X21 */
/* Map to 0x4X22 */
/* Map to 0x4X23 */
/* Map to 0x4X24 */
/* Map to 0x4X25 */
/* Map to 0x4X26 */
/* Map to 0x4X27 */
/* Map to 0x4X28 */
/* Map to 0x4X29 */
/* Map to 0x4X2A */
/* Map to 0x4X2B */
/* Map to 0x4X2C */
/* Map to 0x4X2D */
/* Map to 0x4X2E */
/* Map to 0x4X2F */
DspHorCntPreReg;
DspHorImgStartReg;
DspHorImgStopReg;
DspVerCntPreReg;
DspVerImgStartReg;
DspVerImgStopReg;
FpaSyncDlyRegLo;
FpaSyncDlyRegHi;
FpaHorStartReg;
FpaHorStopReg;
FpaHorTermCntReg;
FpaVerStartReg;
FpaVerStopReg;
FpaVerTermCntReg;
UWord16
UWord16
UWord16
UWord16
UWord16
FpaHorRoiStartReg;
FpaHorRoiStopReg;
FpaVerRoiStartReg;
FpaVerRoiStopReg;
Reserved2[12];
/* Map to 0x4X30 */
/* Map to 0x4X31 */
/* Map to 0x4X32 */
/* Map to 0x4X33 */
/* Map to 0x4X34 - 0x4X3F */
UWord16
UWord16
UWord16
Reserved3[16];
Reserved4[16];
Reserved5[16];
/* Map to 0x4X40 - 0x4X4F */
/* Map to 0x4X50 - 0x4X5F */
/* Map to 0x4X60 - 0x4X6F */
UWord16
UWord16
FpgaProgReg;
Reserved6[15];
/* Map to 0x4X70 */
/* Map to 0x4X71 - 0x4X7F */
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
NucMemDatAcc;
NucMemDatAccInc;
MarNucMem;
/* Map to 0x4X80 */
/* Map to 0x4X81 */
/* Map to 0x4X82 */
/* Map to 0x4X83 */
/* Map to 0x4X84 */
/* Map to 0x4X85 */
/* Map to 0x4X86 */
/* Map to 0x4X87 */
/* Map to 0x4X88 */
/* Map to 0x4X89 */
/* Map to 0x4X8A */
/* Map to 0x4X8B */
/* Map to 0x4X8C */
/* Map to 0x4X8D */
/* Map to 0x4X8E - 0x4X8F */
NucTableBaseReg;
FpaIntegRegLo;
FpaIntegRegHi;
FpaSerCtrlWord0Reg;
FpaSerCtrlWord1Reg;
FpaSerCtrlWord2Reg;
FpaSerCtrlWord3Reg;
FpaSptDac0Reg;
FpaSptDac1Reg;
FpaSptDac2Reg;
FpaSptDac3Reg;
Reserved7[2];
UWord16
Reserved8[16];
/* Map to 0x4X90 - 0x4X9F */
/* Utility Memory Access via MAR A */
47
SERIAL INTERFACE DEVELOPERS GUIDE
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
MarAMemAcc;
MarAMemAccInc;
MarAMemAccClr;
MarAMemAccClrInc;
MarAMemAccMsb;
MarAMemAccMsbInc;
MarAMemAccMsbClr;
MarAMemAccMsbClrInc;
/* Map to 0x4XA0 */
/* Map to 0x4XA1 */
/* Map to 0x4XA2 */
/* Map to 0x4XA3 */
/* Map to 0x4XA4 */
/* Map to 0x4XA5 */
/* Map to 0x4XA6 */
/* Map to 0x4XA7 */
/* Utility Memory Access via MAR B */
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
MarBMemAcc;
MarBMemAccInc;
MarBMemAccClr;
MarBMemAccClrInc;
MarBMemAccMsb;
MarBMemAccMsbInc;
MarBMemAccMsbClr;
MarBMemAccMsbClrInc;
/* Map to 0x4XA8 */
/* Map to 0x4XA9 */
/* Map to 0x4XAA */
/* Map to 0x4XAB */
/* Map to 0x4XAC */
/* Map to 0x4XAD */
/* Map to 0x4XAE */
/* Map to 0x4XAF */
/* Utility Memory MAR A */
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
MarAMem_LSW;
Spare1Reg[3];
MarAMem_MSW;
MarAMem_MSWInc;
MarAMem_MSWClr;
MarAMem_MSWClrInc;
/* Map to 0x4XB0 */
/* Map to 0x4XB1 - 0x4XB3 */
/* Map to 0x4XB4 */
/* Map to 0x4XB5 */
/* Map to 0x4XB6 */
/* Map to 0x4XB7 */
/* Utility Memory MAR B */
UWord16
UWord16
UWord16
UWord16
UWord16
UWord16
MarBMem_LSW;
Spare2Reg[3];
MarBMem_MSW;
MarBMem_MSWInc;
MarBMem_MSWClr;
MarBMem_MSWClrInc;
/* Map to 0x4XB8 */
/* Map to 0x4XB9 - 0x4XBB */
/* Map to 0x4XBC */
/* Map to 0x4XBD */
/* Map to 0x4XBE */
/* Map to 0x4XBF */
} fpga_IO;
48
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix C - Camera Command Enumerations
/* PC Master Command Code Enumerations */
enum
{
CMD_FPGA_UPDATE_AVAILABLE = 1,
CMD_COPY_SFLASH_PAGE,
CMD_PROG_SFLASH_FULL,
CMD_PROG_SFLASH_PARTIAL,
CMD_PROG_PRODUCT_ID,
CMD_READ_PRODUCT_ID,
CMD_PROG_STATIC_CFG,
CMD_READ_STATIC_CFG,
CMD_GET_CAMERA_TIME,
CMD_SET_CAMERA_TIME,
CMD_GET_NVM_DATA,
/* Copy a page of serial flash memory to DSP */
/* Program a full page to serial flash */
/* Program a partial page to serial flash */
/* Program DSP Data flash with Product ID */
/* Read Product ID from DSP Data flash */
/* Program DSP Data flash with Static Config */
/* Read Static Config from DSP Data flash */
/* Read the RTC time and store to scratch pad */
/* Set the RTC time from scratch pad */
/* Read NVM data block to scratch pad */
/* Set NVM data block from scratch pad */
/* Call focus-out routine */
CMD_SET_NVM_DATA,
CMD_FOCUS_MOTOR_FAR,
CMD_FOCUS_MOTOR_NEAR,
CMD_IMAGE_GRAB,
/* Call focus-in routine */
/* Grab image into utility memory (Buffer Supplied) */
/* Read a block of utility memory (Address Supplied) */
/* Debug Command to write ramp to parameter blocks */
/* Read a block of NUC flash memory (Address Supplied) */
/* Debug Command to write test pattern to NUC blocks */
/* Enable/Disable TEC Drive */
/* Select TEC Temperature (High/Low) */
/* Call either the Open or Close Routine */
/* Call either the Heated or Ambient Routine */
/* Perform a directed 1-point refresh calibration */
/* Perform a directed 2-point calibration */
/* Load user selected color palette */
CMD_READ_UTILITY_MEMORY,
CMD_NUC_FLASH_RAMP,
CMD_NUC_FLASH_MEMORY,
CMD_NUC_FLASH_TEST_PATTERN,
CMD_TEC_DRV_ENABLE,
CMD_TEC_TEMP_SELECT,
CMD_CAL_FLAG_SERVO,
CMD_CAL_FLAG_REFERENCE,
CMD_ONE_PT_REFRESH,
CMD_TWO_PT_NUC,
CMD_LOAD_COLOR_PAL,
CMD_LOAD_OVLY_PAL,
CMD_PIN_CHECK,
/* Load user selected overlay palette */
/* Verify Memory Unlock PIN */
CMD_FAN_SPEED_OPERATION,
CMD_GET_ADC_VALUES,
CMD_ENABLE_RETICLE,
CMD_RETICLE_POSITION,
CMD_ONE_PT_UPDATE,
/* Command to Test Fan Operation */
/* DEBUG ADC RETRIEVAL FUNCTION */
/* Turn Reticle on/off */
/* Move Reticle to desired location */
/* Perform a directed 1-point update calibration */
/* DEBUG VIDEO ENCODER WRITE REGISTER */
/* Perform user supplied test */
CMD_WRITE_VID_ENC_REG,
CMD_PERFORM_TEST,
CMD_OVERLAY_REFRESH,
CMD_FREEZE_IMAGE,
/* Refresh symbology overlay */
/* Freeze/Unfreeze Display Image */
CMD_DETECT_BAD_PIXELS,
CMD_IRCON_LOAD_LUT,
CMD_LOAD_RAD_PARAMS,
CMD_RESET_PFV_COUNT,
CMD_CLEAR_CONTINUE_FLAG,
CMD_UNIFORMITY_TEST,
CMD_WRITE_UTILITY_MEMORY,
CMD_ADV_DETECT_BAD_PIXELS,
/* NO LONGER USED */
/* Custom LUT table creation for radiometrics */
/* Load Rad Params for compile time software */
/* Toggles PFV Frame count bit */
/* Clears the idle while fault continue flag */
/* Command to initiate a uniformity (flat field noise) test*/
/* Write a block of utility memory (Address Supplied) */
/* Command to initiate flash update of advanced detection of
pixel defects */
CMD_UPLOAD_NUC,
CMD_DOWNLOAD_NUC,
CMD_COMPILE_DEFECT_LISTS,
/* Command to intiate flash write of uploaded NUC terms */
/* Command to intiate flash read of active NUC terms */
/* Command to initiate a compilation of NUC defects to FLASH */
CMD_RESTORE_FACTORY_DEFECTS, /* Command to NUC to factory defect state */
CMD_ENABLE_RANGE_RETICLE,
CMD_INIT_NUC_TABLE,
CMD_CAMERA_RECOVER,
CMD_PLACEHOLDER,
/* Turn Ranging Reticle On/Off */
/* Initialize NUC table (erase to all 0xFF's) */
/* Attempt to recover camera from internal errors */
CMD_UPDATE_EXP_PORT,
/* Updates Expansion Port Register from CfgData Value */
CMD_UNDEFINED
};
49
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix D - Mapping of Serial Non-Volatile Memory
/* Complete Camera Dynamic Configuration Info Structure */
struct _NVM_DYN_CFG
{
UWord16
UWord16
CamMode;
FpaMode;
/* Cast to/from NVM_CAM_MODE */
/* Cast to/from NVM_FPA_PROC_MODE */
UWord16
UWord16
UWord16
ReserveA;
ActMode;
ReserveB;
/* Reserved */
/* Cast to/from NVM_AUTO_NUC_MODE */
/* Reserved */
NVM_AUTO_NUC_MODE AutoNucData;
/* See Struct Above */
UWord16
UWord16
AutoRfshTime;
AutoRfshTemp;
/* Automatic calibration time period */
/* Automatic calibration temp delta (counts) */
UWord16
ReserveC[2];
/* Reserved */
UWord16
UWord16
ActPal;
OvlMode;
/* Cast to/from NVM_ACT_PAL */
/* Cast to/from NVM_OVL_MODE */
NVM_RETICLE_POS
NVM_RETICLE_POS
RtclAPos;
RtclBPos;
/* See Struct Above */
/* See Struct Above */
UWord16
UWord16
UWord16
RadMode;
AgcMode;
ReserveE;
/* Cast to/from RAD_MODE */
/* Cast to/from NVM_AGC_MODE */
/* Reserved */
NVM_MANUAL_ITT
NVM_AGC_LIMITS
ManualITT; /* See Struct Above */
AgcLimits; /* See Struct Above */
UWord16
UWord16
UWord16
UWord16
LinearMap;
AgcBinLimit;
/* Cast to/from LINEAR_MAP */
/* AGC Bin Limit Value */
/* Reserved */
ReserveF[4];
ActZoneStat;
/* Cast to/from NVM_ACT_ZONE_STATS */
NVM_VID_SCALE_TEMPS
VidScaleTemps;
/* See Struct Above */
/* Cast to/from NVM_IMG_PARAMS */
/* Cast to/from NVM_LENS_ID */
/* Reserved */
UWord16
UWord16
UWord16
UWord32
ImageParams;
LensID;
ReserveG[3];
OpTimeMin;
/* Elapsed operational time minutes */
UWord16
UWord16
UWord16
UWord16
CalFlashCount;
CalRfshCount;
OverTempCount;
PwrOnResetCnt;
/* Calibration flash cycle count */
/* Calibration refresh cycle count */
/* Over temperature alarm count */
/* Power on/reset cycle count */
UWord16
ReserveH[2];
/* Reserved */
};
typedef struct _NVM_DYN_CFG
NVM_DYN_CFG, *PTR_NVM_DYN_CFG;
50
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix E - Dynamic Memory Definitions
Note: The address (Adr) listed in the tables that follow refer to the RAM offset address inside
the Real Time Clock/NVM RAM part.
Factory
Bit Fields
Adr Entry Name
Mode
Initialize
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
32 Camera
Mode
Short
R/W
0x0009
0x0000
0x0000
0x00
Rtcl Rtcl Res- Zn Rfsh Rfsh Auto Auto Auto
Pfv SVidCVidCVid
Out Out 1Out 0Out
En En En En
Atc
En
Reserved
B
A
er- Stat On On Rfsh Rfsh Nuc
Control
En En ved En Sw Boot Tmp Tim Sw
34 FPA Processor
User Mode
Short
R/W
PFV
Src
Sel
Res- Clr Clr Dspl
er- Plt Bar Vid
ved YSel En Pol
Mstr
Sync
Mod
Reserved
Reserved
Control
36 Reserved
Short
R/W
Reserved
38 Active
Operational
Mode
Byte
R/W
Reserved
Act Op Mod
39 Active
NUC
Byte
R/W
0x00
Reserved
Act Nuc Indx
Index
40 Reserved
Short
R/W
0x0000
0x0200
0x03E8
0x3E00
0x03E8
Reserved
42 Auto NUC Switch
Low Saturation
Short
R/W
Reserved
Auto NUC Switch Low Saturation Intensity Threshold
Auto NUC Switch Low Saturation Count Threshold
Auto NUC Switch High Saturation Intensity Threshold
Auto NUC Switch High Saturation Count Threshold
Intensity Threshold
44 Auto NUC Switch
Low Saturation
Short
R/W
Count Threshold
46 Auto NUC Switch
High Saturation
Short
R/W
Reserved
Intensity Threshold
48 Auto NUC Switch
High Saturation
Short
R/W
Count Threshold
Camera Mode Control:
CVid0 Out En
CVid1 Out En
SVid Out En
Pfv Out En
0 – Composite Video 0 Output Disabled (Hi-Z);
1 – Composite Video 0 Output Enabled (Low Impedance Drive)
0 – Composite Video 1 Output Disabled (Hi-Z);
1 – Composite Video 1 Output Enabled (Low Impedance Drive)
0 – SVideo Output Disabled (Hi-Z);
1 – SVideo Output Enabled (Low Impedance Drive)
0 – Processed FPA Video Output Port Disabled (Hi-Z);
1 – Processed FPA Video Port Enabled (Low Impedance Drive)
0 – Disable Ambient Temperature Compensation;
1 – Enable Ambient Temperature Compensation
0 – Disable Auto NUC Switch;
Atc En
Auto Nuc Sw
Auto Rfsh Tim
Auto Rfsh Tmp
1 – Enable Auto NUC Switch
0 – Disable Elapsed Time Based 1-Pt Refresh;
1 – Enable Elapsed Time Based 1-Pt Refresh
0 – Disable Temperature Excursion Based 1-Pt Refresh;
51
SERIAL INTERFACE DEVELOPERS GUIDE
1 – Enable Temperature Excursion Based 1-Pt Refresh
Rfsh On Boot
Rfsh On Sw
Zn Stat En
Rtcl A En
0 – Disable 1-Pt Refresh on Bootup;
1 – Enable 1-Pt Refresh on Bootup (Camera waits until FPA Temperature Stable)
0 – Disable 1-Pt Refresh on NUC Switch;
1 – Enable 1-Pt Refresh on NUC Switch
0 – Disable Zone Statistics Computation;
1 – Enable Zone Statistics Computation
0 – Disable Reticle A Overlay;
1 – Enable Reticle A Overlay
Rtcl B En
0 – Disable Reticle B Overlay;
1 – Enable Reticle B Overlay
FPA Processor User Mode Control:
Non-Volatile Copy of FPA Processor User Mode Control Register.
Used to Restore FPA Processor Register on Power On Reset.
Active Operational Mode:
Selects the Currently Active Op Mode (0 <= Act Op Mod <= 15).
Use the Appropriate Op Mode Descriptor Table Values to Load the FPA Processor Registers.
Active NUC Index:
Selects the Currently Active NUC Index (0 <= Act Nuc Indx <= 63).
Use the Appropriate NUC Mode Descriptor Table Values to Load the FPA Processor Registers.
Limit the NUC Index to the Range Defined by the Current Active Operational Mode.
Auto NUC Switch Parameters:
If Auto Nuc Sw = 1, then Decrement the NUC Index by 1 if the Number of FPA Pixels that are Less
than the Auto NUC Switch Low Saturation Intensity Threshold is Greater than the Auto NUC Switch
Low Saturation Count Threshold. Likewise, Increment the NUC Index by 1 if the Number of FPA
Pixels that are Greater than the Auto NUC Switch High Saturation Intensity Threshold is Greater
than the Auto NUC Switch High Saturation Count Threshold. In Any Case, Limit the NUC Index to
the Range Defined by the Current Active Operational Mode.
52
SERIAL INTERFACE DEVELOPERS GUIDE
Factory
Bit Fields
Adr Entry Name
Mode
Initialize
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
50 Auto Refresh
Time
Short
R/W
0x0258
0x00EA
0x0000
0x00
Auto Refresh Time Period (Seconds)
Period
52 Auto Refresh
Short
R/W
Auto Refresh Temperature Delta Threshold
(Temperature ADC Counts)
Temperature Delta
Threshold
54 - Reserved
56
Short
R/W
Reserved
Reserved
Reserved
Reticle Size
58 Active
Color
Byte
R/W
Act Clr Plt
Palette
59 Active
Overlay
Byte
R/W
0x00
Act Ovl Plt
Palette
60 Overlay
Control
Byte
R/W
0xA1
Ovl
Mod
61 Overlay
Color
Byte
R/W
0xD0
Ovl
Foreground
Color
Ovl
Background
Color
62 Reticle A
Horizontal
Position
Short
R/W
0x0064
Reserved
Reticle A Horizontal Position
64 Reticle A
Vertical
Byte
R/W
0x78 NTSC
0x80 PAL
Reticle A Vertical Position
Reticle A Emissivity
Position
65 Reticle A
Emissivity
Byte
R/W
0x00
( 0 to 1 - 2-8
)
Auto Refresh Calibrate Parameters:
If Auto Cal Tim = 1, then Perform 1 Point Offset Refresh NUC when the Auto Calibrate Time Period
Expires.
If Auto Cal Tmp = 1, then Perform 1 Point Offset Refresh NUC when the FPA Temperature Deviates by
+ /- the Auto Calibrate Temperature Delta Threshold from the Temperature at which the Previous 1
Point Offset Refresh was Performed.
Active Color Palette:
Selects the Currently Active Color Palette (0 <= Act Clr Plt <= 15).
Use the Appropriate Color Palette Table Values to Load the Color Palette Memory.
Active Overlay Palette:
Selects the Currently Active Overlay Palette (0 <= Act Ovl Plt <= 7).
Use the Appropriate Overlay Palette Table Values to Load the Overlay Palette Memory.
Overlay Control:
Ovl Mod
0 - Overlay Off
1 – Overlay Date/Time
2 – Overlay Date/Time/Contrast
3 – Overlay Full Status
4 to 15 - Reserved
Reticle Size
Radius of Overlay Reticules
Overlay Color:
Ovl Background Color
Ovl Foreground Color
Color Index into Active Overlay Palette for Overlay Background Fields.
Color Index into Active Overlay Palette for Overlay Foreground Fields.
53
SERIAL INTERFACE DEVELOPERS GUIDE
Factory
Bit Fields
Adr Entry Name
Mode
Initialize
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
66 Reticle B
Horizontal
Position
Short
R/W
0x00DC
Reserved
Reticle B Horizontal Position
68 Reticle B
Vertical
Byte
R/W
0x78 NTSC
0x80 PAL
Reticle B Vertical Position
Reticle B Emissivity
Position
69 Reticle B
Emissivity
Byte
R/W
0x00
( 0 to 1 - 2-8
)
70 Reticle
Radiometric
Control
Short
R/W
0x0000
0x02
Tem
p
Unit
Reserved
72 AGC
Mode
Byte
R/W
Agc
Mod
Reserved
73 Active
ROI
Byte
R/W
0x00
Act Roi
Indx
Reserved
Index
74 Reserved
Short
R/W
0x0000
0x0000
0x3FFF
0x3FFF
Reserved
76 Display Video
Manual
Short
R/W
Display Video Manual Low Intensity (Input Intensity Mapped to 0)
(0 to 16,383)
Reserved
Reserved
Reserved
Low Intensity
78 Display Video
Manual
Short
R/W
Display Video Manual High Intensity (Input Intensity Mapped to 255)
(0 to 16,383)
High Intensity
80 AGC High
Limit
Short
R/W
AGC Low Limit Intensity
Intensity
Reticle Parameters:
If Rtcl X En = 1, then Draw Reticle X at the Reticle X Horizontal / Vertical Position.
If Reticle Emissivity is 0, Report Intensity on Overlay.
If Reticle Emissivity is not 0 Report Temperature on Overlay.
Reticle Radiometric Control:
Temp Unit
0 – Display Temperatures in Fahrenheit;
1 – Display Temperatures in Celsius
AGC Mode:
Agc Mod
0 – AGC/ALC Off (Hold Present State);
1 – Manual Contrast Adjust;
2 – Linear AGC/ALC;
3 – Histogram AGC/ALC;
4 to 15 – Reserved
Active ROI Index:
Selects the Currently Active ROI Index (0 <= Act ROI Index <= 7).
Use the Appropriate Op Mode Descriptor Table Values to Load the FPA Processor Registers.
Display Video Manual Low / High Intensity Parameters:
If Agc Mod = 1, then:
Intensity Transform = (Input – Manual Low Intensity) * (255/(Manual High Intensity – Manual
Low Intensity)).
AGC Limit Intensity Parameters:
See below.
54
SERIAL INTERFACE DEVELOPERS GUIDE
Factory
Bit Fields
Adr Entry Name
Mode
Initialize
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
82 AGC High
Limit
Short
R/W
0x3FFF
0x0000
0x001E
0x0000
0x00
Reserved
AGC High Limit Intensity
Intensity
84 AGC
Ancillary
Control
Short
R/W
Lag
Filter
Rate
Linear
Hi Map Low Map
Indx Indx
Linear
Reserved
86 AGC
Bin
Short
R/W
AGC Bin Limit
Reserved
Limit
88 - Reserved
94
Short
R/W
96 Active
Zone Stats
Table
Byte
R/W
Reserved
Act Zn Stats Tbl
97 Reserved
Byte
R/W
0x00
Reserved
98 Display Video
Zero Scale
Short
R/W
0x0000
0x0000
0x32
Display Video Zero Scale Temperature
( ºK – LSB is TBD )
Temperature
100 Display Video
Full Scale
Short
R/W
Display Video Full Scale Temperature
( ºK – LSB is TBD )
Temperature
102 Camera
Background
Temperature
Byte
R/W
Camera Background Temperature
( ºC – LSB is .5 )
Sign
Frct
103 Display
Video
Byte
R/W
0x00
Display Video Emissivity
( 0 to 1 - 2-8
)
Emissivity
AGC Limit Intensity Parameters:
If Agc Mod >= 2, then Ignore Histogram Intensities Below AGC Low Limit Intensity and Above AGC
High Limit Intensity when Computing Intensity Transform Table.
AGC Ancillary Control:
Linear Low Map Index
0 – Linear AGC Low Point at 1.25%;
1 – 0.25%;
2 – 0.05%;
3 – 0.01%;
Linear Hi Map Index
0 – Linear AGC High Point at 98.75%;
1 – 99.75%;
2 – 99.95%;
3 – 99.99%;
Lag Filter Rate (AGC Filtering Speed)
0 – Slow (Gradual Change);
1 – Medium Slow;
2 – Medium Fast;
3 – Fast (Rapid Change)
Active Zone Statistics Table:
Selects the Currently Active Zone Statistics Table (0 <= Act Zn Stats Table <= 31). Use the
Appropriate Zone Statistics Descriptor Table Values to Compute and Process the Required Zones.
Currently not implemented.
Radiometric Display Video Parameters:
Display Video Zero Scale Temperature, Display Video Full Scale Temperature, Camera Background
Temperature and Display Video Emissivity are Used with Customer Supplied Software to Map Video
Display to Absolute Temperature Scale.
55
SERIAL INTERFACE DEVELOPERS GUIDE
Factory
Bit Fields
Adr Entry Name
Mode
Initialize
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
104 Lens ID
Control
Byte
R/W
0x05
Lens Res-
Auto er-
Det ved
Lens ID
105 Reserved
Byte
R/W
0x00
Reserved
106 - Reserved
110
Short
R/W
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
Reserved
112 Operational
Elapsed
Short
R/W
Operational Elapsed Time LSBs
(Minutes)
Time (LSBs)
114 Operational
Elapsed
Short
R/W
Operational Elapsed Time MSBs
(Minutes)
Time (MSBs)
116 Cal Flash
Cycle
Short
R/W
Cal Flash Cycle Count
Cal Refresh Cycle Count
Over-Temperature Alarm Count
Power On / Reset Cycle Count
Reserved
Count
118 Cal Refresh
Cycle
Short
R/W
Count
120 Over-Temperature
Short
R/W
Alarm
Count
122 Power On /
Reset Cycle
Count
Short
R/W
124- Reserved
126
Short
R/W
Lens ID Control:
Lens ID
0 – No Lens;
Fixed Focus / No Zoom (IDs 1 through 15):
1 – Reserved; 2 – Reserved; 3 – 13mm; 4 – Reserved; 5 – 25mm; 6 – Reserved;
7 – 50mm; 8 – Reserved; 9 – Reserved; 10 – 100mm; 11 to 15 – Reserved;
Manual Focus / No Zoom (IDs 16 through 31):
16 – Reserved; 19 – 13mm; 20 – Reserved; 21 – 25mm; 22 – Reserved;
23 – 50mm; 24 – Reserved; 25 – Reserved; 26 – 100mm; 27 to 31 – Reserved;
32 to 63 – Reserved for Advanced Lenses
Lens Auto Det
0 – Use Dynamic Configuration Table Lens ID;
1 – Automatically Detect Lens ID Using ADC Channel ANA4 (MS6 Bits)
Nonvolatile Diagnostic Parameters:
Operational Elapsed Time – Incremented Once per Minute
Cal Flash Cycle Count – Incremented Each Time a One-Point, Two-Point or One Point Update NUC
Operation is Performed.
Cal Refresh Cycle Count – Incremented Each Time a One Point Refresh NUC Operation is performed.
Over-Temperature Alarm Count – Incremented Each Time the Camera Internal Temperature Exceeds
55ºC.
Power On/Reset Cycle Count – Incremented Each Time the Camera is Booted.
56
SERIAL INTERFACE DEVELOPERS GUIDE
Appendix F – NUC Coefficient Format
NUC Offset Coefficient (Odd Addresses)
Range: -16,384 to +16,383.5 Resolution: 0.5
NUC Offset Coefficient Becomes Pixel Replace Address Offset
if NUC Gain Coefficient Equals Zero
Bit Fields
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
NUC Offset Coefficient (for Valid Pixel i.e. NUC Gain Non-Zero)
Sign
Frct
Zero
Pixel Replace Address Offset
Sign
Pixel Replace Address Offset
Range: -643 to +643 Resolution: 1
Pixel Replace Address Offset = (Replace Relative Row Index * Pixels / Line) +
Replace Relative Col Index
where: –2 <= Replace Relative Row Index <= +2 and
-3 <= Replace Relative Col Index <= +3 and
Pixels / Line <= 320
NUC Gain Coefficient (Even Addresses)
Range: 0 to ~2 Resolution: 2-15
Set NUC Gain Coefficient to Zero if Defective Pixel
Bit Fields
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
NUC Gain Coefficient (for Valid Pixel)
Frct
57
|