ACIS Science Instrument
Software User’s Guide
36-54003 Rev. B
February 14, 2022
DR SDM05
Contract # NAS8-37716
Submitted to:
George C. Marshall Space Flight Center
National Aeronautics and Space Administration
Marshall Space Flight Center, AL 35812
Submitted By:
Massachusetts Institute of Technology
Center for Space Research
77 Massachusetts Avenue
Cambridge, MA 02139
Approvals: |
|
Dr. Peter Ford | Dr. Mark Bautz |
Software Project Manager | Project Manager |
Massachusetts Institute of Technology | Massachusetts Institute of Technology |
MASSACHUSETTS INSTITUTE OF TECHNOLOGY
KAVLI INSTITUTE FOR ASTROPHYSICS & SPACE RESEARCH
CAMBRIDGE, MASSACHUSETTS 02139
REVISION LOG
ACIS Science Instrument Software User’s Guide
DOC. NO. 36–54003 Rev. B
Date | ECO | Page(s) |
| ||
Revision | (mm/dd/yy) | No. | Affected |
Reason |
Approval |
01 | 5/30/1997 | 36-923 | All | Initial Skeleton | – |
A | 7/21/1999 | 36-957 | All | Initial Version, released with TBDs at launch time | RFG |
B- | 4/28/2020 | N/A | All | Revised Version, incorporating 20 years of on-orbit experience, reviewed by the ACIS instrument team | – |
B | February 14, 2022 | 36-1055 | All | Baseline Release | – |
The AXAF-I CCD Imaging Spectrometer (ACIS) Science Instrument Software (SIS) was developed by the Massachusetts Institute of Technology, Center for Space Research (MIT-CSR) as part of the ACIS Digital Processor Assembly (DPA). The DPA resides on-board the Advanced X-ray Astrophysics Facility - Imaging (AXAF-I). The DPA Science Instrument Software is responsible for acquiring and processing image data from the ACIS CCD Imaging Spectrometer and transferring the processed data to the AXAF-I Command and Telemetry Unit (CTU), which is then responsible for sending the information to the ground. On orbit, ACIS is operated by its Science Operations Team (SOT).
The ACIS Science Instrument Software User’s Guide describes the operation of the key functions of the instrument software.
This document applies to the detailed design of the ACIS DPA Science Instrument Software. It does not provide information for the Ground Support Software (GSS), which is maintained separately as part of the Electronic Ground Support Equipment (EGSE).
This document supplies information applicable to SDM05 from the original contract, and to DM29 from MM8075.1.
By mutual agreement, MSFC Software Management and Development Requirements Manual MM8075.1, which supersedes MA-001-006-2H, forms the basis for this document.
This specification relies on a set of existing documentation. The following table lists these documents.
Part Number | Rev | Date | Title
|
MSFC MM 8075.1 | 01/22/1991 | MSFC Software Management and Development Requirements Manual |
|
I | 05/16/1997 | ACIS Science Instrument Software Requirements Specification |
|
MIT-CSR 36-01502 | C | ACIS Hardware Specification and System Description |
|
MIT-CSR 36-01410 | 01/15/1997 | ACIS Instrument Protocol and Command List |
|
N | 03/15/2001 | ACIS IP&CL Software Structure Definitions |
|
C | 11/14/1996 | DPA/DEA Interface Control Document |
|
3.1 | 06/20/1997 | ACIS Test Tools |
|
1.5 | ACIS Flight Software |
||
1.1 | 07/29/1996 | Huffman Coding of ACIS Pixel Data |
|
2.1 | 07/19/1995 | CCD Bias Level Determination Algorithms |
|
2.65 | 11/20/1997 | ACIS Science Instrument Operations Handbook |
|
NU910701 | 1991 | Nucleus RTX Reference Manual from Accelerated Technology, Inc. |
|
NU910702 | 1991 | Nucleus RTX Internals Manual from Accelerated Technology, Inc. |
|
MIPS RISC Architecture | 1989 | Kane, Prentice Hall, NJ |
|
MIPS Programmers Handbook | 1994 | Farquhar & Bunce, Morgan Kauffman publishers, San Francisco, CA |
|
Error Correction Coding | 2005 | Moon, T.K., Wiley & Sons. |
|
Several topics related to ACIS Flight Software are covered in a series of online reports, available from “http://acisweb.mit.edu/pub/File.pdf”, where “File” is the third column of Table 1.2.
Title | Rev | File | Date
|
The Architecture of acisCtl | 2.0 | acisCtl-arch-v2.0 | 2019-06-10 |
ACIS Event Filtering | 1.0 | acis-event-filtering-v1.0 | 2019-04-22 |
Repairing Bit Errors in Compressed ACIS Packets | 1.0 | acis-bias-bit-flip-v1.0 | 2017-05-02 |
Effect of DPA Power-Cycling during Science Run | 1.0 | acis-dpab-powerdown-v1.0 | 2017-03-02 |
Creating and Testing ACIS Flight Software Patches | 1.0 | acis-patching-v1.0 | 2016-06-06 |
Correcting for ACIS EEPROM Corruption | 1.6 | acis-eeprom-utils-v1.6 | 2015-04-28 |
ACIS Hi-Lo Pixel Anomaly | 1.4 | hi-lo-pixel-anomaly-v1.4 | 2014-12-03 |
ACIS Engineering Unit Regression Tests | 1.1 | acis-eu-regression-v1.1 | 2014-08-08 |
Improvements to the txings patch | 1.0 | acis-patch-txings-v1.0 | 2013-08-25 |
Selecting optimal parameters for the txings patch | 1.1 | acis-txings-parms-v1.1 | 2012-04-12 |
Testing SIMODEs without a Hardware Simulator | 2.0 | run-dat5-v2 | 2011-06-29 |
Using ACIS to Detect High Radiation Conditions | 1.0 | acis-patch-txings-13 | 2011-04-15 |
Flushing a BEP Command FIFO | 1.0 | fifoflush-report-v1 | 2010-05-17 |
Occasional bias map corruption | 1.0 | SPR139-1.0 | 2006-09-06 |
ACIS CC-Mode Bias Algorithm II | 1.0 | ccmode2 | 2003-01-30 |
ACIS CC-Mode Bias Algorithm I | 1.0 | ccmode1 | 2002-06-04 |
Anomalous ACIS Pixel Values | 1.0 | pixanom1 | 2001-05-07 |
Long-Term ACIS Maintenance and Verification | 1.0 | LongTermMaintenance | 1996-05-07 |
DEA Housekeeping from 1999 | – | oac1.3,5.deahk.html | 1999-07-28 |
DEA Housekeeping from 2011 | – | 62807,62806.deahk.html | 2011-03-09 |
Figure 2.1 illustrates the overall hardware architecture of ACIS.
RCTU - Remote Command and Telemetry Unit
This provides the command and telemetry interface between ACIS and the spacecraft.
PSMC - Power Supply and Mechanism Controller
This provides power to the ACIS Digital Processor Assembly (DPA), which contains the Back End
Processors and Front End Processors, and to the Detector Electronics Assembly (DEA), which contains
the CCD Video Controller Boards and two interface boards. It is also responsible for controlling
the ACIS door, vent valves, etc. (not shown). All of the PSMC functions are controlled by discrete
commands received from the spacecraft; no instrument software is involved.
BEP - Back End Processor
ACIS has two redundant Back End Processors, responsible for the overall control of the instrument,
including command and data handling. Although both BEPs are usually powered at the same time, only
one BEP is active at a time.1
Each BEP is powered by a separate side of the PSMC DPA Power Supply.
FEP - Front End Processor
ACIS has 6 Front End Processors that are responsible for acquiring digitized image data from the
CCD Video Controllers, and for detecting candidate X-ray events from these images. For a normal
science observation, data from each CCD used for the observation is processed by any one of the 6
FEPs (NOTE: it is possible, however, to have more than one FEP process data from the same CCD).
FEPs 0, 1, and 2 are powered by A-side of the PSMC DPA Power Supply, and FEPs 3, 4, and 5 are
powered by the B-side of the supply. In order to process data from 6 CCDs simultaneously, both sides
of the PSMC DPA Power Supply must be on.
11th Board
This is the primary interface board for the Detector Electronics Assembly. It contains power switching
logic for the DEA Video Boards, a Focal Plane temperature controller, and some housekeeping logic.
These components are powered by the A-side of the PSMC DEA Power Supply. This board also contains
a set of relays used to switch power on the video boards to the current PSMC DEA Supply. Unlike the
DPA only one side of the PSMC DEA Power Supply may be on at a time.
12th Board
This board is a backup interface board for the DEA. It is identical to the 11th board except that it does
not have the power-switching relays, nor does it have the housekeeping logic. This board is powered
by the B-side of the PSMC DEA Power Supply.
Video Boards
ACIS has 10 DEA Video Boards. Each board is hard-wired to a particular CCD (see diagram for the
mapping). Each video board contains a sequencer (loaded by the BEP) that is used to transfer charge
within the CCDs. Each also contains digitization circuits to convert the analog CCD data into a digital
form, which is then fed to the FEPs.
The ACIS Mongoose processors are all configured by hardware to use little-endian” byte ordering. For example, the 32-bit value 0x12345678 (decimal 305419896) is stored as bytes in RAM as follows:
Virtual Address | Byte Value
|
0 | 0x78 |
1 | 0x56 |
2 | 0x34 |
3 | 0x12 |
By convention, bits within a word are numbered with the least-significant bit as bit number 0. This is consistent with the usage in the “MIPS Programmers Handbook” (see Table 1.1.) Unless otherwise specified, all signed values use two’s complement representation.
The ACIS Instrument Software runs on two types of processors within the system: the Back End Processor (BEP) and the set of Front End Processors (FEP). The BEP loads its software either from EEPROM or from the uplink command channel. Once up and running, the active BEP can enable power to the FEPs and to video boards within the Detector Electronics Assembly (DEA), and load software into the FEPs via shared memory, and into the video processors using serial digital interfaces.
The BEPs run a single-processor preemptive, multi-tasking kernel that allows the BEP to be performing more than one task at a time. For example, it can process science data, while acquiring DEA housekeeping data, while performing a memory dump (BTW: This is a very useful feature when trying to diagnose certain classes of problems). The telemetry produced by the BEP is organized into data packets, which appear in the “Software Serial Data” portion of the telemetry stream (IP&CL mnemonic 1TSERXT). Each packet is preceded by a 32-bit synchronization pattern, and contains a length field indicating the number of words in the packet. This allows telemetry produced by the several tasks running on the BEP to be merged into the telemetry stream (for example, memory dump telemetry packets may be mixed in with science event data packets).
Table 2.1 lists the BEP’s tasks, grouped according to their priority (highest priority, 51, is first, and lowest priority listed, 55, is last. Tasks with the lowest priority number have the highest run-time priority). In contrast, each FEP runs a single main thread, with a single interrupt handler to count the arrival of images produced by the DEA. The FEPs are only commanded by the software that runs on the active BEP. This single thread performs the high-performance portion of the science data processing, and polls its shared memory interface for requests from the BEP.
The shared memory interface was designed to permit the BEP to copy entire FEP bias maps into telemetry packets while simultaneously processing X-ray events, but this behavior caused FEP firmware to lock-up at times of high event rates. Software patches (buscrash, buscrash2) to prevent this have since been installed in the BEP, but it is still possible to command the BEP to dump the contents of a FEP processor’s memory to telemetry, e.g., for diagnostic purposes (see Section 3.6.1.3), provided the FEPs are not processing CCD frames at the time.
Task Name | Prio | Command/Telemetry | Role
|
TaskMonitor | 51 | Not commandable. | Perform aliveness tests of the other tasks. Allows the watchdog timer to reset the BEP if a task fails to respond to a query within 8 minutes. |
CmdManager | 52 | All software commands executed or routed by this task. | Interpret and dispatch uplinked commands. |
SystemConfiguration | 53 | Radiation Flag and Change System Configuration. | Respond to changes in configuration table and monitor the radiation flag. |
SwHousekeeper | 53 | Not commandable. Produce software housekeeping packets. | Collect and periodically report software statistics. Update software bi-levels to reflect instrument’s operating state. |
DeaHousekeeper | 53 | Start/Stop DEA Housekeeping. | Periodically collect and report DEA housekeeping values. |
MemoryServer | 54 | Dump commands, Read, Write BEP/FEP/PRAM/ SRAM commands, Execute BEP/FEP commands. | Handle read (including dump), write, and execute memory commands. |
BiasThief | 55 | Affected by start/stop science/bias-only commands, via ScienceManager. | Trickle2 the contents of the computed CCD bias maps to telemetry. |
ScienceManager | 55 | Execute start/stop science runs and bias-only science runs. | Perform science run, including hardware setup, parameter dumps, bias computation and data processing. |
ACIS is commanded via its Remote Command and Telemetry Unit (RCTU). This unit provides various types of commands and telemetry. The ACIS hardware is commanded via high-level pulse commands to the ACIS Power Supply and Mechanism Controller (PSMC) and by 16-bit serial digital commands to the ACIS hardware serial port. In addition, commands to the ACIS software are contained within a series of 16-bit serial command words, known as command packets, which are addressed to the ACIS software serial port. For the purposes of this document, “Hardware commands” will refer to either high-level pulse commands addressed to the PSMC, or serial digital commands addressed to the DPA hardware serial port. “Software commands” will always refer to command packets addressed to the ACIS software serial port.
The ACIS hardware provides engineering telemetry that is read by the spacecraft and placed in fixed places within the spacecraft telemetry stream. The ACIS software produces telemetry as a stream of 32-bit words, packed and placed into the spacecraft telemetry stream allocated for ACIS science telemetry. These packets may or may not be separated by a variable number of fill bytes (0xb7), placed into the stream by the ACIS hardware when a packet is not being transferred.
For details on the content and format of the ACIS hardware commands and telemetry, refer to the ACIS Instrument Protocol and Command List (MIT-CSR 36-01410). For details on the content and format of the ACIS software command and telemetry, refer to the ACIS IP&CL Software Structure Definitions (MIT-CSR 36-53204.0204). For convenience, these definitions are summarized online in “acisweb.mit.edu/acis/ipcl”.
In this document, all commands to send to ACIS will be written in the syntax accepted by the bcmd command, a PERL script that translates ASCII input into a stream of binary commands and headers suitable for repackaging, e.g., through the SOT/ACIS Command Generation Software (SACGS) functions to create entries for the ACIS command tables used by the Observatory Control Center (OCC), or through sendCmds to send to the ACIS engineering unit. The bcmd functions are illustrated in Appendix B. This and other EGSE commands are listed in Appendix D and more fully described in on-line manuals and in the “ACIS Test Tools” document MIT-CSR 36-55001 referenced in Table 1.1. bcmd commands are written in structured ASCII text with optional comments, as illustrated in the following example:
start 58 te 4 | # start a timed exposure science run from the parameters in slot 4 |
The contents of all telemetry packets output by the BEP will be shown in this document in the format output by the ltlm command whose function is to read BEP packet streams and translate them into ASCII. The “start” command in this example will be acknowledged by ACIS with the following telemetry packet:
commandEcho[9] = { | ||
synch | = 0x736f4166 | |
telemetryLength | = 6 | |
formatTag | = 7 | # TTAG_CMD_ECHO |
sequenceNumber | = 40276 | |
arrival | = 0x17afd029 | |
result | = 1 | # CMDRESULT_OK |
startScience = { | ||
commandLength | = 4 | |
commandIdentifier | = 58 | |
commandOpcode | = 14 | # CMDOP_START_TE |
blockSlotIndex | = 4 | |
} | ||
} | ||
The names of UNIX commands and ACIS patches will be italicized and those of ACIS parameters will be shown in monotype. Input to bcmd will be colored brown and output from ltlm will be green. The names given to packets, commands, and their subfields are standardized across the ACIS ground system. Packets and their internal arrays are also given numerical indices, as in the following example:
deaHousekeepingData[3] = { | ||
synch | = 0x736f4166 | |
telemetryLength | = 40 | |
formatTag | = 11 | # TTAG_DEA_HOUSE |
sequenceNumber | = 17733 | |
deaBlockId | = 4132 | |
commandId | = 18 | |
bepTickCounter | = 0x2a92298e | |
entries[0] = { | ||
ccdId | = 10 | |
queryId | = 0 | # DEAHOUSE_CNTL_RELAY |
value | = 31 | # 0x001f |
} | ||
entries[1] = { | ||
ccdId | = 10 | |
queryId | = 1 | # DEAHOUSE_CNTL_ADC_TMP_BEP_PCB |
value | = 2550 | # 0x09f6 |
} | ||
... | ||
} | ||
where comments begin with “#” and, in this document, “...” implies that less important lines have been omitted for clarity, especially in the first 4 fields of each packet: synch through sequenceNumber.
This document contains many examples of “keyword = value” pairs, either passed to bcmd or output from ltlm and psci. We shall use two dots to indicate that a value will lie within a specified range, e.g., “fepId = 0..5”, and three dots to indicate an array of values, e.g., “fepCcdSelect = n0...n5”, to represent integers n0, n1, etc.
This section describes the various activities used to maintain the ACIS instrument software.
This section describes how the ACIS instrument software is started. Before reading this section, the reader should familiarize themselves with the discussion in Table A.1 in Appendix A of the internal status flags in each of the two ACIS Back End Processors (BEPs).
A BEP can boot in one of five modes, as determined by the values of three bits in its Status Register, two of which, BOOT_MOD and WARM_BOOT, are set by ground command and the third, WDOGRST, is set when a “watchdog timer” expires, usually the result of some anomalous condition. See Table A.1 for details.
Mode | Flag Values | Load from | Patches* | Pblocks | FEPs/DEAs
|
Uplink Boot | BOOT_MOD==1 | Uplink Command FIFO | Ignore | Ignore | Ignore |
Power-On Boot | WDOGRST==0 WARM_BOOT==0 | EEPROM | Delete | Copy from EEPROM | Assume all unpowered |
Cold Watchdog Boot | WDOGRST==1 WARM_BOOT==0 | EEPROM | Delete | Copy from EEPROM | Assume all unpowered |
Warm Watchdog Boot | WDOGRST==1 WARM_BOOT==1 | EEPROM | Ignore | Ignore | Ignore |
Warm Boot | WDOGRST==0 WARM_BOOT==1 | EEPROM | Apply | Ignore | Ignore |
* Ignore leaves the patches in I-cache memory, but ignores them. Delete deletes them from I-cache and doesn’t apply them; Apply leaves them in I-cache and applies them.
The BEP tests the three hardware bits in the order shown, i.e., if BOOT_MOD is 1, it will perform an Uplink Boot; otherwise it will test WDOGRST and WARM_BOOT and proceed accordingly. The implications of these various modes will be examined in the following sections.
This section describes how to power-on a BEP in the ACIS Digital Processor Assembly (DPA). A BEP must be powered up for the instrument to receive commands.
Description
On ACIS, there are two Back End Processors, (BEPs), a Side-A processor and a Side-B processor. The Side-A BEP is powered by the Side-A DPA Power Supply in the PSMC, whereas the Side-B BEP is powered by the Side-B DPA PSMC. Each BEP is powered by issuing a PSMC enable command to the appropriate side, followed by a power-on command to that side. See Table 3.1 and Table B.5 in Appendix B.3 for lists of PSMC power commands. When powered, the BEP hardware and software will perform a power-on boot (see Section 3.1.3.1).
Since Side-A of the PSMC also supplies power to three of the Front End Processors (FEPs 0,1 and 2) and the Side-B PSMC supplies power to the remaining three FEPs (3, 4 and 5), both BEP processors are normally powered at the same time. However, only one BEP may be “active” at a time. At power-on, the Side-A BEP is the “active” BEP, while the Side-B BEP’s processor is held in a reset state and its external I/O logic is inactive. See Section 3.1.2 for a description on how to select the active BEP and for warnings concerning FEP power when switching between BEPs. See Tables 3.2 and B.2 (in Appendix B.2) for lists of commands affecting BEP status.
NOTE: If BEP-B is powered up, and BEP-A is not already powered, BEP-B will not be the selected BEP, and the serial digital telemetry and bi-level telemetry from the DPA will float. Lab experience has shown that the floating lines tend to a logical ’1’. See Section 3.1.2 for the procedure to activate BEP-B.
Commands
Table 3.1 lists the commands issued to power-on the BEPs. See Section 3.2 for commands to power-off the DPA’s BEPs. Also, see Section 3.1.3 for commands needed to enable and power on and off the Detector Electronics Assembly.
Mnemonic | Command Type | Description
|
Power Up DPA Side-A Power Supply
| ||
1DPPSAEN | Pulse to PSMC Side-A | Enable (but don’t power on) the PSMC DPA Side-A |
1DPPSAON | Pulse to PSMC Side-A | Power-On the PSMC DPA Side-A Power |
Power Up DPA Side-B Power Supply
| ||
1DPPSBEN | Pulse to PSMC Side-B | Enable (but don’t power on) the PSMC DPA Side-B |
1DPPSBON | Pulse to PSMC Side-B | Power-On the PSMC DPA Side-B Power |
Mnemonic* | Telemetry Type | Value | Description
|
1DPPSAX | Serial Digital | 0 | Verifies that the DPA A-side Power Supply is disabled. |
1DPPSBX | Serial Digital | 0 | Verifies that the DPA B-side Power Supply is disabled. |
1DPPSA | Serial Digital | 0 | Verifies that the DPA A-side Power Supply is off. |
1DPPSB | Serial Digital | 0 | Verifies that the DPA B-side Power Supply is off. |
1TSERXT | SW Serial Digital | undefined | The software serial digital telemetry out of a BEP while powered off is undefined, however lab experience shows the interface almost always floats to 1’s, giving 8-bit data values of 0xff |
1STAT[0..7]ST | HW Bi-level | undefined | The bi-level telemetry of the BEP when powered off is undefined, however, lab experience shows the interface almost always floats to 1’s. |
1DPPSAX | Serial Digital | 1 | Verifies that the DPA A-side Power Supply has been enabled |
1DPPSBX | Serial Digital | 1 | Verifies that the DPA B-side Power Supply has been enabled |
1DPPSA | Serial Digital | 1 | Verifies that the DPA A-side Power Supply has been turned on. |
1DPPSB | Serial Digital | 1 | Verifies that the DPA B-side Power Supply has been turned on. |
1TSERXT | SW Serial Digital | fill = 0xb7 | Once a BEP is powered and enabled (side-A defaults to enabled), the hardware places a fill pattern into the software serial telemetry stream. This fill pattern appears whenever the software is not transmitting telemetry packets. |
1STAT0ST | Bi-level: bits 0-3 | variable | When the BEP is first powered, the software sets the bi-levels to 0xf. As the system boots, it walks the bi-levels through a series of values so that if the instrument gets “stuck”, the ground can tell where. The bi-level value sequence is described in more detail in Section 3.1.3 and Section 3.1.4. Once running, the Flight Software’s Housekeeping Task updates these bits to indicate the current state of the instrument. |
1STAT1ST |
| variable |
|
1STAT2ST |
| variable |
|
1STAT3ST |
| variable |
|
1STAT4ST | Bi-level: BEP Id | 0 (BEP-A) | If BEP-A is powered on first, it will be, by default, the selected BEP and drive the bi-level to 0. |
1STAT5ST | Bi-level: CPU Not Reset | 1 | Since, by default, BEP-A is not held in a reset state when first powered, the BEP will drive this bi-level to a 1. |
1STAT6ST | Bi-level: FIFO Not Full | 1 | After a power-on, the BEP’s command FIFO is reset by the hardware, and therefore will not be full, but instead is empty. |
1STAT7ST | Bi-level: FIFO Not Empty | 0 |
|
* Hardware commands and telemetry mnemonics are described in the ACIS Instrument Protocol and Command List (see Table:1.1.)
Engineering Telemetry
The following telemetry items in the engineering portion of the telemetry stream indicate when power is applied to the BEPs. The following assume that BEP-A is being powered first.
Science Telemetry
When a BEP has power, and the software is not transmitting any telemetry packets, the hardware supplies a single-byte fill pattern, 0xb7 (hexadecimal). Once the software is initialized after a power-on, it outputs a BEP Startup Message telemetry packet, and then approximately once every 64 seconds outputs a BEP Software Housekeeping telemetry packet. The Startup Message packet is described in more detail in Section 3.1.3. The Software Housekeeping packet is described in more detail in Section 3.4.3.
Warnings
This section describes how to select which BEP should be active, and drive the interface hardware.
Description
By default, after a power-on, both BEP-A and BEP-B will assume that the active BEP is BEP-A. To select BEP-B, one must explicitly issue a hardware serial digital command to select it. In order to avoid confusion, and reduce the possibility of problems, it is recommended that a select command be issued whenever one or both BEPs are first powered on. (NOTE: see Warnings concerning FEP power when selecting BEPs). Whenever a BEP is de-selected, its processor is held in a reset state and the software on the BEP is halted. If the BEP is then selected, the reset is released, and the BEP software will proceed to boot and run.
Commands
The following are the commands issued to select a particular BEP.
Engineering Telemetry
The currently selected BEP is indicated by a bi-level in the engineering telemetry (see Table 3.6).
Mnemonic | Command Type | Value | Description
|
1STAT4ST | Bi-level: BEP Id | 0 | If BEP-A is selected, this bi-level will have a value of 0. |
1STAT4ST | Bi-level: BEP Id | 1 | If BEP-B is selected, this bi-level will have a value of 1. NOTE: If the active BEP is powered off at the PSMC, all bilevels will float to ‘1’, which may lead to confusion under some conditions. |
Science Telemetry
If the chosen BEP is not already selected, then the select command releases the BEP’s reset line, causing the instrument software to load and run. Depending on the state of the BEP’s Boot Modifier Flag at the time of the select command is received, the instrument software’s bootstrap loader will either (a) load code from EEPROM (see Section 3.1.3) and will produce its standard Startup Message telemetry packet, and subsequent Software Housekeeping telemetry packets, or (b) will load code from a series of software serial command packets (Section 3.1.4), which may or may not produce any science telemetry, depending on what code is loaded and run.
Warnings
Each ACIS Back End Processor is capable of loading its software either from its Read-Only-Memory, or from its uplink channel via software serial commands. This section describes the former.
Description
When a Back-End Processor (BEP) is powered on and selected, it executes a bootstrap loader residing within its Read-Only Memory (EEPROM). A special EGSE cable was required to enable the “Electrically Erasable and Programmable” function of this memory, and was removed prior to launch. This loader copies the bulk of the instrument software from the EEPROM into the BEP’s RAM, and transfers control to the loaded code. The loaded code detects that the instrument has been started by a power on and as a result takes the following actions:
Commands
To power on and run Side-A BEP:
IP&CL syntax | bcmd syntax | Command Description
|
1DPPSAEN | enable dpa a | Enable Side-A DPA Power Supply |
1DPPSAON | poweron dpa | Power-On Side-A DPA Power Supply |
1BSELICL(v=0) | select bep a | Select Side-A BEP ensuring no contention with BEP-B. |
To power on and run Side-B BEP:
IP&CL syntax | bcmd syntax | Command Description
|
1DPPSBEN | enable dpa b | Enable Side-B DPA Power Supply |
1DPPSBON | poweron dpa b | Power-On Side-B DPA Power Supply |
1BSELICL(v=1) | select bep b | Select Side-B BEP |
Engineering Telemetry
Command Verifiers
1DPPSAX | 0..1 | Reports if DPA Power Supply A is enabled |
1DPPSA | 0..1 | Reports if DPA Power Supply A is on |
1DPPSBX | 0..1 | Reports if DPA Power Supply B is enabled |
1DPPSB | 0..1 | Reports if DPA Power Supply B is on |
1STAT4ST | 0 | indicates BEP-A is selected, |
| 1 | indicates BEP-B is selected |
|
| (NOTE: See Warnings in Section 3.1.2) |
| ||
Boot Bi-level Sequence
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_RUN_PATCH | (1,0,0,1) | Resetting patch list |
LED_RUN_STARTUP | (1,0,0,0) | After an initial 64 second wait, the BEP’s Software Housekeeping task will alternate the bi-levels between two values every 64 seconds indicating whether or not a science run is in progress, and that the BEP was not restarted due to a watchdog reset. If a science run is not in progress, the bi-levels will alternate between: |
LED_RUN_IDLE_A | (0,1,1,0) |
|
LED_RUN_IDLE_B | (0,1,1,1) |
|
| ||
If a science run is activated, the bi-levels will change to:
LED_RUN_SCIENCE_A | (0,1,0,0) |
|
LED_RUN_SCIENCE_B | (0,1,0,1) |
|
Science Telemetry
Startup Message from Power On Boot
bepStartupMessage[n] = { | ||
synch | = 0x736f4166 | # Packet synch word |
telemetryLength | = 7 | # Packet length in words |
formatTag | = 8 | # TTAG_STARTUP |
sequenceNumber | = n | # Packet sequence number |
bepTickCounter | = n | # (n < 10) BEP interrupt clock value |
version | = 11 | # BEP software version in EEPROM |
lastFatalBepTickCounter | = n | # BEP interrupt count at last fatal error |
lastFatalCode | = n | # Stored BEP interrupt code (see Table 3.15) |
watchdogFlag | = 0..1 | # if 1, SEU or hardware error |
patchValidFlag | = 0..1 | # if 0, SEU or hardware error |
configFlag | = 0..1 | # if 0, SEU or hardware error |
parametersFlag | = 0..1 | # if 0, SEU or hardware error |
warmBootFlag | = 0..1 | # if 1, SEU or H/W error |
} | ||
Software Housekeeping
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # Most recent reported value |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (~10 per second) |
value | = 0 | # Most recent reported value |
} | ||
} | ||
Warnings
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_RUN_PATCH | (1,0,0,1) | Copying patches or resetting patch list |
If the following bi-level code “sticks” for more than 64 seconds, there may also be a problem:
LED_RUN_STARTUP | (1,0,0,0) | Starting the multi-tasking executive |
In addition, software patches may set the bi-levels to special values in order to signal to Chandra’s On-Board Computer that some action should be taken. Currently, the following patches use special (unique) combinations:
Patch | Mnemonic | Value | Meaning
|
txings | LED_BOOT_SPARE1 | (1,1,0,1) | The threshold crossing detector has tripped |
deahktrip | LED_BOOT_SPARE2 | (1,1,1,0) | One or more DPA temperature channels has exceeded its red limits |
Description
Cold Boots are performed in order to reset and re-initialize a BEP into an “as-launched” state, without resorting to cycling the power. In order to perform a cold boot, the desired BEP must be powered-on, and selected, with its Load-from-Uplink flag cleared (default condition after power-on), and its Warmboot flag cleared (default condition after power-on). It then must receive a BEP Halt command, followed by a BEP Run command. This will cause the BEP CPU to start executing the loader in its EEPROM. From then on, the boot process of the BEP appears just as a power-on boot. The loader and startup software will reset the Patch List, and reload the default tables from EEPROM.
Like a Power-On boot, a cold boot of the BEP:
Commands
IP&CL syntax | bcmd syntax | Command Description
|
1BMODIBM (v=0) | set bootmodifier off | Enable boot from EEPROM mode |
1WRMBTSB (v=0) | set warmboot off | Enable cold boot mode |
1RSETIRT (v=1) | halt bep | Stop the active BEP |
1RSETIRT (v=0) | run bep | Restart and reboot the active BEP |
Engineering Telemetry
Boot Bi-level Sequence (for detail, refer to Engineering Telemetry in Section 3.1.3.1)
LED_BOOT_RESET |
LED_RUN_PATCH |
LED_RUN_STARTUP |
LED_RUN_IDLE_A |
LED_RUN_IDLE_B |
LED_RUN_SCIENCE_A |
LED_RUN_SCIENCE_B |
Science Telemetry
∙ Startup Message
bepStartupMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_STARTUP |
bepTickCounter | = n | # (n < 10) BEP interrupt clock value |
version | = 11 | # BEP software version in EEPROM |
lastFatalBepTickCounter | = n | # BEP interrupt count at last fatal error |
lastFatalCode | = n | # Stored BEP interrupt code (see Table 3.15) |
watchdogFlag | = 0..1 | # =1 if watchdog timer expired |
patchValidFlag | = 0..1 | # * =0 if patch list invalid |
configFlag | = 0..1 | # * =0 if config table invalid |
parametersFlag | = 0..1 | # * =0 if pblocks invalid |
warmBootFlag | = 0..1 | # =1 if BEP warm booted |
} | ||
NOTE: if any of the 3 starred fields is ‘0’, suspect a BEP hardware error or single-event upset (SEU) or telemetry corruption.
∙ Software Housekeeping
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # Most recent reported value |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (~10 per second) |
value | = 0 | # Most recent reported value |
} | ||
} | ||
Warnings
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_RUN_PATCH | (1,0,0,1) | Copying patches or resetting patch list |
If the following bi-level code “sticks” for more than 64 seconds, there may also be a problem:
LED_RUN_STARTUP | (1,0,0,0) | Starting the multi-tasking executive |
Description
A Warm Boot is used to reset a BEP’s hardware, re-load its code and data from EEPROM and install its patch list while attempting to maintain the already loaded configuration tables and parameter blocks. A Warm Boot retains the BEP’s Patch List, Parameter Blocks, etc. To issue a Warm Boot, the BEP must be powered on and selected, with its Load-from-Uplink flag de-asserted, but its warmBootFlag and its watchdogFoot flags bothflag in an asserted state. Upon receipt of a Halt BEP command followed by a Run BEP command, the BEP hardware will reset and invoke the loader software in its EEPROM. This loader copies the bulk of the instrument software from the EEPROM into the BEP’s RAM, and transfers control to the loaded code. The loaded code detects that the instrument warmBootFlag flag is asserted, and installs the Patch List nodes, overwriting the code and data areas specified by the nodes with the data stored in the patch nodes. The startup software then issues a bepStartupMessage telemetry packet.
A Warm Boot of the BEP:
Commands
IP&CL syntax | bcmd syntax | Command Description
|
1BMODIBM (v=0) | set bootmodifier off | Set the Bootmodifier flag off |
1WRMBTSB (v=1) | set warmboot on | Set the Warmboot flag on |
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1RSETIRT (v=0) | run bep | Restart the active BEP |
Engineering Telemetry
Boot Bi-level Sequence (for detail, refer to Engineering Telemetry in Section 3.1.3.1)
LED_BOOT_RESET |
LED_RUN_PATCH |
LED_RUN_STARTUP |
LED_RUN_IDLE_A |
LED_RUN_IDLE_B |
LED_RUN_SCIENCE_A |
LED_RUN_SCIENCE_B |
Science Telemetry
∙ Startup Message
The following packet is received after a successful warm boot. If valid patches had been loaded, they will typically set the version field to a value denoting the patch level (see column “Ver” of Table F.2). Otherwise, version will be 11, the value set from the EEPROM code.
bepStartupMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_STARTUP |
bepTickCounter | = n | # n < 10 or SEU or H/W error |
version | = n | # ≠11 indicates patched or SEU or H/W error |
lastFatalBepTickCounter | = n | # BEP interrupt count at last fatal error |
lastFatalCode | = n | # Stored BEP interrupt code (see Table 3.15) |
watchdogFlag | = 0 | # = 1 if watchdog boot or SEU or H/W |
patchValidFlag | = 0 | # = 0 if patch list corrupted |
configFlag | = 0 | # = 0 if config table corrupted |
parametersFlag | = 0 | # = 0 if parameter blocks corrupted |
warmBootFlag | = 1 | # = 0 if SEU or H/W error |
} | ||
∙ Software Housekeeping
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # or patched or SEU or H/W error |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (≈10/second) |
value | = 0 | # Most recent reported value |
} | ||
} | ||
If an error is encountered restoring DEA video board power then expect an additional statistics item (see below) in the housekeeping packet, where the value field reports the video board ID (0..9) in its most significant 16 bits and the internal DEA error code (see Table B.9 in Appendix B.4) in its least significant 16.
statistics[2] = { | ||
swStatisticId | = 53 | # SWSTAT_DEABOARD_ERROR |
count | = n | # Number of reports |
value | = v | # v = (boardId << 16) | deaErr |
} | ||
Warnings
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_RUN_PATCH | (1,0,0,1) | Copying patches or resetting patch list |
If the following bi-level code “sticks” for more than 64 seconds, there may also be a problem:
LED_RUN_STARTUP | (1,0,0,0) | Starting the multi-tasking executive |
Certain software patches also set software bilevels to special values so that the Chandra On-Board Computer can detect them and take some preset action. For details, see Warning 5 on Page 37.
Description
When a BEP’s watchdog timer expires, the hardware sets a watchdog-reboot flag and issues a hardware reset. This may be caused by a task lockup in the BEP, or by a trapped fatal error condition, in which the recovery code uses the watchdog timer to reset the BEP. Once the BEP reboots, the loader in the BEP’s EEPROM is invoked. If the Load-from-Uplink flag is de-asserted, the loader copies code and data from EEPROM into RAM, and invokes the loaded startup software. The startup software checks the state of the Warmboot flag, and if asserted, it performs a warm-reboot sequence, except that it skips the step that installs the patches. If the Warmboot flag is de-asserted, the boot-sequence is identical to that of a cold-reboot (see Section 3.1.3.2). The ground can detect the occurrence of a Watchdog reboot via the Startup Message telemetry packet, and via the bi-level telemetry items.
A Warm Watchdog Reset of the BEP:
Commands
None (although the crash may be the result of an earlier command).
Engineering Telemetry
Boot Bi-level Sequence
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_RUN_PATCH | (1,0,0,1) | Copying patches |
LED_RUN_STARTUP | (1,0,0,0) | Starting the multi-tasking executive |
| ||
After an initial 64 second wait, the BEP’s Software Housekeeping task will alternate the bi-levels between two values every 64 seconds indicating that no science runs are in progress, and that the BEP was restarted due to a watchdog reset:
LED_WD_IDLE_A | (0,0,1,0) |
LED_WD_IDLE_B | (0,0,1,1) |
If a science run is activated, the bi-levels will change to:
LED_WD_SCIENCE_A | (0,0,0,0) |
LED_WD_SCIENCE_B | (0,0,0,1) |
Science Telemetry
If the Watchdog expiration is due to a caught Fatal Error, the BEP will issue a Fatal Error Message telemetry packet, (provided the processor is still capable of forming and queueing the request), and then force a watchdog timer expiration:
∙ Fatal Message
fatalMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_FATAL |
bepTickCounter | = n | # BEP tick on detection of error |
fatalCode | = n | # BEP interrupt code (see Table 3.15) |
fatalValue | = n | # meaning depends on fatalCode |
} | ||
∙ Startup Message
bepStartupMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_STARTUP |
bepTickCounter | = n | # n < 10 or SEU or H/W error |
version | = 11 | # or patched or SEU or H/W error |
lastFatalBepTickCounter | = n | # BEP interrupt count at last fatal error |
lastFatalCode | = n | # Stored BEP interrupt code (see Table 3.15) |
watchdogFlag | = 1 | # or not watchdog or SEU or H/W |
patchValidFlag | = 0 | # = 0 if patch list corrupted |
configFlag | = 0 | # = 0 if config table corrupted |
parametersFlag | = 0 | # = 0 if parameter blocks corrupted |
warmBootFlag | = 0..1 | # = 0 if (coldboot) or 1 (warmboot) |
} | ||
∙ Software Housekeeping
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # or patched or SEU or H/W error |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (≈10/second) |
value | = 0 | # Most recent reported value |
} | ||
} | ||
If an error is encountered restoring DEA video board power then expect an additional statistics item (see below) in the housekeeping packet, where the value field reports the video board ID (0..9) in its most significant 16 bits and the internal DEA error code (see Table B.9 in Appendix B.4) in its least significant 16.
statistics[2] = { | ||
swStatisticId | = 53 | # SWSTAT_DEABOARD_ERROR |
count | = n | # Number of reports |
value | = v | # v = (boardId << 16) | deaErr |
} | ||
Warning
Description
The Load-from-Uplink feature of ACIS allows a maintainer to load arbitrary software into a Back End Processor using the software serial-digital command channel. In order to load the BEP, one must first assert the Load-from-Uplink flag, and then reset the BEP (Halt BEP/Run BEP). The hardware transfers control to the loader software in the BEP’s EEPROM. The loader detects that the Load-from-Uplink flag is asserted, and waits for a “Start Upload” command packet followed by zero or more “Continue Upload” command packets. Once the entire load is copied from the uplinked packets into the BEP’s RAM, the loader invokes the loaded software. Once running, the loaded code has control of the instrument, and is responsible for all subsequent software command processing (if any) and telemetry production (if any).
If the loader receives an unrecognized command packet, it will discard the packet, and re-start the load, waiting for an initial “Start Upload” command packet.
If the loader receives a new “Start Upload” command packet in the middle of an existing load, the loader will stop the current load (leaving what was already copied into RAM intact) and start the new load. This behavior can be used to perform scatter loads into RAM (see Section 5.9).
Commands
IP&CL syntax | bcmd syntax | Command Description
|
1BMODIBM (v=1) | set bootmodifier on | Set the Bootmodifier flag on |
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1RSETIRT (v=0) | run bep | Restart the active BEP |
∙ Start Uplink
Begin by issuing a start command, which has the following content in bcmd format:
start n uplink loadAddress totalCount executeAddress { | ||
word1 word2 ... | ||
} | ||
where a totalCount of 32-bit words are to be loaded into BEP memory starting at loadAddress and then executed, starting at executeAddress. If the number of words actually specified, i.e., word1, word2, etc., is less than totalCount, the BEP will not reboot but wait to expect additional start or continue commands.
∙ Continue Uplink
continue n uplink { | # CMDOP_CONTINUE_UPLOAD | |
word1 word2 ... | ||
} | ||
Once totalCount words have been loaded, either from start or continue, BEP execution will begin at the most recently supplied executeAddress. Once the program has been loaded and started, it is responsible for processing subsequent software serial commands (if any).
Engineering Telemetry
Boot Bi-level Sequence
LED_BOOT_RESET | (1,1,1,1) | BEP has just reset |
LED_BOOT_UPLINK_WAIT | (1,1,0,0) | Waiting for “Start Upload” packet |
LED_BOOT_UPLINK_COPY | (1,0,1,1) | Waiting for “Continue Upload” pkts |
LED_BOOT_UPLINK_EXECUTE | (1,0,1,0) | Calling loaded program |
| ||
Any further usage of the bi-levels is the responsibility of the loaded program.
Science Telemetry
Once the program has been loaded and started, it is responsible for all science telemetry (if any).
Warning
In the case of a Boot from Uplink (see Section 3.1.4) the boot takes as long as needed for the instructions and data to be sent to the active BEP in startUpload and continueUpload command packets. Otherwise, it generally takes 0.3 seconds to copy the contents of EEPROM to D-cache and I-cache, apply patches and begin executing.
This section describes how the ACIS instrument software is halted.
This section describes how to power-off the ACIS Digital Processor Assembly (DPA) Back End Processors (BEP).
Description
One method of stopping the ACIS software from running is to power-off the “active” BEP. This can be accomplished by issuing a power-off command or a disable command to the PSMC responsible for the active BEP (see Section 3.1.2 for a discussion on selecting a BEP). The recommended method is to first issue the “power-off” command, followed by the “disable” command, however, just issuing the disable command has the same affect.
Commands
The following are the commands issued to power-off the BEPs. See Table 2.1 for commands to power-on the DPA’s BEPs. Also, see Section 3.3.3 for commands needed to enable and power on and off the Detector Electronics Assembly.
Mnemonic | Command Type | Description
|
Power Off Side-A BEP
| ||
1DPPSAOF | Pulse to PSMC Side-A | Power-Off (but don’t disable) the PSMC DPA Side-A |
1DPPSADS | Pulse to PSMC Side-A | Disable the PSMC DPA Side-A |
Power Off Side-B BEP
| ||
1DPPSBOF | Pulse to PSMC Side-B | Power-Off (but don’t disable) the PSMC DPA Side-B |
1DPPSBDS | Pulse to PSMC Side-B | Disable the PSMC DPA Side-B |
Engineering Telemetry
For a description of the state of the Engineering telemetry when power is off versus on, refer to Table 3.2.
Science Telemetry
When the power is off on a BEP, the science telemetry is undefined, although experience in the lab indicates that it tends to float to logical ’1’.
Warning
Description
Another method of stopping the ACIS software is to halt the active Back End Processor. This is accomplished using a Halt BEP hardware command, or by selecting the other BEP, which throws the current BEP into a reset state (note, that if the other BEP is powered, it will run).
Commands
IP&CL syntax | bcmd syntax | Command Description
|
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1BSELICL (v=1) | select bep b | Select Side-B BEP |
1BSELICL (v=0) | select bep a | Select Side-A BEP |
If the active BEP is not halted before the “other” BEP is selected, the former will be halted, the latter will boot up immediately and write a bepStartupMessage to telemetry. It is better practice only to issue select commands when the BEP is halted.
Engineering Telemetry
∙ Selected BEP Bi-level
1STAT4ST | = 0 | Indicates BEP-A is selected |
| = 1 | Indicates BEP-B is selected |
∙ Reset Bi-level
1STAT5ST | = 0 | Selected BEP is not reset (i.e. is running) |
| = 1 | The currently selected BEP is held in reset |
Science Telemetry
When the selected BEP is powered up and held in a reset state, it outputs a series of fill bytes, 0xb7, to the software serial digital telemetry channel.
Warning
This section describes how to modify the ACIS software system configuration table, including controlling the power to the Front End Processors and the Detector Electronics Assembly Video Boards.
The System Configuration Table, described in Appendix C, consists of a table of various settings. These settings are broken into the following components:
FEP and DEA Power
DEA Interface Board Settings
DEA Video Board Settings
The values in the table are modified using a “Change System Configuration” command packet, whose contents identify a set of items and their values to load into the table.
The instrument’s System Configuration Task polls this table once per second to see if anything has changed in the FEP/DEA Power, or DEA Interface Board settings since the last time the table was polled. If anything has changed, the task updates the corresponding power item, or item in the DEA interface board.
The DEA Video board settings, on the other hand, are only used at the start of a Science Run. At that time, they are used to configure the various Digital-to-Analog settings in the video board.
Description
The Front End Processors (FEPs) are split into two groups, FEPs 0, 1, 2 are powered by the Side-A DPA Power Supply, and FEPs 3, 4 and 5 are powered by the Side-B DPA Power Supply (refer to Table 3.2 for a description of powering the DPA Power supplies). Prior to enabling the power to a specific FEP, the appropriate supply must be on. Once the FEPs supply is on, its power must be enabled by the BEP using an entry in the Change System Configuration software command.
The FEP Power entry of the Change System Configuration command consists of a bit-map, where bit 0 (LSB) corresponds to FEP 0, bit 1 corresponds to FEP 1, etc. If the bit in the map is 0, then the corresponding FEP is powered off. If the bit is a 1, then the FEP is powered on.
In order to avoid exceeding possible power limitations (there are currently no such limitations, but things change), the System Configuration task within ACIS always first powers off those FEPs that are to be off, and then powers on the FEPs that should be running. There is a 1 second delay between each power off command. There will never be less than a 1 second delay between each power on. However, it currently takes 7 to 10 seconds to load the current FEP software into each FEP, so it can take up to 1 minute to power on all 6 FEPs. If the FEPs are already in their desired states (i.e. off or on), the System Configuration task takes no action.
The Side-A and Side-B BEPs can both enable and disable power to all 6 FEPs. In order to prevent a failure on one BEP from preventing the other being able to power on a FEP, the power enable outputs of the BEPs are logically OR’d. This can lead to confusion when selecting between BEPs. If both BEPs are powered (which they would have to be if you were using all 6 FEPs), and the previously selected BEP has power enabled to some of the FEPs, the currently selected BEP will not be able to power-off those FEPs. To avoid this condition, always issue a command to power off FEPs on the active BEP prior to selecting the other BEP.
An attempt to enable power to a FEP that does not have its corresponding power-supply on will generate a memory bus error exception on the BEP, which is trapped and handled by the BEP ONLY when the FEP is commanded on. In this situation, the System Configuration task will repeat its attempts to power on the FEP once a second. However, if a FEP is already on, and its power-supply is turned off, the next access to the FEP will cause a non-recovered bus error exception, resulting in a Fatal Error telemetry message, and watchdog reset of the BEP. Also note that, even when handled by the BEP, these bus errors will disrupt the transmission of a telemetry packet being sent to the RCTU, causing fill-pattern gaps in middle of the telemetry packets.
An un-handled memory bus exception (and resulting Fatal Error and Watchdog Reset) will also be caused if a FEP’s power is disabled in the middle of a BEP to FEP memory access. In order to avoid this, disable FEP power only when there are no science runs active, and no commanded FEP memory loads or dumps in progress.
Commands
∙ Change System Configuration
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = n | # FEP power bit-map, where bits 0-5 |
# correspond to FEPs 0-5, respectively, | ||
# and bits 7-15 are unused. | ||
} | ||
} | ||
∙ For example, to power-on all 6 FEPs:
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = 0x3f | # Select all 6 FEPs |
} | ||
} | ||
∙ To power on FEP 0 only (and power off FEPs 1-5, if they were on):
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = 0x1 | # Select only FEP_0 |
} | ||
} | ||
Engineering Telemetry
The only engineering telemetry items that indicate whether or not FEPs are up and running are the electric current channels. These can give an indication as to how many FEPs are on and in what state they are in, but do not give very specific information beyond that. Refer to Table E.1 in Appendix E for a table of power levels under different instrument configurations.
Science Telemetry
∙ Command Echo
commandEcho[n] = { | ||
... | ||
formatTag | = 7 | # TTAG_CMD_ECHO |
arrival | = n | # BEP timer value when command arrived |
result | = 1 | # Return code from command manager |
changeConfigSetting = { | ||
commandLength | = 5 | # Length of command packet (half-words) |
commandIdentifier | = n | # Command sequence number |
commandOpcode | = 32 | # CMDOP_CHANGE_SYS_ENTRY |
entries[0] = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = n | # FEP power bit-map |
} | ||
} | ||
The result field should contain the value 1 (CMDRESULT_OK), indicating that the command was received by the BEP command manager task and dispatched to the relevant thread for processing. It does not indicate that the command was executed successfully. For that, it is necessary to wait for some telemetry indication, e.g., in the current example, for reports from software housekeeping. The housekeeping report may be split between more than one housekeeping packets.
∙ Software Housekeeping Statistics
Each previously unpowered FEP to be powered up (bits set in the itemValue, above) increments the count in software housekeeping entries SWSTAT_FEP_POWERON, SWSTAT_FEP_STARTLOAD, SWSTAT_FEP_ENDLOAD, and SWSTAT_FEP_EXECMEM, and adds 3 to the count reported in SWSTAT_FEP_WRITEMEM. Each previously powered FEP to be powered down will increment the count in SWSTAT_FEP_POWEROFF.
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # or patched or SEU or H/W error |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (~10/second) |
value | = 0 | # Most recent reported value |
} | ||
statistics[2] = { | ||
swStatisticId | = 57 | # SWSTAT_FEP_EXECMEM |
count | = n | # count of FEPs being powered on |
value | = n | # FEP Id of last FEP powered on |
} | ||
statistics[3] = { | ||
swStatisticId | = 56 | # SWSTAT_FEP_WRITEMEM |
count | = n | # count of FEPs being powered on |
value | = n | # FEP Id of last FEP powered on |
} | ||
statistics[4] = { | ||
swStatisticId | = 76 | # SWSTAT_FEPMAN_POWERON |
count | = n | # count of FEPs being powered on |
value | = n | # FEP Id of last FEP powered on |
} | ||
statistics[5] = { | ||
swStatisticId | = 77 | # SWSTAT_FEPMAN_POWEROFF |
count | = n | # count of FEPs being powered off |
value | = n | # FEP Id of last FEP powered off |
} | ||
statistics[6] = { | ||
swStatisticId | = 78 | # SWSTAT_FEPMAN_STARTLOAD |
count | = n | # count of FEPs being powered on |
value | = n | # FEP Id of last FEP powered on |
} | ||
statistics[7] = { | ||
swStatisticId | = 79 | # SWSTAT_FEPMAN_ENDLOAD |
count | = n | # count of FEPs being powered on |
value | = n | # FEP Id of last FEP powered on |
} | ||
} | ||
If there were errors during the execution of the command, or an activity was using one of the FEPs that was being powered off, the Software Housekeeping statistics may also include entries:
SWSTAT_FEPLOCK_TIMEOUT | = 4 | FEP Wait: Wait for lock timed out |
SWSTAT_FEPLOCK_POWEROFF | = 5 | FEP Wait: FEP has no power |
SWSTAT_FEPLOCK_RESET | = 6 | FEP Wait: FEP is reset |
SWSTAT_FEPLOCK_NOIO | = 7 | FEP Wait: FEP has no mailbox/ringbuffer |
|
| |
SWSTAT_FEPREPLY_TIMEOUT | = 8 | FEP Reply: FEP timed out |
SWSTAT_FEPREPLY_POWEROFF | = 9 | FEP Reply: FEP has no power |
SWSTAT_FEPREPLY_RESET | = 10 | FEP Reply: FEP is reset |
SWSTAT_FEPREPLY_NOIO | = 11 | FEP Reply: FEP has no mailbox/ringbuffer |
|
| |
SWSTAT_FEPCMD_MBOXSTATE | = 54 | FEP Mailbox not empty (protocol error) |
| ||
If an attempt is made to enable FEP power, but its corresponding power supply is off, the following Software Housekeeping entry will be reported:
SWSTAT_INTR_FEPBUS | = 22 | FEP access causes bus error exception on BEP |
If power is removed while the FEP is being used during a run or memory load, a Fatal Error and Watchdog Reset may result:
∙ Fatal Error
fatalMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_FATAL |
bepTickCounter | = n | # BEP tick on detection of error |
fatalCode | = 7 | # FATAL_INTR_FEP_BUS_ERROR |
fatalValue | = n | # Contents of R3000 bad virtual address register |
} | ||
Warning
Description
The Detector Electronics Assembly consists of two interface boards, and 10 video boards, one for each CCD. Each interface board is powered separately, the primary (board 11) from the DEA Side-A Power Supply, and the backup (board 12) from the DEA Side-B Power Supply. Only one interface board should be powered at a time. The video boards are powered in pairs via a set of latching relays on the primary interface board, and enabled via the active interface board. These relays operate from the current active power supply, and, whenever the supplies are switched, must be commanded to switch to the active supply.
Like the DPA Power Supplies, the DEA Power Supplies are commanded using hardware pulse commands, consisting of enable, on, off and disable. However, the video board relays and power enables are set from the BEP’s System Configuration Table (see Appendix C), which is modified with a “Change System Configuration” command packet. Table 3.8 shows the relationships between the CCDs, relays and video boards.
CCD | CcdId Value | Video Board | Relay Set
|
I0 | CCD_I0 = 0 | 1 | 0 |
I1 | CCD_I1 = 1 | 3 | 1 |
I2 | CCD_I2 = 2 | 5 | 2 |
I3 | CCD_I3 = 3 | 7 | 3 |
S0 | CCD_S0 = 4 | 2 | 0 |
S1 | CCD_S1 = 5 | 4 | 1 |
S2 | CCD_S2 = 6 | 8 | 3 |
S3 | CCD_S3 = 7 | 6 | 2 |
S4 | CCD_S4 = 8 | 9 | 4 |
S5 | CCD_S5 = 9 | 10 | 4 |
Because the ACIS software internally translates references to CCDs into DEA video board ids, all command and telemetry references identify video boards using the corresponding CCD identifier. The DEA Video Power entry of the Change System Configuration command consists of a bit-map, where bit 0 (LSB) corresponds to CCD I0, bit 1 corresponds to CCD I1, etc. If the bit in the map is 0, then the corresponding video board is powered off. If the bit is a 1, then the video board is powered on. The System Configuration Task examines its tables whenever they are altered. It powers off any video board that changes from “on” to “off”, and powers on any board that changes from “off” to “on”. To avoid stressing the power supply, the System Configuration Task ensures at least a 1 second delay between each power command. The longest power switch has been found to take between 12 seconds (all 10 boards on ⇒ off) and 16 seconds (all 10 boards off ⇒ on)..
The relays are set to point to the current power supply using the “Relay Set” entries of the Change System Configuration command. If an entry is set to a non-zero value, a command is issued to the DEA interface board to switch the corresponding relay, and the associated pair of video boards, to the currently active power supply. If an entry is set to 0, no action is taken. Since the relays are latching, they remain switched across power-cycles. The only way to “unswitch” a relay is to switch from one DEA Power Supply to the other.
Commands
To power on Side-A DEA Power Supply (and the primary DEA interface board) (NOTE: The Side-B DEA Power Supply must be off prior to issuing these commands):
IP&CL syntax | bcmd syntax | Command Description
|
1DEPSAEN | Enable dea a | Enable DEA Side-A Power Supply |
1DEPSAON | Poweron dea a | Power On DEA Side-A Power |
To power off the Side-A DEA Power Supply:
IP&CL syntax | bcmd syntax | Command Description
|
1DEPSAOF | poweroff dea a | Power off DEA Side-A Power Supply |
1DEPSADS | disable dea a | Disable DEA Side-A Power Supply |
To power on the Side-B DEA Power Supply (and the redundant DEA interface board) (NOTE: The Side-A DEA Power Supply must be off prior to issuing these commands):
IP&CL syntax | bcmd syntax | Command Description
|
1DEPSBEN | enable dea b | Enable DEA Side-B Power Supply |
1DEPSBON | poweron dea b | Power On DEA Side-B Power |
To power off the Side-B DEA Power Supply:
IP&CL syntax | bcmd syntax | Command Description
|
1DEPSBOF | poweroff dea b | Power off DEA Side-B Power Supply |
1DEPSBDS | disable dea b | Disable DEA Side-B Power Supply |
To switch all of the video relays to the currently active interface board:
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 11 | # SYSSET_CNTL_RELAY_SET_0 (CCDs I0/S0) |
itemValue | = 1 | # Issue switch command |
} | ||
entries = { | ||
itemId | = 12 | # SYSSET_CNTL_RELAY_SET_1 (CCDs I1/S1) |
itemValue | = 1 | # Issue switch command |
} | ||
entries = { | ||
itemId | = 13 | # SYSSET_CNTL_RELAY_SET_2 (CCDs I2/S3) |
itemValue | = 1 | # Issue switch command |
} | ||
entries = { | ||
itemId | = 14 | # SYSSET_CNTL_RELAY_SET_3 (CCDs I3/S2) |
itemValue | = 1 | # Issue switch command |
} | ||
entries = { | ||
itemId | = 15 | # SYSSET_CNTL_RELAY_SET_4 (CCDs S4/S5) |
itemValue | = 1 | # Issue switch command |
} | ||
} | ||
Note that if itemValue is 0, then the entry has no effect on the relay setting. To power on and off the DEA Video Boards (NOTE: Either A or B side DEA Power must be on, but not both, and the relay corresponding to the desired CCDs must be switched to the active supply):
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries | = { | |
itemId | = 0 | # SYSSET_DEA_POWER |
itemValue | = n | # DEA power bit map: where bits 0-9 |
# correspond to CCDs I0-S5, respectively, | ||
# and bits 10-15 are unused. | ||
# See the “Commands” section on Page 56 | ||
} | ||
} | ||
Engineering Telemetry
The only engineering telemetry items that indicate whether or not DEA Video boards (and by induction, their relay states) are up and running are the electric current channels. These can give an indication as to how many video boards are on and in what state they are in, but do not give very specific information beyond that. Refer to Table E.1 in Appendix E for a table of power levels under different instrument configurations.
Mnemonic | Val | Status | Description
|
1DEPSAX | 0 | disabled |
Verifies DEA Power Supply Side-A enabled state |
1 | enabled |
| |
1DEPSA | 0 | not powered |
Verifies DEA Power Supply Side-A powered state |
1 | powered |
|
|
1DEPSBX | 0 | disabled |
Verifies DEA Power Supply Side-B enabled state |
1 | enabled |
|
|
1DEPSA | 0 | not powered |
Verifies DEA Power Supply Side-B powered state |
1 | powered |
|
|
Science Telemetry
∙ Command Echo from Relay Command
commandEcho[n] = { | ||
... | ||
formatTag | = 7 | # TTAG_CMD_ECHO |
arrival | = n | # BEP timer value when command arrived |
result | = 1 | # Return code from command manager |
changeConfigSetting | = { | |
... | ||
entries[0] = { | ||
itemId | = 11 | # SYSSET_CNTL_RELAY_SET_0 |
itemValue | = 1 | # Issue switch command |
} | ||
entries[1] = { | ||
itemId | = 12 | # SYSSET_CNTL_RELAY_SET_1 |
itemValue | = 1 | # Issue switch command |
} | ||
entries[2] = { | ||
itemId | = 13 | # SYSSET_CNTL_RELAY_SET_2 |
itemValue | = 1 | # Issue switch command |
} | ||
entries[3] = { | ||
itemId | = 14 | # SYSSET_CNTL_RELAY_SET_3 |
itemValue | = 1 | # Issue switch command |
} | ||
entries[4] = { | ||
itemId | = 15 | # SYSSET_CNTL_RELAY_SET_4 |
itemValue | = 1 | # Issue switch command |
} | ||
} | ||
} | ||
Note that the 5 SYSSET_CNTL_RELAY_SET indicators only show the desired relay positions, not whether the relays actually switched. The same is true of these fields in the system configuration table (see Table 3.10).
∙ Command Echo from DEA Video Board Power Enable
commandEcho[n] = { | ||
... | ||
formatTag | = 7 | # TTAG_CMD_ECHO |
arrival | = n | # BEP timer value when command arrived |
result | = 1 | # Return code from command manager |
changeConfigSetting | = { | |
... | ||
entries[0] = { | ||
itemId | = 0 | # SYSSET_DEA_POWER |
itemValue | = 1 | # DEA Video Board power bit-map |
} | ||
} | ||
∙ Software Housekeeping Statistics
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # =11 or patch # or SEU or H/W error |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports |
value | = 0 | # or SEU or H/W error |
} | ||
statistics[2] = { | ||
swStatisticId | = 81 | # SWSTAT_DEACCD_POWEROFF |
count | = n | # Number of Video boards being powered off |
value | = n | # CCD Id associated with last Video turned off |
} | ||
statistics[3] = { | ||
swStatisticId | = 80 | # SWSTAT_DEACCD_POWERON |
count | = n | # count of Video boards being powered on |
value | = n | # CCD Id associated with last Video turned on |
} | ||
} | ||
If an error is encountered while commanding the DEA, either to switch the relays, or control power to the video boards, the following housekeeping entry will be supplied:
SWSTAT_DEABOARD_ERROR | = 53 | Error issuing command to DEA interface |
where the 16 least significant bits of reported value field contain an internal software error code, and the most significant 16 bits of the value field contain the video board slot index (as opposed to the CCD Id), or “11” if the command was directed to the interface board.
If DEA Housekeeping is running (see Section 3.4.6) and is querying the state of the relays, it will be indicated as follows:
deaHousekeepingData[n] { | ||
... | ||
formatTag | = 11 | # TTAG_DEA_HOUSE |
deaBlockId | = n | # Id of parameter block used for the DEA Run |
commandId | = n | # Id of the command that started the DEA Run |
bepTickCounter | = n | # BEP Interrupt Count (10Hz tick) at start of |
# DEA housekeeping acquisition | ||
entries[0] = { | ||
ccdId | = 10 | # =10 CCD_DESELECT indicating the interface board |
queryId | = 0 | # DEAHOUSE_CNTL_RELAY (state of relays) |
value | = n† | # State of the relays |
} | ||
} | ||
† Bit 0 of the DEAHOUSE_CNTL_RELAY channel corresponds to relay set 0 (see Table 3.8), bit 1 to relay set 1, etc. If a bit is 0, the relay set is not switched to the active supply. If a bit is 1, then the relay set is switched, and the corresponding pair of video boards can be powered. For example, when DEA-A is powered, a value of 0x1f indicates that all boards are able to receive power from DEA-A; a value of 0x0 indicates that all boards could receive power from DEA-B, but not from DEA-A.
While the video boards are not powered (or if errors occur), any active DEA Housekeeping queries to the video boards will result in a “value” field of 0xffff.
If errors occur in queries to the interface board, the “value” field will contain 0xffff (for example, if there’s no DEA power supply turned on).
Warning
Description
The DEA Video boards contain a set of option settings and Digital-to-Analog Converter (DAC) voltage settings, for use when clocking the CCDs. All of these settings, with the exception of four Analog-to-Digital Converter (ADC) video offset values, are maintained using the System Configuration table (see Appendix C), and are modified using “Change System Configuration” command packets. Since the values used for the video offsets may have to be varied to accommodate changes in Science Run parameters, the four ADC video offset parameters for each configured video board are supplied with the parameter blocks for a given science run (see Section 4.1). The setting values are loaded into their respective video boards during the setup stage of a science run (i.e. after a “Start Science” command is received). Refer to the MIT 36-02205 DPA/DEA Interface Control Document for detailed descriptions of the DEA register options and conversion formulae.
Each item has a limit value (see Table 3.10). If an entry within a “Change System Configuration” command attempts to set a value beyond its limit, the command echo packet will report the condition and the offending item will be set to its maximum allowed value. The limits values are listed in Section 3.3.5 and can only be changed via Write Memory or Patch commands.
NOTE: There is currently a reasonable set of defaults for all values, which was used during the High-Resolution Mirror X-ray Calibration and Flat-Field X-ray Calibration activities at Marshall Space Flight Center. It is expected that the DEA setting values will rarely be changed.
Commands
∙ Change System Configuration Video Board Register Options:
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries | = { | |
itemId | = 16+x | # SYSSET_CCD_SEQ_OFFSET+x video seq offset |
itemValue | = n | # Sequencer cycle number 0-63 |
} | ||
entries | = { | |
itemId | = 17+x | # SYSSET_CCD_ADC_OFFSET+x video ADC offset |
itemValue | = n | # Sequencer cycle number 0-63 |
} | ||
entries | = { | |
itemId | = 18+x | # SYSSET_CCD_VIDEO_ENABLE+x channel mask |
itemValue | = n | # Selection bitmap |
} | ||
entries | = { | |
itemId | = 20+x | # SYSSET_CCD_BJD+x back junction diode |
itemValue | = n | # 0 = Off, 1 = On |
} | ||
} | ||
where
x = ccdId * (SYSSET_CCD_END - SYSSET_CC_BASE + 1) = ccdId * 30 |
∙ Change System Configuration Video Board DAC Levels:
SYSSET_DAC_PIA_P+x | = 22+x | Image Array Parallel High Level |
SYSSET_DAC_PIA_MP+x | = 23+x | Image Array Parallel Low Level Positive |
SYSSET_DAC_PIA_M+x | = 24+x | Image Array Parallel Low Level Negative |
| ||
(actual low-level is SYSSET_DAC_PIA_MP - SYSSET_DAC_PIA_M)
SYSSET_DAC_PFS_P+x | = 25+x | Framestore Parallel High Level |
SYSSET_DAC_PFS_MP+x | = 26+x | Framestore Parallel Low Level Positive |
SYSSET_DAC_PFS_M+x | = 27+x | Framestore Parallel Low Level Negative |
| ||
(actual low-level is SYSSET_DAC_PFS_MP - SYSSET_DAC_PFS_M)
SYSSET_DAC_S_P+x | = 28+x | Serial Register High Level |
SYSSET_DAC_S_M+x | = 29+x | Serial Register Low Level |
SYSSET_DAC_R_P+x | = 30+x | Reset Gate High Level |
SYSSET_DAC_R_MP+x | = 31+x | Reset Gate Low Level Positive |
SYSSET_DAC_R_M+x | = 32+x | Reset Gate Low Level Negative |
| ||
(actual low-level is SYSSET_DAC_R_MP - SYSSET_DAC_R_M)
SYSSET_DAC_SCP+x | = 33+x | Scupper |
SYSSET_DAC_OG_P+x | = 34+x | Output Gate High Level |
SYSSET_DAC_OG_M+x | = 35+x | Output Gate Low Level |
SYSSET_DAC_RD+x | = 36+x | Reset Diode |
SYSSET_DAC_DR0+x | = 37+x | Drain Output for Channel A |
SYSSET_DAC_DR1+x | = 38+x | Drain Output for Channel B |
SYSSET_DAC_DR2+x | = 39+x | Drain Output for Channel C |
SYSSET_DAC_DR3+x | = 40+x | Drain Output for Channel D |
| ||
In practice, the DAC values loaded from the BEP EEPROM have been used since launch, except for two brief tests of the front-illuminated CCDs during the post-launch activation period, the first during OBSID 62400 on 09/11/1999 (see CAP409) and the second during OBSID 62524 on 09/19/1999.
Engineering Telemetry
None
Science Telemetry
∙ Command Echo if all settings within limits
commandEcho[n] = { | ||
... | ||
formatTag | = 7 | # TTAG_CMD_ECHO |
arrival | = n | # BEP timer value when command arrived |
result | = 1 | # Return code from command manager |
changeConfigSetting | = { | |
... | ||
entries[0] = { | ||
itemId | = n | # SYSSET_CCD_DAC_*+x |
itemValue | = n | # Commanded value, as sent |
} | ||
... | ||
} | ||
∙ Command Echo if one or more settings beyond limits
result | = 15 | # CMDRESULT_ITEM_CLIPPED |
∙ Software Housekeeping Statistics
If the configuration table itemValues were accepted, there will be no indication in software housekeeping, but if one or more value violates its internal limits (see Table 3.10), the housekeeping packet will contain an additional SWSTAT_SYSCFG_IN_CLIP item:
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # Starting BEP timer value |
endingBepTickCounter | = n+640 | # Ending BEP timer value |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = 11 | # or patch level or SEU or H/W error |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports |
value | = 0 | # or SEU or H/W error |
} | ||
statistics[2] = { | ||
swStatisticId | = 88 | # SWSTAT_SYSCFG_IN_CLIP |
count | = n | # Number of errors |
value | = n | # Last itemId with bad itemValue |
} | ||
} | ||
NOTE: Since the CCD Video Board parameters are loaded into the DEA when a science run is started, a SWSTAT_DEABOARD_ERROR won’t be reported as an immediate result of the Change System Configuration command.
These parameters, once loaded into the DEA at the start of a science run, will affect the following DEA Housekeeping values:
DEAHOUSE_CCD_REG_0 | = 0 | Register 0 Sequencer Control Contents |
DEAHOUSE_CCD_REG_1 | = 1 | Register 1 Video ADC Control Contents |
DEAHOUSE_CCD_REG_2 | = 2 | Register 2 Test Aid Contents |
DEAHOUSE_CCD_REG_3 | = 3 | Register 3 Miscellaneous Contents |
DEAHOUSE_CCD_PIA_P | = 128 | Image Array Parallel Voltage + Level |
DEAHOUSE_CCD_PIA_M | = 129 | Image Array Parallel Voltage - Level |
DEAHOUSE_CCD_PFS_P | = 130 | Framestore Parallel Voltage + Level |
DEAHOUSE_CCD_PFS_M | = 131 | Framestore Parallel Voltage - Level |
DEAHOUSE_CCD_S_P | = 132 | Serial Register Voltage + Level |
DEAHOUSE_CCD_S_M | = 133 | Serial Register Voltage - Level |
DEAHOUSE_CCD_R_P | = 134 | Reset Gate Voltage + Level |
DEAHOUSE_CCD_R_M | = 135 | Reset Gate Voltage - Level |
DEAHOUSE_CCD_OG | = 136 | Output Gate Bias Level |
DEAHOUSE_CCD_SCP | = 137 | Scupper Voltage Level |
DEAHOUSE_CCD_RD | = 138 | Reset Diode Voltage |
DEAHOUSE_CCD_DR0 | = 139 | Drain Output Channel A Voltage |
DEAHOUSE_CCD_DR1 | = 140 | Drain Output Channel B Voltage |
DEAHOUSE_CCD_DR2 | = 141 | Drain Output Channel C Voltage |
DEAHOUSE_CCD_DR3 | = 142 | Drain Output Channel D Voltage |
| ||
Warning
Description
All items in the System Configuration Table (see Appendix C) have upper limits (no lower limits were required). If a “Change System Configuration” command is received that contains one or more entries whose value exceeds its limit, the system stores the maximum values for these items in their corresponding locations, and reports the occurrence in the result field of the “Command Echo” telemetry packet, as well as in an entry of the next “Software Housekeeping” telemetry packet.
The following contains the limit values for the System Configuration Table entries:
itemId | Limit Value | Effect
|
SYSSET_DEA_POWER | 0xffff | no limit |
SYSSET_FEP_POWER | 0xffff | no limit |
SYSSET_CNTL_MASTER_CLK | 0xffff | no limit |
SYSSET_CNTL_FOCAL_TEMP | 0xffff | no limit |
SYSSET_CNTL_BAKE_TEMP | 0xffff | no limit |
SYSSET_CNTL_BAKE_ENABLE | 0 | cannot enable bake-out heater without patch or write-memory command |
SYSSET_CNTL_LED_ENABLE | 0xffff | no limit |
SYSSET_CNTL_HOUSE_HOLD | 0xffff | no limit |
SYSSET_CNTL_SIGNAL_PATH | 0xffff | no limit |
SYSSET_CNTL_CMDCLOCK_DISABLE | 0xffff | no limit |
SYSSET_CNTL_CMDDATA_DISABLE | 0xffff | no limit |
SYSSET_CNTL_RELAY_SET_0 | 0xffff | no limit |
SYSSET_CNTL_RELAY_SET_1 | 0xffff | no limit |
SYSSET_CNTL_RELAY_SET_2 | 0xffff | no limit |
SYSSET_CNTL_RELAY_SET_3 | 0xffff | no limit |
SYSSET_CNTL_RELAY_SET_4 | 0xffff | no limit |
SYSSET_CCD_SEQ_OFFSET | 0xffff | no limit |
SYSSET_CCD_ADC_OFFSET | 0xffff | no limit |
SYSSET_CCD_VIDEO_ENABLE | 0xffff | no limit |
SYSSET_CCD_HOLD_HOUSE | 0xffff | no limit |
SYSSET_CCD_BJD | 0xffff | no limit |
SYSSET_CCD_HIGH_SPEED_TAP | 0xffff | no limit |
SYSSET_DAC_PIA_P | 255 | limited to 12.775V |
SYSSET_DAC_PIA_MP | 255 | limited to 12.775V |
SYSSET_DAC_PIA_M | 140 | limited to -7.025V |
SYSSET_DAC_PFS_P | 255 | limited to 12.775V |
SYSSET_DAC_PFS_MP | 255 | limited to 12.775V |
SYSSET_DAC_PFS_M | 140 | limited to -7.025V |
SYSSET_DAC_S_P | 255 | limited to 12.775V |
SYSSET_DAC_S_M | 140 | limited to -7.025V |
SYSSET_DAC_R_P | 255 | limited to 12.775V |
SYSSET_DAC_R_MP | 255 | limited to 12.775V |
SYSSET_DAC_R_M | 140 | limited to -7.025V |
SYSSET_DAC_SCP | 255 | limited to 12.775V |
SYSSET_DAC_OG_P | 255 | limited to 12.775V |
SYSSET_DAC_OG_M | 140 | limited to -7.025V |
SYSSET_DAC_RD | 233 | limited to 11.7V |
SYSSET_DAC_DR0 | 177 | limited to 20.6V |
SYSSET_DAC_DR1 | 177 | limited to 20.6V |
SYSSET_DAC_DR2 | 177 | limited to 20.6V |
SYSSET_DAC_DR3 | 177 | limited to 20.6V |
SYSSET_DAC_A_OFF | 0xffff | no limit |
SYSSET_DAC_B_OFF | 0xffff | no limit |
SYSSET_DAC_C_OFF | 0xffff | no limit |
SYSSET_DAC_D_OFF | 0xffff | no limit |
Telemetry
If an entry in a “Change System Configuration Table” command exceeds its limit value, the result field of the corresponding Command Echo telemetry packet will be set to 15 (CMDRESULT_ITEM_CLIPPED), and the next Software Housekeeping telemetry packet will contain a “SWSTAT_SYSCFG_IN_CLIP” entry, whose count field indicates the number of clipped entries, and whose value field indicates the last “SYSSTAT_” item that was clipped.
Description
The ACIS Focal Plane thermal controller uses coarse and fine temperature set points to control the focal plane temperature. These set points are maintained in the System Configuration Table, and are modified using entries within a “Change System Configuration” command. Within about 1 second of being modified, the System Configuration task relays the change into the DEA interface control board.
In addition to the normal 4 watt (maximum) heater provided to control the focal plane temperature to the commanded set-point, a bake-out 40 watt (maximum) heater may be switched on to operate in parallel with the normal heater. The bake-out enable command provides this switching function. The circuitry controlling the focal plane temperature is entirely separate from the choice of maximum heater power available.
In order to heat the focal plane up enough to bake off contaminants, the bake-out heater must be enabled. The desired state of this heater is also maintained in the System Configuration Table. Currently, the limit for this setting is set to 0, preventing a “Change System Configuration” command entry from enabling the heater. If the system is patched or poked (write-memory) to change the setting limit, the heater can be enabled through a subsequent “Change System Configuration” command. Once enabled, when the desired focal plane temperature is greater than the actual temperature, the heater will be turned on.
focal_plane_temp | = 1.14 * SYSSET_CNTL_BAKE_TEMP - 241.67 |
+ 0.12 * (SYSSET_CNTL_FOCAL_TEMP - 128) | |
Commands
∙ Change System Configuration to modify temperature set-points:
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries | = { | |
itemId | = 4 | # SYSSET_CNTL_BAKE_TEMP coarse temp set point |
itemValue | = n | # Desired coarse temperature |
} | ||
entries | = { | |
itemId | = 3 | # SYSSET_CNTL_FOCAL_TEMP fine temp set point |
itemValue | = n | # Desired fine temperature |
} | ||
} | ||
For historical reasons, SYSSET_CNTL_BAKE_TEMP is badly named. It is not the “bake-out” temperature, but rather the coarse temperature set point.
∙ Change System Configuration to disable the bake-out heater
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries | = { | |
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE control bake-out |
itemValue | = 0 | # Disable the bake-out heater |
} | ||
} | ||
∙ Change System Configuration to enable bake-out heater
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries | = { | |
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE control bake-out |
itemValue | = 1 | # Enable the bake-out heater |
} | ||
} | ||
NOTE: To prevent accidentally enabling the bake-out heater, the upper limit of the SYSSET_CNTL_BAKE_ENABLE field is initialized to zero in the flight software. Unless this configuration limit table is modified, the change command will fail with a result code of 15 (CMDRESULT_ITEM_CLIPPED), and the heater will not be enabled. A pair of CXO real-time commands, WBBOEN_ENB and WBBOEN_DIS have been written that, respectively, enable and disable the SYSSET_CNTL_BAKE_ENABLE field, and it is highly recommended that the limit remains disabled unless the bake-out heater is running.
Table 3.11 lists the software serial command packets that have been added to the ACIS offline tables to set the focal plane temperature to specific values. The “Coarse” and “Fine” columns are the SYSSET_CNTL_BAKE_TEMP and SYSSET_CNTL_FOCAL_TEMP values, respectively. The “Temp” columns contain the resulting focal_plane_temp values from the equation in the “Description” section, above.
Packet Name | Coarse | Fine | Temp | Packet Name | Coarse | Fine | Temp
|
WSFTNEG131 | 97 | 128 | -131.09 | WSFTNEG100 | 124 | 128 | -100.31 |
WSFTNEG130 | 98 | 128 | -129.95 | WSFTNEG_95 | 128 | 128 | -95.75 |
WSFTNEG126† | 100 | 128 | -127.67 | WSFTNEG_90 | 132 | 128 | -91.19 |
WSFTNEG125 | 102 | 128 | -125.39 | WSFTNEG_80 | 141 | 128 | -80.93 |
WSFTNEG124† | 103 | 128 | -124.25 | WSFTNEG_75 | 133 | 255 | -74.81 |
WSFTNEG123† | 104 | 127 | -123.23 | WSFTNEG_70 | 150 | 128 | -70.67 |
WSFTNEG122† | 105 | 126 | -122.21 | WSFTNEG_60 | 159 | 128 | -60.41 |
WSFTNEG121† | 105 | 128 | -121.97 | WSFTNEG_50 | 168 | 128 | -50.15 |
WSFTNEG120† | 106 | 128 | -120.83 | WSFTNEG_40 | 177 | 128 | -39.89 |
WSFTNEG115 | 110 | 128 | -116.27 | WSFTNEG_30 | 185 | 128 | -30.77 |
WSFTNEG114 | 111 | 128 | -115.13 | WSFTNEG_20 | 194 | 128 | -20.51 |
WSFTNEG113 | 112 | 128 | -113.99 | WSFTNEG_10 | 203 | 128 | -10.25 |
WSFTNEG112 | 113 | 128 | -112.85 | WSFTPOS_00 | 212 | 128 | 0.01 |
WSFTNEG111 | 114 | 128 | -111.71 | WSFTPOS_10 | 220 | 128 | 9.13 |
WSFTNEG110 | 115 | 128 | -110.57 | WSFTPOS_20 | 229 | 128 | 19.39 |
WSFTNEG109 | 116 | 128 | -109.43 | WSFTPOS_25 | 233 | 128 | 23.95 |
WSFTNEG105 | 133 | 1 | -105.29 | WSFTPOS_30 | 238 | 128 | 29.65 |
† These packets also set SYSSET_CNTL_BAKE_ENABLE to zero as a precautionary measure.
Engineering Telemetry
The system measures and reports the focal plate temperatures measured by the DEA interface boards 11 and 12 and reported by via the DEA Housekeeping values DEAHOUSE_CNTL_ADC_FPTEMP_11 and DEAHOUSE_CNTL_ADC_FPTEMP_12, respectively. See Section 3.4.6.4 for these values and conversions.
Commands to change the temperature set-points and enable or disable the Focal Plane bake-out heater will affect the overall power consumption of the system. Refer to Table E.1 in Appeidix E for a list of the various power configurations.
Science Telemetry
∙ Command Echo for temperature set-points
commandEcho[n] = { | ||
... | ||
result | = 1 | # CMDRESULT_OK from command manager |
changeConfigSetting | = { | |
entries[0] = { | ||
itemId | = 4 | # SYSSET_CNTL_BAKE_TEMP |
itemValue | = n | # Commanded value, as sent |
} | ||
entries[1] = { | ||
itemId | = 3 | # SYSSET_CNTL_FOCAL_TEMP |
itemValue | = n | # Commanded value, as sent |
} | ||
} | ||
∙ Command Echo for Bake-Out Heater Disable
commandEcho[n] = { | ||
... | ||
result | = 1 | # CMDRESULT_OK from command manager |
changeConfigSetting | = { | |
entries[0] = { | ||
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
itemValue | = 0 | # Disable bake-out heater |
} | ||
} | ||
} | ||
∙ Command Echo for Bake-Out Heater Enable if limit table is as-launched
commandEcho[n] = { | ||
... | ||
result | = 15 | # CMDRESULT_ITEM_CLIPPED |
changeConfigSetting | = { | |
entries[0] = { | ||
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
itemValue | = 1 | # Enable bake-out heater |
} | ||
} | ||
} | ||
∙ Command Echo for Bake-Out Heater Enable if limit table modified to allow Bake-Out Enables
commandEcho[n] = { | ||
... | ||
result | = 1 | # CMDRESULT_OK from command manager |
changeConfigSetting | = { | |
entries[0] = { | ||
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
itemValue | = 1 | # Enable bake-out heater |
} | ||
} | ||
} | ||
∙ Software Housekeeping
Unless an error occurs, there will be no indication in software housekeeping that the bake-out heater has been enabled or disabled or that the set points have been changed. However, if a bake-out has been enabled, and the limit table had not been modified to allow it, an additional software housekeeping entry will be reported:
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
... | ||
statistics[n] = { | ||
swStatisticId | = 88 | # SWSTAT_SYSCFG_IN_CLIP |
count | = 1 | # Number of errors |
value | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
} | ||
} | ||
If DEA Housekeeping is running (see Section 3.4.6) and is monitoring the Focal Plane temperature, the set-point changes and bake-out enable will affect the resulting temperature of the focal plane:
deaHousekeepingData[n] = { | ||
... | ||
formatTag | = 11 | # TTAG_DEA_HOUSE |
deaBlockId | = n | # DEA pBlock ID |
commandId | = n | # ID of DEA H/K command |
bepTickCounter | = n | # BEP 10Hz clock at H/K start |
entries[0] = { | ||
ccdId | = 10 | # Read an interface board |
queryId | = 15 | # DEAHOUSE_CNTL_ADC_FPTEMP_12 |
value | = n | # Board 12 focal plane temperature |
} | ||
entries[1] = { | ||
ccdId | = 10 | # Read an interface board |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
value | = n | # Board 11 focal plane temperature |
} | ||
} | ||
Warning
First, power off the FEPs and Video Boards
Check the DPA and DEA electrical current draw to ensure that the FEPs and Video boards are off (see Table E.1 in Appendix E for a list of current draws under various conditions).
Once the Bake-Out Heater is enabled (NOTE: it may not actually be drawing current - this occurs only when the temperature set-point is greater than the current focal plane temperature), NEVER issue a command to power on the FEPs or Video Boards.
Ensure that prior to removing the patch:
Always disable the Bake-Out Heater, restore the limit value to 0 and re-boot (warm or cold) the BEP prior to powering the FEPs and Video Boards. NOTE: Just restoring the limit table and performing a warm boot is NOT SUFFICIENT to disable the Bake-Out Heater. One must explicitly disable the Bake-Out Heater (a cold boot will disable the heater, however).
Note that, since the DEA has an independent power supply, once the heater is enabled and on, it will remain on even if the DPA is powered off.
Description
In addition to the settings described in the previous sections, the following DEA settings are maintained in the System Configuration table. These settings are intended for maintenance and diagnostic activities only, and should not be modified from their defaults without assistance from the ACIS software maintenance team. These settings will be loaded into the instrument with a “Change System Configuration” command, and loaded into the DEA by the System Configuration Task within 1 second of being modified in the System Configuration Table. They include:
SYSSET_CNTL_MASTER_CLOCK | = 2 | Disable Signal clock to DEA during science |
SYSSET_CNTL_LED_ENABLE | = 6 | Enables/Disables LED lights used for pre-flight analysis of CCD images |
SYSSET_CNTL_HOUSE_HOLD | = 7 | Hold Housekeeping address control |
SYSSET_CNTL_SIGNAL_PATH | = 8 | Select alternate signal path |
SYSSET_CNTL_CMDCLOCK_DISABLE | = 9 | Disable cmd clock to video boards during science |
SYSSET_CNTL_CMDDATA_DISABLE | = 10 | Disable data line to video boards during science |
| ||
The following settings are loaded into the DEA’s video boards during the setup stage of a science run:
SYSSET_CCD_HOLD_HOUSE | = 7 | Hold Video Housekeeping address control |
(overridden by instrument software behavior)
SYSSET_CCD_HIGH_SPEED_TAP | = 21 | Enable high-speed tap (not useful in flight) |
Commands
These items are modified as described in earlier sections above using entries within a “Change System Configuration” command packet.
Engineering Telemetry
None
Science Telemetry
The commands to modify these items are echoed as described in earlier sections, and can produce similar Software Housekeeping reports. Only the SYSSET_CCD_HIGH_SPEED_TAP entry will affect the DEA Housekeeping entries, by controlling bit 3 of the DEAHOUSE_CCD_REG_3 register read-back.
This section describes the facilities provided by ACIS for monitoring the health and safety of the instrument, and to verify the receipt and execution of its software commands.
Engineering housekeeping information is polled by the spacecraft and inserted in the engineering portion of the telemetry stream, in fixed locations specified by the telemetry format descriptions provided by TRW. These include voltages, currents, temperatures, pressures, and states for key subsystems, such as the Digital Processing Assembly (DPA), Detector Electronics Assembly (DEA), Power Supply and Mechanism Controller (PSMC), Door Mechanisms, etc. Refer to Table B.5 in Appendix B.3 for a list and descriptions of these items.
Description
Whenever the instrument software re-boots, either due to a power-on reset, cold reset, warm reset or watchdog reset, the software issues a “Startup Message” telemetry packet, bepStartupMessage. The ground can determine the type of reset using the following:
The message also indicates the results of the parameter block and table integrity checks. If any of the following message fields are ’1’, then the associated table has been corrupted. Since these tables reside in SEU-immune RAM, the corruption is probably due to either a software problem, a misdirected write-memory command, or due to an EEPROM or RAM failure:
patchValidFlag | Patch List has been corrupted. |
configFlag | System Configuration Table was corrupted, so replaced from EEPROM. |
parametersFlag | One or more parameter blocks have been corrupted. |
| |
Approximately once every 64 seconds, the Software Housekeeping task issues a “Software Housekeeping” telemetry packet and updates the engineering bi-level values.
Description
The engineering bi-level values indicate the state of the instrument during boot (see Section 3.1.3 and Section 3.1.4) and, once running under flight software control, indicate the overall state of the instrument. To indicate that the instrument is alive, the Software Housekeeping task toggles the level values. Table 3.13 lists the bi-level mnemonics associated with each bit of the bi-level codeand Table 3.14 lists the bi-level codes used by the Software Housekeeping task. To review those used by the boot process, refer to Section 3.1.
Bit Position |
|
|
Mnemonic | (lsb first) |
Description |
1STAT0ST | 0 | Keep alive toggle (alternates between 0 and 1 every 64 seconds) |
1STAT1ST | 1 | Science run status (1 = No science run in process) |
1STAT2ST | 2 | Watchdog status (0 = Last reboot was watchdog) |
1STAT3ST | 3 | BEP initialization flag (0 = BEP is correctly initialized) |
Bit-Pattern |
|
|
Symbol | (3 2 1 0) |
Instrument State |
LED_WD_IDLE_A | 0 0 1 0 | Most
recent
boot
was
from
watchdog
timer
(patches
not
installed).
Not
performing
science
run. |
LED_WD_IDLE_B | 0 0 1 1 |
|
LED_WD_SCIENCE_A | 0 0 0 0 | Most
recent
boot
was
from
watchdog
timer
(patches
not
installed).
Performing
science
run. |
LED_WD_SCIENCE_B | 0 0 0 1 |
|
LED_RUN_IDLE_A | 0 1 1 0 | Most
recent
boot
was
commanded.
Not
performing
science
run. |
LED_RUN_IDLE_B | 0 1 1 1 |
|
LED_RUN_SCIENCE_A | 0 1 0 0 | Most
recent
boot
was
commanded.
Performing
science
run. |
LED_RUN_SCIENCE_B | 0 1 0 1 |
|
Warning
Description
Once every approximately 64 seconds, the Software Housekeeping task produces a “Software Housekeeping” telemetry packet. This packet consists of a list of entries, which were reported during since the previous housekeeping packet was sent. Each entry consists of an identifier (swStatisticId), a report counter (count), and an entry-specific value field (value). The identifier indicates what was reported, the count indicates how many times it was re-ported since the previous housekeeping packet (or since the instrument booted), and the associated value supplied with the most recent report. When the housekeeping task is started, and after it issues each telemetry packet, it reports SWSTAT_VERSION, using the value field to supply the software version number (this may be overwritten by software maintenance to indicate the current patch version).
If, due to telemetry saturation, a software housekeeping packet is held for additional 64 second periods, the occurrence will be indicated in the SWSTAT_SWHOUSE_SKIPPED, where the count indicates the number of 64 second periods skipped, and the value field is unused.
If a report is issued and the housekeeping identifier is out-of-range (most likely due to an improperly conceived patch or software error), the SWSTAT_SWHOUSE_RANGE item will be reported instead, where the value field is the most recent offending identifier.
Description
The ACIS software attempts to write commandEcho telemetry packets to describe each software command packet it receives. The echo contains a verbatim copy of the received command packet, the receipt time of the command (in BEP 10MHz ticks), plus an error code indicating whether the BEP’s command manager task has detected an error or has passed the command to the appropriate task. Note that a result value of CMDRESULT_OK does not indicate that the command has executed successfully, only that it will be started.
If telemetry is saturated and no commandEcho packet can be written, software housekeeping will report a SWSTAT_CMDECHO_DROPPED item, where the value field will contain the commandId of the most recent command whose commandEcho was not telemetered, but the commands themselves will be executed.
The following provides an overall outline of a generic commandEcho packet. Command descriptions elsewhere in this document provide more detailed, command-specific descriptions of these packets.
commandEcho[n] = { | ||
synch | = 0x736f4166 | # Packet synch word |
telemetryLength | = n | # Packet length in words |
formatTag | = 7 | # TTAG_CMD_ECHO |
sequenceNumber | = n | # Packet sequence number |
arrival | = n | # Command arrival time (BEP 10Hz Ticks) |
result | = n | # Command execution result code |
<command name> = { | ||
commandLength | = n | # Number of 16-bit words command packet |
commandIdentifier | = n | # Used by ground to identify command |
commandOpcode | = n | # Command Operation code |
... | # Remaining command fields and values | |
} | ||
} | ||
The result field code values are as follows:
CMDRESULT_UNUSED | = 0 | Unused response code |
CMDRESULT_OK | = 1 | Command Successfully Dispatched |
CMDRESULT_NO_HANDLER | = 2 | No handler for command opcode |
CMDRESULT_BUSY | = 3 | Target of command is busy |
CMDRESULT_BAD_ARGUMENT | = 4 | Command contains a bad parameter |
CMDRESULT_CORRUPT_DEFAULT | = 5 | Parameter Block corrupt; use default |
CMDRESULT_CORRUPT_IDLE | = 6 | Parameter Clock+default corrupt; no run |
CMDRESULT_TABLE_FULL | = 7 | Pixel/Column/Patch Table Full |
CMDRESULT_TABLE_EMPTY | = 8 | Patch Table Empty |
CMDRESULT_INVALID_PKT | = 9 | Command Packet Header corrupt |
CMDRESULT_BOARD_OFF | = 10 | Selected Board has no power |
CMDRESULT_BOARD_RESET | = 11 | Select Board is Reset |
CMDRESULT_STORE_ERROR | = 12 | Error storing parameter block |
CMDRESULT_INHIBITED | = 13 | Run inhibited when stopped/started |
CMDRESULT_CLOBBERED | = 14 | Operation aborted by new operation |
CMDRESULT_ITEM_CLIPPED | = 15 | Input value clipped to limit |
Description
If and when the instrument detects an error from which it cannot recover, or that indicates a serious problem with the integrity of the instrument software, the Flight Software issues a fatalMessage telemetry message packet, and resets the BEP, using the watchdog timer. The message packet contains the time the message is created, in the form of the BEP 10MHz timer tick counter, a code indicating the nature of the error, and a code-dependent data value. The code-dependent data value provides additional diagnostic information to the ACIS maintenance team.
fatalMessage[n] = { | ||
synch | = 0x736f4166 | # Packet synch word |
telemetryLength | = 5 | # Packet length in words |
formatTag | = 9 | # TTAG_FATAL |
sequenceNumber | = n | # Packet sequence number |
bepTickCounter | = n | # Time of the error (BEP 10Hz Ticks) |
fatalCode | = n | # Code describing the error (see Table 3.15) |
fatalValue | = n | # Code-dependent error value |
} | ||
The fatalCode values are listed in Table 3.15, along with the expected value or meaning of any associated non-zero fatalValue field.
Name | Value | Description
|
FATAL_UNKNOWN | 0 | Unknown error |
FATAL_RTXERROR | 1 | OS-generated error |
FATAL_EXCEPTION | 2 | Processor Exception with interrupt cause |
FATAL_INTERRUPT | 3 | Unexpected Interrupt with interrupt/external cause |
FATAL_FEPDEVICE_BAD_FEPID | 4 | Bad FEP Id with offending FEP identifier |
FATAL_TASK_EXIT | 5 | Task returned with task block address |
FATAL_RTX_RETURNED | 6 | OS exited |
FATAL_INTR_FEP_BUS_ERROR | 7 | FEP Bus Error with address causing bus error |
The ACIS software supports acquisition and telemetry of hardware housekeeping information from the Detector Electronics Assembly. The system sends this information under two scenarios. In the first scenario, the ground loads a housekeeping parameter block and then starts a “DEA Housekeeping” run. In the second, the instrument acquires and telemeters DEA video board housekeeping information as part of the setup for a science run.
Each of the 10 video boards contributes 20 16-bit housekeeping channels and the active interface board contributes a further 41. The latter, given names beginning DEAHOUSE_CNTL are described in Section 3.4.6.4 and the video board channels, whose names begin DEAHOUSE_CCD, are in Section 3.4.6.5.
Description
The DEA Housekeeping Parameter Block contains an ordered list of DEA Housekeeping items to query, and a rate at which to query the entire list (i.e., how often to produce one DEA Housekeeping telemetry packet containing the results of each query). A given item may appear more than once in the parameter block, although this is of marginal use. During the acquisition, there is a built-in 0.2 second delay between each item query (NOTE: Video Board ADC Read-Out delays are much longer. See Section 3.4.6.5).
The instrument has five slots in which it stores DEA Housekeeping Parameter blocks. The parameter blocks are loaded into a particular slot using a “Load DEA Housekeeping Parameter Block” command packet. When a slot is loaded, its prior contents are overwritten by the new block contained in the command. If the instrument is power-cycled or cold booted (see Section 3.1.3.1, Section 3.1.3.2), the contents of the slots will be restored to their “as-launched” values (see Appendix I). A warm boot (see Section 3.1.3.3), however, retains the contents of the most recently loaded blocks.
Each parameter block contains a checksum field. The checksum is the bitwise XOR of each 16-bit word in the command packet following the checksum field (i.e. starting with the least-significant 16-bit word of the deaBlockId field).
Commands
∙ Load DEA Housekeeping Parameter Block
load n dea s { | # Load DEA pblock into slot s (0..4) | |
deaBlockId | = n | # Ground selected parameter block ID |
sampleRate | = n | # Interval between housekeeping packets (secs) |
queries = { | ||
ccdId | = 0..10 | # ccdId (0-9) or DEA interface (10) |
queryId | = n | # Item to read from chosen board |
} | ||
} | ||
For example, the following shows a command that loads a parameter block into slot 3, which when used as part of a DEA Housekeeping run, will read both focal plane temperatures and the board temperature from CCD I3 (see Section 3.3.3 for a description of the relationship between a video board and its associated CCD, and Warning 3 below concerning video board power) once every 10 seconds:
load n dea 3 { | # Load DEA pblock into slot 3 | |
deaBlockId | = 0x1234 | # Ground selected parameter block ID |
sampleRate | = 10 | # Wait 10 seconds after querying items |
queries = { | ||
ccdId | = 10 | # Select interface board |
queryId | = 15 | # DEAHOUSE_CNTL_ADC_FPTEMP_12 |
} | ||
queries = { | ||
ccdId | = 10 | # Select interface board |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries = { | ||
ccdId | = 3 | # Select video board for CCD_3 |
queryId | = 144 | # DEAHOUSE_CCD_TEMP_BOARD |
} | ||
} | ||
Science Telemetry
∙ Command Echo on a successful load:
commandEcho[n] = { |
|
|
... |
| |
result | = 1 | # Other values indicate an error detected by the BEP’s # commandManager task, i.e., a syntax or parameter value error. |
loadDeaBlock | = { |
|
entries[0] = { |
|
|
deaBlockId | = 0..4 | # Ground selected parameter block ID |
sampleRate | = 10 | # Interval between housekeeping packets (secs) |
queries = { |
|
|
ccdId | = 0..10 | # ccdId, or 10 for interface board |
queryId | = n | # Selected item |
} |
|
|
... |
|
|
} |
|
|
} |
|
|
} |
|
|
If the checksum of the packet doesn’t match its contents, the block will not be loaded into the slot, and the Command echo will report the error by setting the result field to 12 (CMDRESULT_STORE_ERROR).
Warning
actual rate | = sampleRate + (0.2 seconds * number of queries) |
+ (0.5 seconds * number of CCD ADC queries) | |
See Section 3.4.6.5 for a more detailed description.
Description
A DEA Housekeeping Run is initiated using a “Start DEA Housekeeping” command. The slot field in the command specifies that slot contains the DEA Housekeeping parameter block to use for the run. Once started, the DEA Housekeeping task will accumulate all of the entries specified in the parameter block, with at least 0.2 second delay between each query, into a DEA Housekeeping telemetry buffer and then send the buffer (NOTE: Video Board ADC Read-Out delays are much longer. See Section 3.4.6.5). The task will then sleep for the time requested in the sampleRate field of the parameter block, and then repeat the process. The task will continue in this fashion until a “Stop DEA Housekeeping” command is received.
Commands
∙ Start DEA Housekeeping Run:
start n dea s | # Start DEA H/K with pblock in slot s |
For example, the following would start a DEA Housekeeping run using parameters previously loaded into slot 3 (see example in Section 3.4.6.1):
start n dea 3 | # Select parameters loaded into slot 3 |
Science Telemetry
∙ Command Echo on a successful start:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
startDea = { | ||
deaBlockSlotIndex | = 0..4 | # Start DEA H/K with pblock in this slot |
} | ||
} | ||
If the contents of the chosen parameter block slot have been corrupted, but the block in slot 0 is intact, the latter will be used instead of the selected slot. In this case, the run will commence, and the result field of the command echo will be 5 (CMDRESULT_CORRUPT_DEFAULT).
If, however, both the contents of the selected slot and the alternate slot are corrupt, the system will not attempt to start the DEA Housekeeping run. The command echo result field will be 6 (CMDRESULT_CORRUPT_IDLE).
Once running, the DEA Housekeeping task will produce a DEA Housekeeping telemetry packet in each sample period (extended as needed for any read-out delays, or telemetry saturation).
deaHousekeepingData[n] = { | ||
... | ||
formatTag | = 11 | # TTAG_DEA_HOUSE |
deaBlockId | = n | # Id of DEA Housekeeping parameter block |
# used for the DEA Run (or, if part of a science | ||
# setup, the Id of the science parameter block. | ||
# See Section 3.4.6.6) | ||
commandId | = n | # Id of the command that started the DEA Run |
# (or, if part of a science setup, the Id of the | ||
# command that started the Science Run. See | ||
# Section 3.4.6.6). | ||
bepTickCounter | = n | # BEP 10Hz Tick at start of DEA housekeeping |
# acquisition | ||
entries[0] = { | # Array of queried housekeeping items | |
ccdId | = 0..10 | # Queried ccdId, or 10 for interface board |
queryId | = n | # Requested DEAHOUSE_ item |
value | = n | # Value of the requested item, or 0xffff if there |
# was an error when the item was queried. | ||
# (NOTE: Housekeeping time-outs may occur | ||
# during science setup. This is expected.) | ||
} | ||
... | ||
} | ||
Warning
Description
An active DEA Housekeeping run is stopped using a “Stop DEA Housekeeping” command packet. Once the instrument receives this command, it stops its periodic acquisition and telemetry of DEA Housekeeping information. Issuing this command packet when no DEA Housekeeping run is active has no ill effects.
Commands
stop n dea | # No additional command-specific parameters |
Science Telemetry
∙ Command Echo as a result of the stop:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
stopDea = { | # No command parameters | |
... | ||
} | ||
} | ||
Warning
None
Description
The DEA Interface Board Housekeeping query items cover various thermistor, voltage and discrete items. Except for the relay position item and the focal plane temperature items, the values of interface board housekeeping items are dependent on the software configuration and state of the instrument.
The conversions for the voltage and thermistor readings are provided with each group of housekeeping items below:
∙ Video Board Relay State
DEAHOUSE_CNTL_RELAY | = 0 | Video Board Power Relays (see Section 3.3.3) |
∙ Board Thermistors
DEAHOUSE_CNTL_ADC_TMP_BEP_PCB | = 1 | DPA Thermistor 1 - BEP PC Board |
DEAHOUSE_CNTL_ADC_TMP_BEP_OSC | = 2 | DPA Thermistor 2 - BEP Oscillator |
DEAHOUSE_CNTL_ADC_TMP_FEP0_MONG | = 3 | DPA Thermistor 3 - FEP 0 Mongoose |
DEAHOUSE_CNTL_ADC_TMP_FEP0_PCB | = 4 | DPA Thermistor 4 - FEP 0 PC Board |
DEAHOUSE_CNTL_ADC_TMP_FEP0_ACTEL | = 5 | DPA Thermistor 5 - FEP 0 ACTEL |
DEAHOUSE_CNTL_ADC_TMP_FEP0_RAM | = 6 | DPA Thermistor 6 - FEP 0 RAM |
DEAHOUSE_CNTL_ADC_TMP_FEP0_FB | = 7 | DPA Thermistor 7 - FEP 0 Frame Buf. |
DEAHOUSE_CNTL_ADC_TMP_FEP1_MONG | = 8 | DPA Thermistor 8 - FEP 1 Mongoose |
DEAHOUSE_CNTL_ADC_TMP_FEP1_PCB | = 9 | DPA Thermistor 9 - FEP 1 PC Board |
DEAHOUSE_CNTL_ADC_TMP_FEP1_ACTEL | = 10 | DPA Thermistor 10- FEP 1 ACTEL |
DEAHOUSE_CNTL_ADC_TMP_FEP1_RAM | = 11 | DPA Thermistor 11- FEP 1 RAM |
DEAHOUSE_CNTL_ADC_TMP_FEP1_FB | = 12 | DPA Thermistor 12- FEP 1 Frame Buf. |
| ||
The following provides the thermistor conversion to degrees Celsius (C), given the 12-bit Analog to Digital Converter (ADC) value provided in telemetry. See Section 2.6 in the DEA/DPA Interface Control Document, Rev. C.
∙ Video Board Engineering Diagnostic
DEAHOUSE_CNTL_ADC_SUBAHK | = 13 | DEA Video Board ADC |
This represents the DC voltage level from the currently selected DEA Video Board and Channel, intended for debug and diagnostic purposes. See Section 3.4.6.5 for typical operational video board housekeeping.
∙ Focal Plane Temperature
DEAHOUSE_CNTL_ADC_FPTEMP_12 | = 15 | Focal Plane Temp. Board 12 |
DEAHOUSE_CNTL_ADC_FPTEMP_11 | = 16 | Focal Plane Temp. Board 11 |
The conversion from Focal Plane Temperature ADC values to degrees Celsius (C) is as follows:
∙ Ground References
DEAHOUSE_CNTL_ADC_DPAGNDREF1 | = 17 | DPA Ground Reference 1 |
DEAHOUSE_CNTL_ADC_DPAGNDREF2 | = 19 | DPA Ground Reference 2 |
DEAHOUSE_CNTL_ADC_GND_1 | = 32 | Interface Ground Reference |
DEAHOUSE_CNTL_ADC_GND_2 | = 40 | Ground |
| ||
The conversion from ground and ground reference ADC values to volts (V) is as follows:
∙ 5V, 6V and 15V Voltages
DEAHOUSE_CNTL_ADC_DPA5VHKA | = 18 | DPA 5V Housekeeping A |
DEAHOUSE_CNTL_ADC_DPA5VHKB | = 20 | DPA 5V Housekeeping B |
DEAHOUSE_CNTL_ADC_DEAM15VDCA | = 27 | DEA–A -15.5V |
DEAHOUSE_CNTL_ADC_DEAP15VDCA | = 28 | DEA–A +15.5V |
DEAHOUSE_CNTL_ADC_DEAM6VDCA | = 29 | DEA–A -6V DC |
DEAHOUSE_CNTL_ADC_DEAP6VDCA | = 30 | DEA–A +6V DC |
DEAHOUSE_CNTL_ADC_DEAM15VDCB | = 35 | DEA–B -15.5V DC |
DEAHOUSE_CNTL_ADC_DEAP15VDCB | = 36 | DEA–B +15.5V DC |
DEAHOUSE_CNTL_ADC_DEAM6VDCB | = 37 | DEA–B -6V DC |
DEAHOUSE_CNTL_ADC_DEAP6VDCB | = 38 | DEA–B +6V DC |
| ||
The conversion from 5V, 6V, and 15V ADC values to volts (V) is as follows:
∙ 24V, and 28V Voltages
DEAHOUSE_CNTL_ADC_DEA28VDCA | = 25 | DEA–A 28V DC |
DEAHOUSE_CNTL_ADC_DEA24VDCA | = 26 | DEA–A 24V DC |
DEAHOUSE_CNTL_ADC_DEA28VDCB | = 33 | DEA–B 28V DC |
DEAHOUSE_CNTL_ADC_DEA24VDCB | = 34 | DEA–B 24V DC |
| ||
The conversion from 24V and 28V ADC values to volts (V) is as follows:
∙ Radiation Damage Monitoring Current Measurements
DEAHOUSE_CNTL_ADC_RAD_PCB_A | = 31 | Relative Dose Rad. Monitor Side A |
DEAHOUSE_CNTL_ADC_RAD_PCB_B | = 39 | Relative Dose Rad. Monitor Side B |
These measurements monitor the long-term radiation sensitivity of ACIS hardware. The conversion from radiation dose monitoring ADC values to milliamps (mA) is as follows:
Description
The DEA Housekeeping items for the Video boards include the current values in the video board control registers, and some analog housekeeping, that include measurements of the CCD clocking voltage rails and some video board temperatures (NOTE: To obtain sensible values for the analog housekeeping items, all 10 video boards must be powered on. This is due to the analog multiplexer built into the video boards. Refer to Table 1.2 for results from those occasions on which housekeeping was taken with all 10 boards powered).
Due to the behavior of the Video Board ADC signal path, the read-out procedure of a video board ADC channel takes longer than all other read-outs. In order to “pre-charge” the capacitance of the signal path, the instrument software reads a queried video board ADC housekeeping value 5 times, with a 0.1 second delay between each read. This adds 1/2 second to the actual sample time for each video board ADC channel being read during a DEA Housekeeping run. The adjusted formula for the actual sample rate is:
actual rate | = sampleRate + (0.2 seconds * number of queries) |
+ (0.5 seconds * number of video board queries) | |
The register state values are directly coupled to the current state of the video boards, and the clocking voltage rails are directly coupled to the state of the DAC settings used to configure the boards. The board temperatures, however, are only loosely coupled to the configured state of the boards.
The conversions for the voltage and temperature readings are provided below with each group of sensors.
∙ Video Board Registers
Each board is controlled by a series of 8-bit registers:
DEAHOUSE_CCD_REG_0 | = 0 | Sequencer Control Register |
DEAHOUSE_CCD_REG_1 | = 1 | Video A/D Converter Register |
DEAHOUSE_CCD_REG_2 | = 2 | Test Aid Register |
DEAHOUSE_CCD_REG_3 | = 3 | Miscellaneous Register |
| ||
which whose format and function are described in Table 3.16.
Register | Bit | Use
|
DEAHOUSE_CCD_REG_0 | Sequencer Control Register
| |
0 | Sequencer Start (1 - Sequencer Started, 0 - N/A) |
|
1 | Sequencer Stop (1 - Sequencer Stopped, 0 - N/A) |
|
2..7 | Sequencer Offset (see Section 3.3.4 SYSSET_CCD_SEQ_OFFSET) |
|
DEAHOUSE_CCD_REG_1 | Video A/D Converter Register
| |
0 | A/D-Cycle Start (1 - ADC Started, 0 - N/A) |
|
1 | A/D-Cycle Stop (1 - ADC Stopped, 0 - N/A) |
|
2..7 | A/D-Cycle Offset Delay Count (see Section 3.3.4 SYSSET_CCD_ADC_OFFSET) |
|
DEAHOUSE_CCD_REG_2 | Test Aid Register
| |
0 | Video Output A (0 - disabled, 1 - enabled, see Section 3.3.4 SYSSET_CCD_VIDEO_ENABLE) |
|
1 | Video Output B (0 - disabled, 1 - enabled, see Section 3.3.4 SYSSET_CCD_VIDEO_ENABLE) |
|
2 | Video Output C (0 - disabled, 1 - enabled, see Section 3.3.4 SYSSET_CCD_VIDEO_ENABLE) |
|
3 | Video Output D (0 - disabled, 1 - enabled, see Section 3.3.4 SYSSET_CCD_VIDEO_ENABLE) |
|
4..5 | Unused |
|
6 | Hold Video Housekeeping Address (0 - un-held, 1 - held) The instrument software holds this bit only when reading ADC values. Since the DEAHOUSE_CCD_REG_2 is NOT an ADC item, the read value of this bit should always be 0. See Section 3.3.7 SYSSET_CCD_HOLD_HOUSE |
|
7 | Unused |
|
DEAHOUSE_CCD_REG_3 | Miscellaneous Register
| |
0 | Unused |
|
1 | Back-Junction Diode (0 - off, 1 - on, see Section 3.3.4 SYSSET_CCD_BJD) |
|
2 | Clock-swap (0 - 4 node clocking, 1 - 2 node clocking, see Section 4.1.4). This field should be 0 when in FULL or DIAG clocking mode, and 1 when in AC or BD clocking mode. |
|
3 | High-Speed Tap (0 - disabled, 1 - enabled, see Section 3.3.7 SYSSET_CCD_HIGH_SPEED_TAP) |
|
4 | Status Enable (0 - disabled, 1 - enabled) This bit must be 1 in order for a video board to respond to any query, including the query to read the register, and therefore will always read as a 1. |
|
5..7 | Unused |
|
∙ Video Board Clocking Signal Rail and Bias Voltages
DEAHOUSE_CCD_PIA_P | = 128 | Image Array Parallel + |
DEAHOUSE_CCD_PIA_M | = 129 | Image Array Parallel - |
DEAHOUSE_CCD_PFS_P | = 130 | Framestore Parallel + |
DEAHOUSE_CCD_PFS_M | = 131 | Framestore Parallel - |
DEAHOUSE_CCD_S_P | = 132 | Serial Register + |
DEAHOUSE_CCD_S_M | = 133 | Serial Register - |
DEAHOUSE_CCD_R_P | = 134 | Reset Gate + |
DEAHOUSE_CCD_R_M | = 135 | Reset Gate - |
DEAHOUSE_CCD_OG | = 136 | Output Gate Bias Level |
DEAHOUSE_CCD_SCP | = 137 | Scupper |
DEAHOUSE_CCD_RD | = 138 | Reset Diode |
|
||
The conversion from clocking and bias voltage ADC values to volts (V) is as follows: myIXConversions
∙ Video Board Drain Output Voltages
DEAHOUSE_CCD_DR0 | = 139 | Drain Output Channel A |
DEAHOUSE_CCD_DR1 | = 140 | Drain Output Channel B |
DEAHOUSE_CCD_DR2 | = 141 | Drain Output Channel C |
DEAHOUSE_CCD_DR3 | = 142 | Drain Output Channel D |
| ||
The conversion from drain voltage ADC values to volts (V) is as follows:
∙ Video Board Temperatures
DEAHOUSE_CCD_TEMP_BOARD | = 144 | Board Temperature (RTD4) |
DEAHOUSE_CCD_TEMP_SRAM | = 145 | SRAM Temperature (RTD3) |
DEAHOUSE_CCD_TEMP_ADC | = 146 | ADC Temperature (RTD2) |
DEAHOUSE_CCD_TEMP_ACTEL | = 147 | Gate Array Temperature (RTD1) |
| ||
The conversion from video board temperature ADC values to degrees Celsius (C) is as follows (note: while these sensor mnemonics imply they are Resistance Temperature Detectors (RTDs), they are, in fact, Thermistors):
Other housekeeping channels are reported through the PSMC and other sensors in the Science Instrument Module containing ACIS. They are described in Appendix B.
Warning
The analog multiplexers on the Video boards shunt to ground when powered off, and all outputs from these multiplexers are tied together before going into the interface board multiplexer and housekeeping ADC. This drags down the housekeeping readings from the powered video boards. Under these conditions, the read values can indicate that the read channel isn’t dead, but not much more than that. However, if all of the video boards have power, then the read values reflect a close approximation to the actual voltage, current or temperature level.
DEAHOUSE_CCD_REG_2 | bit 6 | Hold Housekeeping - Always reads as 0 |
DEAHOUSE_CCD_REG_3 | bit 4 | Status Enable - Always reads as 1 |
Description
During the setup of a Science Run (see Section 4.1), the Science task (as opposed to the DEA Housekeeping task) resets all of the DEA video boards, loads the parameters into the boards, and loads the contents of the video boards Sequencer and Program RAM (SRAM/PRAM), and then reads all of the housekeeping channels on each video board used for the science run (it will not read housekeeping from boards not used for the run). The task then packages the read housekeeping values into a DEA Housekeeping Telemetry packet, setting the deaBlockId field of the packet to the parameter block id, parameterBlockId, of the Science Parameter block, loadTeBlock or loadCcBlock, used to configure the science run (as opposed to the deaBlockId field of a loadDeaBlock).
Commands
This housekeeping pass occurs as the result of a science run. See Section 4.1.5.
Science Telemetry
∙ Science Run DEA Housekeeping Telemetry Packet
deaHousekeepingData[n] = { | ||
... | ||
formatTag | = 11 | # TTAG_DEA_HOUSE |
deaBlockId | = n | # ID of Science Parameter Block used to |
# configure the science run (either a | ||
# loadTeBlock or loadCcBlock) | ||
commandId | = n | # commandId of the “start n dea” command |
bepTickCounter | = n | # BEP 10Hz Tick at start of the science run’s |
# DEA housekeeping acquisition | ||
entries[0] = { | # Array of housekeeping items (see below) | |
# for each measured value of each selected CCD | ||
ccdId | = n | # The queried ccdId |
queryId | = n | # The DEAHOUSE_CCD_ item |
value | = n | # Value of the requested item, or 0xffff if there |
# was an error when the item was queried. | ||
# (NOTE: Housekeeping time-outs may occur | ||
# during science setup. This is expected.) | ||
} | ||
... | ||
} | ||
Since the science run is actively controlling the video boards during the setup, the read Video Board Registers (see Table 3.16) should have the following values:
Register | Bit | Value | Use
|
DEAHOUSE_CCD_REG_0 | Sequencer Control Register
| ||
0 | 0 | Sequencer Start (sequencer not started) |
|
1 | 1 | Sequencer Stop (sequencer is stopped) |
|
2-7 | n | Value of SYSSET_CCD_SEQ_OFFSET |
|
DEAHOUSE_CCD_REG_1 | Video A/D Converter Register
| ||
0 | 1 | A/D-Cycle Start (ADC started) |
|
1 | 0 | A/D-Cycle Stop (ADC not stopped) |
|
2-7 | n | Value of SYSSET_CCD_ADC_OFFSET | |
DEAHOUSE_CCD_REG_2 | Test Aid Register
| ||
0 | 0..1 | Bit 0 of SYSSET_CCD_VIDEO_ENABLE |
|
1 | 0..1 | Bit 1 of SYSSET_CCD_VIDEO_ENABLE |
|
2 | 0..1 | Bit 2 of SYSSET_CCD_VIDEO_ENABLE |
|
3 | 0..1 | Bit 3 of SYSSET_CCD_VIDEO_ENABLE |
|
4-5 | N/A | Unused |
|
6 | 0 | Always 0 |
|
7 | N/A | Unused |
|
DEAHOUSE_CCD_REG_3 | Miscellaneous Register
| ||
0 | N/A | Unused |
|
1 | 0..1 | Value of SYSSET_CCD_BJD |
|
2 | 0..1 | 0 if in FULL/DIAG Mode, 1 if in AC or BD Mode |
|
3 | 0..1 | Value of SYSSET_CCD_HIGH_SPEED_TAP |
|
4 | 1 | Always 1 |
|
5-7 | N/A | Unused |
|
In addition to the above, the housekeeping packet will report the following for each configured board:
DEAHOUSE_CCD_PIA_P | = 128 | Image Array Parallel + |
DEAHOUSE_CCD_PIA_M | = 129 | Image Array Parallel - |
DEAHOUSE_CCD_PFS_P | = 130 | Framestore Parallel + |
DEAHOUSE_CCD_PFS_M | = 131 | Framestore Parallel - |
DEAHOUSE_CCD_S_P | = 132 | Serial Register + |
DEAHOUSE_CCD_S_M | = 133 | Serial Register - |
DEAHOUSE_CCD_R_P | = 134 | Reset Gate + |
DEAHOUSE_CCD_R_M | = 135 | Reset Gate - |
DEAHOUSE_CCD_OG | = 136 | Output Gate Bias Level |
DEAHOUSE_CCD_SCP | = 137 | Scupper |
DEAHOUSE_CCD_RD | = 138 | Reset Diode |
DEAHOUSE_CCD_DR0 | = 139 | Drain Output Channel A |
DEAHOUSE_CCD_DR1 | = 140 | Drain Output Channel B |
DEAHOUSE_CCD_DR2 | = 141 | Drain Output Channel C |
DEAHOUSE_CCD_DR3 | = 142 | Drain Output Channel D |
DEAHOUSE_CCD_TEMP_BOARD | = 144 | Board Temperature (RTD4) |
DEAHOUSE_CCD_TEMP_SRAM | = 145 | SRAM Temperature (RTD3) |
DEAHOUSE_CCD_TEMP_ADC | = 146 | ADC Temperature (RTD2) |
DEAHOUSE_CCD_TEMP_ACTEL | = 147 | Gate Array Temperature (RTD1) |
| ||
Warning
The ACIS Instrument software maintains lists of bad pixels and vertical columns for each CCD. The instrument uses these lists to reduce the amount of processing time and telemetry consumed by “fake” events produced by pixels and columns that are known to be producing erroneous information. Over the life of the instrument, pixels and columns within the CCDs will erode due to radiation damage.
Description
ACIS supports a single “Bad Pixel Map”, and two “Bad Column Maps”, one for Timed Exposure science runs, and one for Continuous Clocking science runs. The Bad Pixel Map can contain up to 10,000 entries, and each Bad Column Map can contain up to 10,240 entries each (i.e. you can eliminate every column if you want to). The on-board maps copied from EEPROM contain the following:
Map | Mode | ccdId | Columns | Rows
|
Bad Pixel Map | I0 | 302 | 252 | |
I1 | 302 | 252 | ||
408 | 599 | |||
S1 | 382 | 584 | ||
791 | 350 | |||
S3 | 495 | 440-1023 | ||
496 | 440-1023 | |||
497 | 440-1023 | |||
Bad Column Maps | TE | I0 | 70-72 | |
I1 | 302 | |||
408 | ||||
CC | I0 | 70-72 | ||
I1 | 302 | |||
408 | ||||
The user can append a set of new bad pixels to the on-board bad pixel map using a “Add Bad Pixel” command packet, that contains a list of zero or more pixel entries to add. Each entry specifies which CCD contains the pixel, and the row and column position of the pixel within that CCD. NOTE: the BEP software masks the row and column values to lie in the range (0..1023) but doesn’t check for duplicates.
One uses the “Add Bad Te Column” or “Add Bad Cc Column” command packet to add a list of zero or more bad column entries to the Timed Exposure Bad Column Map and Continuous Clocking Bad Column map, respectively. Each entry specifies which CCD contains the column, and the column position within that CCD.
Once loaded, the bad pixel and column maps are only used after a bias-map has been recomputed. After a bias map for a CCD has been recomputed, the bad pixel and column maps are scanned. If an entry is found for the CCD, the corresponding pixel(s) bias map value is set to PIXEL_BAD (for columns, all 1024 pixels in the column are flagged). This prevents the system from reporting events centered on these pixels. For Timed Exposure science runs, the Bad Pixel map and Timed Exposure Bad Column map are used. For Continuous Clocking science runs, only the Continuous Clocking Bad Column Map is used.
Refer to Section 3.6.2.1 for a description of how to dump the contents of the Bad Pixel and Column maps.
NOTE: When the BEP is power-cycled or cold booted, the bad pixel map and bad column maps are reset and re-loaded with the default lists stored in EEPROM. All pixels and columns commanded prior to the reset are lost. A warn-boot, however, preserves the lists.
Commands
∙ Adding one or more Bad Pixels
add n badPixel { | ||
pixels = { | ||
ccdId | = 0..9 | # Id of the CCD containing the bad pixel |
ccdRow | = 0..1023 | # Row index of the bad pixel |
ccdColumn | = 0..1023 | # Column index of the bad pixel |
} | ||
... | ||
} | ||
∙ Adding one or more Bad Timed Exposure Columns
add n te badColumn { | ||
columns = { | ||
ccdId | = 0..9 | # Id of the CCD containing the bad column |
ccdColumn | = 0..1023 | # Index of the bad column |
} | ||
... | ||
} | ||
∙ Adding one or more Bad Continuous Clocking Columns
add n cc badColumn { | ||
columns = { | ||
ccdId | = 0..9 | # Id of the CCD containing the bad column |
ccdColumn | = 0..1023 | # Index of the bad column |
} | ||
... | ||
} | ||
For example, to flag column 511 on CCD S3 for Continuous Clocking mode, the following command is sent:
add n cc badColumn { | ||
columns = { | ||
ccdId | = 7 | # CCD_S3 |
ccdColumn | = 511 | # Column 511 |
} | ||
... | ||
} | ||
Science Telemetry
∙ If a “load bad pixel map” command is successful, the command echo reports:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
addBadPixel = { | ||
pixels[0] = { | # Array of bad pixel locations | |
ccdId | = 0..9 | # Specified CCD |
ccdRow | = 0..1023 | # Specified row |
ccdColumn | = 0..1023 | # Specified column |
} | ||
} | ||
} | ||
∙ If a “load bad te column map” command is successful, the command echo reports:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
addTeBadColumn = { | ||
columns[0] = { | # Array of bad column locations | |
ccdId | = 0..9 | # Specified CCD |
ccdColumn | = 0..1023 | # Specified column |
} | ||
} | ||
} | ||
∙ If a “load bad cc column map” command is successful, the command echo reports:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
addCcBadColumn = { | ||
columns[0] = { | # Array of bad column locations | |
ccdId | = 0..9 | # Specified CCD |
ccdColumn | = 0..1023 | # Specified column |
} | ||
} | ||
} | ||
If one or more entries cannot be stored because the corresponding table is full, the command echo result field will report 7 (CMDRESULT_TABLE_FULL).
If one or more entries contains an argument that is out of range, the command echo result field will report 4 (CMDRESULT_BAD_ARGUMENT), and the offending and remaining entries in the command packet will not be added to the map.
Warning
Description
To empty the contents of the Bad Pixel Map, the user issues a “Reset Bad Pixel Map” command, and to empty the contents of the Bad Column Maps, the user issues a “Rest Bad Column” command.
Since there are default lists loaded from EEPROM upon power-on and cold boot, the bad pixel and column maps are not empty upon start-up. The “reset” commands are required to empty the lists.
Commands
∙ To empty the contents of the Bad Pixel Map,
reset n badPixel | # No additional parameters |
∙ To empty the contents of the Timed Exposure Bad Column Map,
reset n te badColumn | # No additional parameters |
∙ To empty the contents of the Continuous Clocking Bad Column Map,
reset n cc badColumn | # No additional parameters |
Science Telemetry
∙ The command echo to the Reset Bad Pixel Map command reports:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
resetBadPixelMap = { | # No command parameters | |
} | ||
} | ||
The command echo to the Timed Exposure and Continuous Clocking Reset Bad Column Map commands are, respectively:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
resetTeBadColumnMap = { | # No command parameters | |
} | ||
} | ||
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
resetCcBadColumnMap = { | # No command parameters | |
} | ||
} | ||
Warning
ACIS implements all of its memory reads using the Memory Server task. This task is capable of trickling out one contiguous region of memory at a time, using one or more telemetry packets, concurrently with science processing runs and DEA housekeeping runs. In order to prevent erroneously large memory dumps from preventing subsequent dump commands from being executed, all flavors of memory command will abort any dump in progress.
This section describes reads of general areas of memory. For these types of reads, the user must know the type of memory to read, the address of the region to read, and the number of words to read. To see special “tagged” memory reads, where the instrument determines the address and length of the output, see Section 3.6.2.
NOTE: In general, any memory read may be aborted by a subsequent memory read, write or execute command.
From | To | Bytes | Access | Description
|
0x80000000 | 0x80040000 | 256K | R/W | Data cache |
80000000 | 80022470 | 137K | Static variables | |
80022470 | 80038000 | 36K | Program execution stacks |
|
80038000 | 80040000 | varies | Variables allocated by patches |
|
0x80080000 | 0x80100000 | 512K | R/W1 | Instruction cache |
80080000 | 800C0970 | 258K | Instructions copied from EEPROM |
|
800C0970 | 800C85C8 | 31K | Parameter blocks copied from EEPROM |
|
800C85C8 | 800E8000 | varies | Instructions copied from patches |
|
800E8000 | 80100000 | varies | Patches (allocated by decreasing address) |
|
0xA0000000 | 0xA0100000 | 1M | R/W | Bulk memory (telemetry buffers) |
A0180000 | A01800D4 | 212 | I/O Device Registers (some R/O) |
|
0xA8000000 | 0xA9000000 | 16M | R/W2 | FEP_0 shared memory (see Table 3.20) |
+0000000 | +0020000 | 128K | 1024x1024x1-bit bias parity array |
|
+0020000 | +0040000 | 128K | 1024x1024x1-bit threshold array |
|
+0040000 | +0080000 | 256K | 1024x1024x1-bit overclock array |
|
+0080000 | +0080250 | 592 | FEP-to-BEP mailbox |
|
+0080250 | +0180000 | ~1M | FEP-to-BEP ring buffer |
|
+0400000 | +0400024 | 36 | FEP controller registers |
|
+0401000 | +0401040 | 64 | FEP image registers |
|
+0800000 | +0A00000 | 2M | 1024x1024x12-bit Image array |
|
+0C00000 | +0E00000 | 2M | 1024x1024x12-bit Bias array |
|
0xA9000000 | 0xAA000000 | 16M | R/W2 | FEP_1 shared memory (as FEP_0, above) |
0xAA000000 | 0xAB000000 | 16M | R/W2 | FEP_2 shared memory (as FEP_0, above) |
0xAB000000 | 0xAC000000 | 16M | R/W2 | FEP_3 shared memory (as FEP_0, above) |
0xAC000000 | 0xAD000000 | 16M | R/W2 | FEP_4 shared memory (as FEP_0, above) |
0xAD000000 | 0xAE000000 | 16M | R/W2 | FEP_5 shared memory (as FEP_0, above) |
0xBF400000 | 0xBF400034 | 52 | R/W | Mongoose registers (some R/O) |
0xBFC00000 | 0xBFD00000 | 1M | R/O | EEPROM |
Description
The user issues a “Read Bep” command to perform a general read of BEP memory, specifying the starting address to read, and the number of 32-bit words to read. Any location in the BEP address space can be read using a “Read Bep” command, with the following constraints:
The start address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4) If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo result field.
The region being read must not cross an Instruction Cache address boundary
These addresses are: 0x80080000 and 0x800fffff. If the region crosses one of these boundaries, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo result field.
If the region is in a FEP shared memory area, the associated FEP must be powered on.
The FEP shared memory regions are shown in Table 3.18. If the FEP does not have power, a BEP Bus Error Exception will be raised and will cause a Fatal Error and subsequent BEP re-boot.
BEP addresses are not unique, since its memory management firmware aliases many locations, i.e., it ignores the values of some higher-order address bits, as shown in Table 3.19, below, where “X” represents any hexadecimal digit and “n” represents a particular hex value.
Addresses | n | Aliased to | Comments
|
0xnXXXXXXX | not 10-11 | 0x800XXXXX | BEP D-cache |
0x800nXXXX | 8-15 | 0x800mXXXX | m = n - 8 (I-cache hidden1) |
0xAnXXXXXX | 0-7 | 0xA0XXXXXX | BEP bulk memory |
8-13 | FEP memory | Bus Error if FEP_m unpowered, where m = n - 8 |
|
14-15 | Bus Error |
||
0xAn18XXXX | 0-7 | 0xA01800XX | I/O registers (see Table 3.18) |
0xBnXXXXXX | 0-14 | 0xAnXXXXXX |
|
0xBFnXXXXX | 0-3 | Bus Error |
|
4 | 0xBF4000XX | Mongoose registers (see Table 3.18) |
|
5-11 | Returns 0xffffffff on read |
||
12-15 | 0xBFCXXXXX | EEPROM |
|
Commands
∙ General read of BEP Memory
read n readAddress wordCount | # starting addr (word aligned) & 32-bit word count |
∙ For example, to read the entire contents of the BEP’s Data Cache:
read n 0x80000000 0x10000 | # 256 Kbytes from start of D-cache |
∙ Another example, to read the entire contents of the BEP’s Instruction Cache:
read n 0x80080000 0x20000 | # 512 Kbytes from start of I-cache |
Science Telemetry
Command Echo of a generic BEP read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
readBep = { | ||
readAddress | = n | # Specified start address |
wordCount | = n | # Specified word count |
} | ||
} | ||
If the read interrupts an earlier on-going read, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED).
If the read attempts to interrupt a Write-Memory or Execute-Memory activity, the read is not performed. In this case, the Command Echo result field will contain 3 (CMDRESULT_BUSY).
If the address region spans an I-cache boundary, or if the starting address is not aligned to a 32-bit word boundary, the command will be rejected, and the “Command Echo” result field will contain 4 (CMDRESULT_BAD_ARGUMENT).
Once executing, the Memory Server task will produce a series of “BEP Read Reply” telemetry packets of the form:
bepReadReply[n] = { | ||
... | ||
commandId | = n | # commandId of the read command |
bepTickCounter | = n | # BEP tick counter at start of reading |
requestedAddress | = n | # Original readAddress in the read command |
requestedWordCount | = n | # Original wordCount in the read command |
readAddress | = n | # Address of first word in readData |
readData | = n n n .. | # Array of 32-bit words |
} | ||
For each but the first packet in the series, its readAddress value should be the readAddress of the previous bepReadReply packet plus the number of bytes (i.e. words * 4) in the previous packet’s readData value.
The Memory Server uses telemetry packet buffers of 1023 32-bit words. The header portion of each “BEP Read Reply” telemetry packet is 7 words, leaving 1016 32-bit data words for each “BEP Read Reply” telemetry packet. Given a wordCount for any region of memory, the Memory Server will use ceil(wordCount/1016) telemetry packets to send that region.
Warning
Description
The ACIS EEPROM is memory-mapped into the BEP’s address space, and is located at memory location 0xbfc00000 and contains 0x40000 32-bit words. To dump the contents of the entire EEPROM, the user issues a “Read” command, specifying the address and length listed above.
Commands
Command to read all of EEPROM:
read n 0xbfc00000 0x40000 | # 1 Mbyte from start of EEPROM |
Science Telemetry
Command Echo of read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
readBep = { | ||
readAddress | = 0xbfc00000 | # Start of BEP EEPROM |
wordCount | = 0x40000 | # 32-bit words in EEPROM (1 Mbyte) |
} | ||
} | ||
If the read interrupts an earlier on-going read, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED).
If the read attempts to interrupt a Write-Memory or Execute-Memory activity, the read is not performed. In this case, the Command Echo result field will contain 3 (CMDRESULT_BUSY).
Once executing, the Memory Server task will produce a series of “BEP Read Reply” telemetry packets of the form:
bepReadReply[n] = { | ||
... | ||
commandId | = n | # commandId of the read command |
bepTickCounter | = n | # BEP tick counter at start of reading |
requestedAddress | = 0xbfc00000 | # Address of EEPROM |
requestedWordCount | = 0x40000 | # Word length of EEPROM |
readAddress | = n | # Address of first word in readData |
readData | = n n n ... | # Array of 32-bit words |
} | ||
For each but the first packet in the series, readAddress should be the readAddress of the previous telemetry packet plus the number of bytes (i.e. words * 4) in the previous bepReadReply packet’s readData array.
Warning
Description
The user issues a “Read Fep” command to perform a general read of FEP memory, specifying the FEP, the starting address to read, and the number of 32-bit words to read. Any location in the FEP address space can be read using a “Read Fep” command, with the following constraints:
The start address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4)
If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
The region being read must not cross an Instruction Cache address boundary
These addresses are: 0x80080000 and 0x800fffff. If the region crosses one of these boundaries,
the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo result
field.
The FEP must be powered when the read command is received
Attempts to read from a FEP when the FEP is not powered will cause the read to be rejected.
The Command Echo result field will be set to 10 (CMDRESULT_BOARD_OFF).
The FEP must remain powered during the read
Attempts to read a FEPs memory when the FEP is not powered may cause the read to abort, or
possibly cause a BEP Bus Error Exception, that will subsequently cause a Fatal Error and BEP
re-boot.
ACIS implements user-initiated memory reads from the FEP using the Memory Server task. See Table 3.20 for the memory map of each FEP. If the read is to the FEP’s shared memory (see Table 3.18), the reads are made directly by the BEP from that memory. If, however, the locations are not directly accessible by the BEP (e.g. within the FEP’s I-cache or D-cache), the BEP will use that FEP’s mailbox to “collaborate” with the software running on the FEP to perform the read.
From | To | Bytes | Access | Description
|
0x80000000 | 0x80080000 | 256K | R/W | Data cache |
80000000 | 80000210 | Static variables | ||
80000210 | 80008000 | Program execution stack |
||
80008000 | 80040000 | varies | Variables allocated by patches |
|
0x80080000 | 0x80100000 | 512K | R/W1 | Instruction cache |
80080000 | 80087040 | 28K | Instructions loaded from EEPROM via BEP | |
80087040 | 80100000 | varies | Instructions loaded from patches |
|
0xA0000000 | 0xA0100000 | 1M | R/W | Bulk memory (see Table 3.18) |
+0000000 | +0020000 | 128K | 1024x1024x1-bit bias parity array |
|
+0020000 | +0040000 | 128K | 1024x1024x1-bit threshold array |
|
+0040000 | +0080000 | 256K | 1024x1024x1-bit overclock array |
|
+0080000 | +0080250 | 592 | FEP-to-BEP mailbox |
|
+0080250 | +0180000 | ~1M | FEP-to-BEP ring buffer |
|
+0400000 | +0400024 | 36 | FEP controller registers |
|
+0401000 | +0401040 | 64 | FEP image registers |
|
+0800000 | +0A00000 | 2M | 1024x1024x12-bit Image array |
|
+0C00000 | +0E00000 | 2M | 1024x1024x12-bit Bias array |
|
0xBF400000 | 0xBF400034 | 52 | R/W | Mongoose registers (some R/O) |
1I-cache must be loaded and stored via Mongoose registers.
Commands
∙ General read of FEP Memory
read n fep fepId readAddress wordCount | # Starting address and 32-bit word count |
∙ For example, to read the entire contents of the FEP 3’s Data Cache: comment[id=PF]Check length of installed FEP D- and I-cache
read n fep 3 0x80000000 0x8000 | # Read 128 Kbytes from FEP_3’s D-cache |
∙ Another example, to read the entire contents of the FEP 5’s Instruction Cache:
read n fep 5 0x80080000 0x8000 | # Read 128 Kbytes from FEP_5’s I-cache |
Science Telemetry
Command Echo of a generic FEP read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
readFep = { | ||
fepId | = 0..5 | # Specified FEP |
readAddress | = n | # Specified start address |
wordCount | = n | # Specified word count |
} | ||
} | ||
If the read interrupts an earlier on-going read, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED).
If the read attempts to interrupt a Write-Memory or Execute-Memory activity, the read is not performed. In this case, the Command Echo result field will contain 3 (CMDRESULT_BUSY).
If the address region spans an I-cache boundary, or if the starting address is not aligned to a 32-bit word boundary, the command will be rejected, and the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT).
If an attempt is made to read from a FEP whose power is off, the command will be rejected and the Command Echo result field will contain 10 (CMDRESULT_BOARD_OFF). Once executing, the Memory Server task will produce a series of “FEP Read Reply” telemetry packets of the form:
fepReadReply[n] = { | ||
... | ||
commandId | = n | # commandId of the read command |
fepId | = 0..5 | # Original specified FEP |
bepTickCounter | = n | # BEP tick counter at start of reading |
requestedAddress | = n | # Original readAddress in the read command |
requestedWordCount | = n | # Original wordCount in the read command |
readAddress | = n | # Address of first word in readData |
readData | = n n n ... | # Array of 32-bit words |
} | ||
For each but the first packet in the series, this should be the readAddress of the previous fepReadReply telemetry packet plus the number of bytes (i.e. words * 4) in that packet’s readData array.
The Memory Server uses telemetry packet buffers of 1023 32-bit words. The header portion of each “FEP Read Reply” telemetry packet is 7 words, leaving 1016 32-bit data words for each “FEP Read Reply” telemetry packet. Given a wordCount for any region of memory, the Memory Server will use ceil(wordCount/1016) telemetry packets to send that region.
Warning
Bit | Image1 | Bias1BEP | Bias1FEP | Bit | Image2 | Bias2BEP | Bias2FEP
|
0-11 | lower 12-bit image or bias value | 16-27 | upper 12-bit image or bias value
| ||||
12 | unused (zero) | 28 | unused (zero) |
||||
13 | unused | current parity | 29 | unused | current parity |
||
14 | (zero) | original parity | 30 | (zero) | original parity |
||
15 | parity change | 31 | parity change |
||||
Description
The DEA Video Boards contain two types of readable RAM: Sequencer RAM (SRAM) and Program RAM (PRAM). When the sequencers aren’t running, the user can issue a “Read SRAM” command to perform a general read of Video Board Sequencer memory, specifying the CCD associated with the board (see Section 3.3.4), the starting address to read, and the number of 16-bit words to read. To read a board’s Program RAM, the user can issue a “Read PRAM” command. These commands can only be issued under the following conditions:
The selected Video Board must be powered
Attempts to read from a Video Board when the board is not powered will cause the read to be
rejected. The Command Echo result field will be set to 10 (CMDRESULT_BOARD_OFF).
The sequencers must be idle
If a science or bias run is in progress when a read is requested, or starts while a read
request is active, the read will be aborted. This is reflected in Software Housekeeping with a
SWSTAT_DEABOARD_ERROR entry.
Note: PRAM/SRAM contain trash until a science run. The contents of a video board’s SRAM and PRAM are undefined until the first science run after the video board has been powered on, or until a “Write PRAM” or “Write SRAM” command is received that loads their contents.
Commands
∙ Read SRAM
read n sram ccdId readIndex wordCount | # read wordCount 16-bit words from readIndex |
∙ Read PRAM
read n pram ccdId readIndex wordCount | # read wordCount 16-bit words from readIndex |
For example, the command to dump all of CCD I3’s PRAM is as follows:
read n pram 3 0 0x8000 | # read 64Kbytes from start of CCD_I3 PRAM |
Science Telemetry
∙ Command Echo of a generic SRAM read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
readSram = { | ||
ccdId | = 0..9 | # Specified video board |
readAddress | = n | # Specified start index |
wordCount | = n | # Specified 16-bit word count |
} | ||
} | ||
∙ Command Echo of a generic PRAM read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
readPram = { | ||
ccdId | = 0..9 | # Specified video board |
readAddress | = n | # Specified start index |
wordCount | = n | # Specified 16-bit word count |
} | ||
} | ||
If the read interrupts an earlier on-going read, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED).
If the read attempts to interrupt a Write-Memory or Execute-Memory activity, the read is not performed. In this case, the Command Echo result field will contain 3 (CMDRESULT_BUSY).
If an attempt is made to read from a Video Board whose power is off, the command will be rejected and the Command Echo result field will contain 10 (CMDRESULT_BOARD_OFF).
Once executing, the Memory Server task will produce a series of “SRAM Read Reply” or “PRAM Read Reply” telemetry packets of the form:
sramReadReply[n] = { | ||
... | ||
commandId | = n | # commandId of the read command |
ccdId | = 0..9 | # Original specified video board |
bepTickCounter | = n | # BEP tick counter at start of reading |
requestedIndex | = n | # Original index in read SRAM command |
requestedWordCount | = n | # Original wordCount in read SRAM command |
readIndex | = n | # Address of first word in readData |
readData | = n n n ... | # Array of 16-bit words |
} | ||
pramReadReply[n] = { | ||
... | ||
commandId | = n | # commandId of the read command |
ccdId | = 0..9 | # Original specified video board |
bepTickCounter | = n | # BEP tick counter at start of reading |
requestedIndex | = n | # Original index in read PRAM command |
requestedWordCount | = n | # Original wordCount in read PRAM command |
readIndex | = n | # Address of first word in readData |
readData | = n n n ... | # Array of 16-bit words |
} | ||
Since an odd number of 16-bit words may be requested, except for the last, all readData fields in a series of telemetry packets will be filled out to an even number of 16-bit words. The last packet may contain an odd number, although the length of the telemetry packet is always 32-bit aligned. The user determines the length of the last readData[] array by relying on the requestedWordCount.
The Memory Server uses telemetry packet buffers of 2046 16-bit words. The header portion of each “SRAM/PRAM Read Reply” telemetry packet is 11 16-bit words, leaving 2035 16-bit data words for each “SRAM/PRAM Read Reply” telemetry packet. Given a wordCount for any region of SRAM/PRAM, the Memory Server will use ceil(wordCount/2035) packets to send that region.
Warning
ACIS contains certain memory regions containing data structures that are necessary for interpreting the science data. All of this information can be determined by the commanding sequence. However, to ease the burden on the ground system, the ACIS software packages dumps some of these regions using distinct commands and telemetry format tags. The actual form of the telemetry packet data is the same as for the memory reads described in Section 3.6.1.1.
Description
ACIS maintains one Bad Pixel Map, a Timed Exposure Bad Column Map and a Continuous Clocking Bad Column Map (see Section 3.5). The user can telemeter the contents of these maps by issuing “Dump Bad Pixels”, “Dump Bad Te Column Map” and “Dump Bad Cc Column Map” command packets, respectively.
Commands
∙ Dump Bad Pixel Map
dump n badPixel | # No additional parameters |
∙ Dump Timed Exposure Bad Column Map
dump n te badColumn | # No additional parameters |
∙ Dump Continuous Clocking Bad Column Map
dump n cc badColumn | # No additional parameters |
Science Telemetry
Command Echo of a generic “Dump” request, where the “echoed command” is substituted for each type of dump.
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
dumpBadPixels = { | # No command parameters | |
} | ||
} | ||
The constraints and error codes for a dump command are the same as those for a general “Read Bep” command (see Section 3.6.1.1 Science Telemetry), although a result of 4 (CMDRESULT_BAD_ARGUMENT) indicates a problem within the instrument, rather than a commanding error, since the arguments are hard-coded into the BEP flight software.
The overall form of the telemetry Bad Pixel Map and Bad Column Map packets are the same as those for a “Read Bep” command (see Section 3.6.1.1 Science Telemetry), except the telemetry format tags are unique for each type of table.
The format of the Bad Pixel Map (formatTag = TTAG_DUMP_BAD_PIXEL) data is an array of 32-bit entries, where each entry has the form:
bits 0...3 | = 0..9 | # CCD containing the bad pixel |
bits 4...13 | = 0..1023 | # CCD Row Location of the pixel |
bits 14...23 | = 0..1023 | # CCD Column Location of the pixel |
bits 24...31 | = n | # Unused |
| ||
The format of the Bad Column Map (formatTag = TTAG_DUMP_BAD_TE_COL or TTAG_DUMP_BAD_CC_COL) data is an array of packed 16-bit words. Although each column is represented using one 16-bit word, the read will always telemeter data in an array of 32-bit words. If there are an odd number of bad column entries, the last dumped item will contain zeros for all fields.
bits 0...3 | = n | # CCD containing the bad column (0..9) |
bits 4...13 | = n | # CCD Column Location (0..1023) |
bits 13...15 | = n | # Unused |
| ||
Warning
Description
ACIS maintains its parameter blocks in sets of arrays of “slots.” Each type of parameter block has a distinct set of slots. Each set contains 5 slots, and each slot is 512 bytes in length (NOTE: All parameter block types are 512 bytes or less in length). In order to verify the contents of the parameters, independently of any science runs, ACIS provides distinct commands to dump the contents of each set of slots using dumpParameterSlots command packets, where the command opcode discriminates between the different slot types. Since the number of bytes in an entire set of slots (including overhead) is less in size than a single telemetry packet, each set of slots is telemetered in a single “BEP Read Reply” telemetry packet, where the slot type is indicated using different telemetry format tags:
Type of Block | Dump command | bcmd command syntax | Output packet name
|
Timed Exposure | dumpTeSlots | dump n te | bepDumpTeSlots |
Continuous Clocking | dumpCcSlots | dump n cc | bepDumpCcSlots |
2-D Window | dump2dSlots | dump n window2D | bepDump2dSlots |
1-D Window | dump1dSlots | dump n window1D | bepDump1dSlots |
DEA Housekeeping | dumpDeaSlots | dump n dea | bepDumpDeaSlots |
NOTE: Be careful not to confuse memory slot dumps with parameter dumps automatically performed at the start of each science run. The purpose and formats of the packets are different (the latter contains just the slots used for the run, not the entire set of 5 slots).
Commands
∙ Command to dump all of the stored Timed Exposure Parameter Block slots:
dump n te | # No additional parameters required |
∙ Command to dump all of the stored Continuous Clocking Parameter Block slots:
dump n cc | # No additional parameters required |
The other types of slots are dumped in a similar fashion by substituting the CMDOP_* used to request the dump.
Science Telemetry
Command Echo of a generic “Dump” request, where the name of the “echoed command” is substituted for each type of dump (See column 2 of Table 3.17).
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
dump*Slots = { | # No command parameters | |
} | ||
} | ||
The overall format of the read-reply telemetry packet is identical to that in Section 3.6.1.1. However, the telemetry format tag will reflect the type of slot set being telemetered. The resulting data array will consist of five 512-byte slots, with a parameter block of the specified type aligned to start at the beginning of each slot. The format of a given parameter block type is identical to the command format used to load that type of block.
Warning
Description
ACIS uses a fixed-table Huffman compression scheme to compress telemetered bias maps and raw CCD images. ACIS maintains an array of selectable compression tables using a data structure. This structure consists of a header, that is an array of 32 table offset values, followed by a data array of 32-bit words. The data array contains the compression tables themselves. The offsets in the header are indexed by a “compression table slot”. Each offset identifies the start of each compression table within the data array, in terms of 32-bit words relative to the end of the header. If an offset is set to 0xffffffff, then there is no compression table associated with that compression table slot.
The software provides a command that dumps the contents of this data structure, “Dump Huffman”. When this command is received, the Memory Server task telemeters the raw contents of this entire data structure in a series of “Bep Read Reply” telemetry packets, tagged with the TTAG_DUMP_HUFFMAN format tag.
Commands
∙ Command to dump the Huffman table data structure:
dump n huffman | # No additional parameters |
Science Telemetry
∙ Command Echo of a “Dump Huffman” request
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
dumpHuffman = { | # No command parameters | |
} | ||
} | ||
The overall format of the read-reply telemetry packet is identical to that in Section 3.6.1.1, except the telemetry format tag will be set to TTAG_DUMP_HUFFMAN. The resulting data array will consist of an array of 32 4-byte offset values, followed by a raw data array of 8197 32-bit data words. The bit-level format of the compression tables themselves is described in Huffman Coding of ACIS Pixel Data (MIT-CSR 36-56102). The number of telemetry packets that will be sent is ceil((32+8197)/(1023-7)) = 9.
Since the Huffmap table is used to decompress bias maps and raw image frames, a corrupted table will cause serious problems. If the on-board table is updated via addPatch or writeBep command, a copy must be retained for subsequent ground processing. Similarly, a corrupted bias packet or raw image packet must be corrected or several rows will be lost. See the ACIS memo “Repairing Bit Errors in Compressed ACIS Packets” listed in Table 1.2.
NOTE: A common error when running the instrument “by-hand” is to forget that the Huffman tables require more than one telemetry packet to send, and to issue a dump command for another item before the Huffman table has been completely sent.
Warning
Description
Patches to ACIS flight S/W are grouped into “nodes”, each defined by an addPatch command (see Section 3.7.1.1) that contains one or more 32-bit values to write sequentially into BEP memory, starting at a given 32-bit address.
ACIS maintains a list of nodes in its I-cache memory, and provides a command to dump the raw contents of this list, using the “Dump Patchlist” command. The resulting series of one or more “BEP Read Reply” telemetry packets is tagged with a telemetry format tag, TTAG_DUMP_PATCHES. Since the list of patch nodes within ACIS is stored first in high-memory, and then grow downward in memory, the format of the dumped list is complex (see Table 3.23).
Commands
∙ Command to dump the PatchList:
dump n patchList | # No additional parameters |
Science Telemetry
∙ Command Echo of a “Dump Patchlist” request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
dumpPatchList = { | # No command parameters | |
} | ||
} | ||
The overall format of the read-reply telemetry packet is identical to that in Section 3.6.1.1, except the telemetry format tag will be set to TTAG_DUMP_PATCHES.
The patch nodes are stored in reverse order in memory, with the first word of the data structure at location 0x800ffffc. The last byte location in the dump will always be:
(requestedAddress + requestedWordCount) = 0x800ffffc |
The easiest way to parse the patch list data is to start from the end of the dumped data, and work backwards towards the beginning. The sent data format, indexed as 32-bit words, is as follows, where RWC is the requestedWordCount field in the “BEP Read Reply” telemetry packets:
Item | Address | Contents | Description
|
End Node 2 | RWC-7-wordCount1-wordCount2 | data[wordCount2] | Node 2 patch data |
... |
|
| |
RWC-8-wordCount1 |
| ||
RWC-7-wordCount1 | wordCount2 | 32-bit words in patch |
|
RWC-6-wordCount1 | dstAddress | Destination address |
|
Start Node 2 | RWC-5-wordCount1 | patchId | Patch identifier |
End Node 1 | RWC-4-wordCount1 | data[wordCount1] | Node 1 Patch data |
... |
|
|
|
RWC-5 |
|
|
|
RWC-4 | wordCount1 | 32-bit words in patch |
|
RWC-3 | dstAddress | Destination address |
|
Start Node 1 | RWC-2 | patchId | Patch identifier |
Packet End | RWC-1 | checksum | 32-bit XOR checksum |
If there are no nodes in the list, only the checksum is telemetered.
NOTE: The size of the dump depends on the number of nodes in the patch list and the size of the data area in each node. Patches are stored from the top of the BEP’s I-cache (0x80100000) downward, ending at the top of parameter block storage (0x800dfdc0), but some of this region must be reserved for instruction text derived from the patches themselves.
In the current patch load, level GHI, the patches occupy 24.8 Kbytes at the top of I-cache and the new instruction text occupies 32.6 Kbytes above the parameter blocks, leaving 71.8 Kbytes currently unused. The instruction text area is larger than the patches themselves because of the patchId, dstAddress, and wordCount fields described in Table 3.23.
NOTE: The stored on-board pointer to the end of the list (i.e. where to put the next patch node) is not telemetered in the dump. If needed, this field can be read using a “Read BEP” command, using 0x800ffffc as the readAddress, and 1 as the wordCount. The read should be 4-bytes less than the requestedAddress field produced by the dumped patch list “BEP Read Reply” packets.
Since the binary patch dump files are difficult to read, scripts have been written to make the task easier. lpatch lists the dump contents as a series of addPatch commands. test-patch-load.pl compares patch load files from 4 sources: an ACIS offline command table, a patch load description in TSV format, a binary patch dump file, and one or more of the CLD files that were named in the TSV file. It compares the sources and reports discrepancies.
Description
In order to dump the contents of the ACIS System Configuration table (see Section 3.3), the user issues a “Dump SysConfig” command packet. Upon receipt of the command, the Memory Server task telemeters the table using a single “BEP Read Reply” telemetry packets, tagged using the TTAG_DUMP_SYS_CONFIG telemetry format tag.
Commands
∙ Command to dump the System Configuration table:
dump n systemConfig | # No additional parameters |
Science Telemetry
∙ Command Echo of a “Dump SysConfig” request
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
dumpSysConfig = { | # No command parameters | |
} | ||
} | ||
The overall format of the read-reply telemetry packet is identical to that in Section 3.6.1.1, except the telemetry format tag will be set to TTAG_DUMP_SYS_CONFIG.
The format of the data portion of the dump consists of an array of 16-bit words. The first two words contain a 32-bit checksum of the table. The remaining words are indexed by the system configuration item identifiers, SYSSET_*, used to modify the table (see Section 3.3).
Warning
The ACIS software provides three mechanisms for loading code and/or data into the instrument. The first method uses the “Load from Uplink” feature, mentioned in Section 3.1.4. The second method is to load patches into the instrument, that when the instrument is warm booted, overwrite sections of code and/or data copied from EEPROM into RAM. The third method is to use one of the “Write Memory” commands to directly write into the various memory types on the system. The following sections describe these second and third methods.
NOTE: In general, patching and writing to RAM on ACIS can crash the software. The loads for these writes are intended to be built by the ACIS software maintenance team.
ACIS maintains a set of patch nodes in the top of its instruction cache. When the instrument is warm booted (see Section 3.1.3.3), code and data are copied from EEPROM into the instrument RAM, and items specified in the patch nodes are then written on top of the copied code and data.
Description
The user loads patch nodes into the instrument using “Load Patch” commands. Each node specifies a 16-bit identifier (that must not be 0xffff, see Section 3.7.1.3), the destination address to write to when the instrument is warm booted, and an array of up to 125 32-bit words to write. The instrument determines the number of words in the array from the command packet length. If a patch requires more than 125 words, more than 1 patch node must be used to perform the write.
Commands
∙ Command to add a patch
add n patch patchId address { | ||
word1 word2 ... | ||
} | ||
The patchId uniquely identifies the patch node. (NOTE: within the instrument no more than one patch node can have the same patchId at a time). The destination address must lie on a 4-byte boundary.
For example, a command to cause the software version number to be changed to 0x4321 upon the next warm boot, assuming for this example that the address of the version number variable is 0x8001fdf0, is:
add n patch 0 0x8001fdf0 { | ||
0x4321 | ||
} | ||
Science Telemetry
∙ Command Echo of a successful “Add Patch” command:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
addPatch = { | # No command parameters | |
patchId | = 0..65534 | # Id of patch |
writeAddress | = n | # Address to patch |
writeData | = n n n ... | # Data to write |
} | ||
} | ||
If an error is encountered, such as the patchId already being used by a patch node loaded earlier, the commandEcho result field will contain 4 (CMDRESULT_BAD_ARGUMENT), and the patch will not be stored in the list.
Warning
Description
Once the patch nodes have been loaded into ACIS, they are installed whenever the instrument performs a warm re-boot. The patches are applied in the order in which they were loaded into the instrument. Section 3.1.3.3 describes the overall sequence of steps performed during a warm boot of the instrument, including the resulting command sequence and telemetry indicators.
Warning
Description
ACIS provides two mechanisms to reset the patch list, and one mechanism to remove single patch nodes from the list. To remove one or more patch nodes from the list, the user issues a “Remove Patches” command, specifying a list of Patch Identifiers to remove. When the instrument receives this command, it locates and removes all nodes that contain a Patch Identifier that matches one of those in the list. The removal process compacts the patch list, releasing memory space at the end (low-memory) of the list.
There are two mechanisms that will remove all of the patches in the list. As mentioned earlier, a power-cycle or cold re-boot of the instrument will empty the contents of the patch list (see Section 3.1.3.1 and Section 3.1.3.2). The user can also reset the entire patch list by issuing a “Remove Patches” command, and specifying 0xffff as the Patch Identifier. This will cause the instrument to reset the contents of the entire patch list.
Commands
∙ To remove a set of patches from the list:
remove n patch { | ||
n n ... | # List of patchIds to remove | |
} | ||
WARNING: If any of items in the array is 0xffff, the entire list will be removed.
∙ To remove all patches in the list:
remove n patch { | ||
0xffff | # Remove the entire list | |
} | ||
NOTE: To remove the effect of the patches from the code and data in RAM, the BEP must be rebooted.
Science Telemetry
∙ Command Echo of a “Remove Patches” command
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
removePatches = { | ||
patchIds | = n n ... | # Array of patch IDs |
} | ||
} | ||
If there an error is encountered, e.g. if the specified patchId is not currently present in the stored patchlist, the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT). The instrument, however, will continue to remove the remaining patchIds specified in the command.
Warning
See Section 3.6.2.4.
Description
The patches described in the preceding section will only overwrite BEP memory after a successful warm boot. By contrast, ACIS also provides for instantaneous memory writes to the BEP using the Memory Server task. The ACIS maintainer can write to any location in the BEP address space using a “Write BEP” command packet. The command packet specifies that location to write to, and an array of up to 125 32-bit data words to write. The instrument determines the number of data words using the command packet length. The destination address must be aligned to a 32-bit word location (i.e. evenly divisible by 4). Upon receipt of the command, the Memory Server task will copy the supplied data words to the specified location.
NOTE: If data is written to storage used by the instrument for code or data, the next reset of the instrument will overwrite the written area with the code and/or data from EEPROM.
The constraints for memory writes are the same as those for memory reads:
The start address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4)
If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
The region being read must not cross an Instruction Cache address boundary
These addresses are: 0x80080000 and 0x800fffff. If the region crosses one of these boundaries,
the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo result
field.
If the region is in a FEP shared memory area, the associated FEP must be powered on
The FEP shared memory regions are shown in Table 3.18. If the FEP does not have power, a BEP Bus Error Exception will be raised and will cause a Fatal Error and subsequent BEP re-boot.
Commands
∙ Command to write a block of BEP memory
write n writeAddress { | # Write to BEP memory, starting at writeAddress | |
n n ... | # Array of data words to write | |
} | ||
For example, a command to cause the software version number to be immediately changed to 0x4321, assuming for this example that the address of the version number variable is 0x8001fdf0, is:
write n 0x8001fdf0 { | ||
0x4321 | ||
} | ||
Science Telemetry
∙ Command Echo of a successful “Write BEP” command:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
writeBep = { | ||
writeAddress | = n | # Address to write first word |
writeData | = n n ... | # Array of words to write |
} | ||
} | ||
If an error is encountered, such as specifying an invalid address, the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT), and the memory will not be over-written.
If the Memory Server task is in the process of executing an earlier write or execute command, the Command Echo result field will contain 3 (CMDRESULT_BUSY), and the new data will not be written.
If the Memory Server task is in the process of performing an earlier memory read or dump, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED), the read operation will be aborted, and the new data will be written.
Warnings
Description
The ACIS maintainer initiates memory writes to a FEP using a “Write FEP” command packet that specifies which FEP to write to, the starting location to write, and an array of up to 125 32-bit words to write. The instrument determines the number of words to write using the command packet length.
ACIS implements user-initiated memory writes to the FEP using the Memory Server task. See Table 3.20 for the memory map of each FEP. If the write is to the FEP’s shared memory (see Table 3.18), the writes are made directly by the BEP into that memory. If, however, the locations are not directly accessible by the BEP (e.g. within the FEP’s I-cache or D-cache), the BEP will use that FEP’s mailbox to “collaborate” with the software running on the FEP to perform the write.
The constraints for memory writes are the same as those for memory reads:
The start address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4)
If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
The region being written to must not cross an Instruction Cache address boundary
These addresses are: 0x80080000 and 0x800fffff. If the region crosses one of these boundaries,
the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo result
field.
The FEP must be powered when the write command is received
Attempts to write to a FEP when the BEP knows that it is not powered will cause the write to
be rejected. The Command Echo result field will be set to 10 (CMDRESULT_BOARD_OFF).
The FEP must remain powered during the write
Attempts to write to a FEP’s memory when the FEP is not powered may cause the write to
abort, or possibly cause a BEP Bus Error Exception, which will subsequently cause a Fatal Error
and BEP re-boot.
Commands
∙ Command to write a block of FEP memory
write n fep fepId writeAddress { | # Write to writeAddress of fepId | |
n n ... | # Array of data words to write | |
} | ||
Science Telemetry
∙ Command Echo of a successful “Write FEP” command:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
writeFep = { | ||
fepId | = 0..5 | # FEP to write to |
writeAddress | = n | # Address to write first word |
writeData | = n n ... | # Array of words to write |
} | ||
} | ||
If an error is encountered, such as specifying an invalid address, the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT), and the patch will not be stored in the list.
If the Memory Server task is in the process of executing an earlier write or execute command, the Command Echo result field will contain 3 (CMDRESULT_BUSY), and the new data will not be written.
If the Memory Server task is in the process of performing an earlier memory read or dump, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED), the read operation will be aborted, and the new data will be written.
If the BEP knows that the FEP is not powered at the time of the request, the Command Echo result field will contain 10 (CMDRESULT_BOARD_OFF) and the new data will not be written.
Warning
As described in the Warning to Section 3.6.1.3 on Page 102, pixel pairs in Image and Bias arrays are represented by 12-bit integers in bits 0..11 and 16..27 of each 32-bit word. The contents of bits 12..15 and 28..31 will be zero when read from the memory mapped interface and ignored when written.
Description
Although it is not recommended, the maintainer can initiate writes to DEA video board SRAM and PRAM using “Write SRAM” and “Write PRAM” commands, respectively, specifying the index of the CCD associated with that video board (see Section 3.3.4), the starting SRAM or PRAM index to write to, and a number of 16-bit data words to write. The ACIS software determines the number of words to write using the command packet length. The following constraints apply:
The selected Video Board must be powered
Attempts to write to a Video Board when the board is not powered will cause the write to be
rejected. The Command Echo result field will be set to 10 (CMDRESULT_BOARD_OFF) (see Warnings
concerning DEA power)
The sequencers must be idle
If a science run is in progress when a write is requested, or starts while a write request is active,
the write will be aborted. NOTE: It is STRONGLY recommended that one does NOT perform
a direct SRAM or PRAM write during the setup stage of a science run, since the Science task
may also be loading SRAM and PRAM (NOTE: once the sequencers are running, the hardware
prevents reads and writes to the sequencer RAM). There is little risk to the hardware, however,
since the ACIS on-board Sequence Checker will verify that contents of the SRAM and PRAM
cannot hurt the hardware.
Commands
∙ Command to write a block of SRAM memory
write n sram ccdId writeIndex { | # Write into SRAM of CCD ccdId at writeIndex | |
n n ... | # Array of 16-bit integers to write | |
} | ||
∙ Command to write a block of PRAM memory
write n pram ccdId writeIndex { | # Write into PRAM of CCD ccdId at writeIndex | |
n n ... | # Array of 16-bit integers to write | |
} | ||
Science Telemetry
∙ Command Echo of a generic SRAM write request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
writeSram = { | ||
ccdId | = 0..9 | # CCD’s video board to write to (0-9) |
writeIndex | = n | # 16-bit word address to write first word |
writeData | = n n ... | # Array of 16-bit words to write |
} | ||
} | ||
∙ Command Echo of a generic PRAM read request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
writePram = { | ||
ccdId | = 0..9 | # CCD’s video board to write to (0-9) |
writeIndex | = n | # 16-bit word address to write first word |
writeData | = n n ... | # Array of 16-bit words to write |
} | ||
} | ||
If the write interrupts an earlier on-going read, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED).
If the write attempts to interrupt a Write-Memory or Execute-Memory activity, the write is not performed. In this case, the Command Echo result field will contain 3 (CMDRESULT_BUSY). If an attempt is made to write to a Video Board whose power is off, the command will be rejected and the Command Echo result field will contain 10 (CMDRESULT_BOARD_OFF).
Warning
ACIS provides mechanisms for the maintainer to directly call C, C++ or assembler subroutines in both the BEP and the FEPs.
NOTE: In general, calling code directly within ACIS can crash the software. These types of commands are intended to be built by the ACIS software maintenance team.
Description
ACIS implements commanded function calls on the BEP using the Memory Server task. The maintainer prepares an “Execute BEP” command packet, specifying the address of the function to call, and a list of zero to up to 20, 32-bit arguments to pass to the called subroutine.
Upon receipt of the command, the Memory Server task calls the subroutine indirectly via a pointer, always passing 20 arguments. The values specified in the command packet will appear in order at the beginning of the argument list, and the remaining passed arguments will contain unpredictable values. In C and C++, one can always pass more arguments to a subroutine than the subroutine demands (NOTE: This may or may not be allowed for certain assembly language subroutines. If needed, the maintainer can load a translation subroutine using “Write BEP” (see Section 3.7.2), which deals with the extra arguments and invokes the target routine).
The called subroutine runs under the Memory Server task, which will be blocked until the called routine returns. Attempts to execute subsequent Memory Server commands, such as another execute command or a read or write command, while the called subroutine has control, will be rejected with a 3 (CMDRESULT_BUSY) reply in their respective Command Echoes.
Once the called subroutine returns, the Memory Server task records the return value in a “BEP Execute Reply” telemetry packet. For the C and C++ compilers used for the Mongoose, this value is always in the same CPU register. If the function does not return any value, the recorded reply value will be meaningless. The maintainer should be aware of what the return value, if any, means, and therefore should know how to deal with it.
The constraints for execute memory commands are as follows:
The function address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4)
If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
The function being executed cannot be located in the BEP’s Data Cache
These addresses are: 0x80000000 and 0x8007ffff. If the specified function address is in this
region, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
If the function is in a FEP shared memory area, the associated FEP must be powered on
Only the portion of each FEP’s bulk memory from +0x48000 to +0x100000 (see Table 3.18) have
been shown to be executable on the BEP via the shared-memory interface. Attempting to run
from other regions, e.g., Image or Bias storage, will cause the BEP to hang, but the interface will
remain powered-up and can be restored simply by halting and re-running the BEP.
Image and Bias array pixels must be written in whole words
As described in the Warning to Section 3.6.1.3 on Page 102, pixel pairs in memory-mapped Image and Bias arrays are represented by 12-bit integers in bits 0..11 and 16..27 of each 32-bit word. The contents of bits 12..15 and 28..31 will be zero when read from the memory mapped interface and ignored when written.
If the FEP does not have power, a BEP Bus Error Exception will be raised and will cause a Fatal Error and subsequent BEP re-boot.
Commands
∙ Command to execute a routine on a BEP:
exec n functionAddress { | # Execute BEP routine at functionAddress | |
n n ... | # Up to 20 arguments to pass to function | |
} | ||
For example, the maintainer has a diagnostic program to run on FEP_2, and wants to load it using the FepManager’s loadRunProgram member function, located at 0x8008939c. The first argument to the loadRunProgram is the address of the fepManager object (in C++, the first argument of all non-static member functions is a pointer to the object), which is 0x80003da4. The second argument is the FEP Id, which, for FEP_2, has a value of 2, and the third is a pointer to the FepProgram to load. Assume that the program has already been loaded into RAM using a series “Write BEP” commands, at location 0x80030000. The command to call the subroutine is:
exec n 0x8008939c { | # Call FepManager::loadRunProgram | |
0x80003da4 | # Address of fepManager object | |
2 | # fepId = 2 | |
0x80030000 | # Address of pre-loaded FEP image | |
} | ||
Science Telemetry
The command echo from an “Execute BEP” command is:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
executeBep = { | ||
functionAddress | = n | # Address of BEP function to execute |
functionArguments | = n n ... | # Array of function arguments to pass |
} | ||
} | ||
If an error is encountered, such as specifying an invalid address, the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT), and the function will not be called.
If the Memory Server task is in the process of executing an earlier “write” or “execute” command, the Command Echo result field will contain 3 (CMDRESULT_BUSY), and the function will not be called.
If the Memory Server task is in the process of performing an earlier memory “read” or “dump”, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED), the read operation will be aborted, and the function will be called.
When the called function returns, the Memory Server task will produce a “BEP Execute Reply” telemetry packet:
bepExecuteReply[n] = { | ||
... | ||
commandId | = n | # ID of command containing call |
bepTickCounter | = n | # BEP 10Hz tick counter at the time of the call |
functionAddress | = n | # Address of the function that was called |
returnedValue | = n | # 32-bit value returned by the called function. |
} | ||
NOTE: returnedValue is meaningless if the function is declared “void”.
Warning
Description
ACIS implements commanded function calls on the FEP using the Memory Server task, in cooperation with software already running on the targeted FEP. The maintainer prepares an “Execute FEP” command packet, specifying which FEP to use, the address in FEP memory space of the function to call, and a list of zero to up to 20, 32-bit arguments to pass to the called subroutine.
Upon receipt of the command, the Memory Server task calls a routine that forms and issues a request to the FEP software, via the BEP to FEP mailbox, and waits for a reply. The FEP software then calls the subroutine indirectly via a pointer, always passing 20 arguments. The values specified in the command packet will appear in order at the head of the argument list, and the remaining passed arguments will contain unpredictable values. In C and C++, one can always pass more arguments to a subroutine than the subroutine demands (NOTE: This may or may not be allowed for certain assembly language subroutines. If needed, the maintainer can load a translation subroutine using “Write FEP” (see Section 3.7.2), which deals with the extra arguments and invokes the target routine).
The dispatch of the request to the FEP runs under the Memory Server task, which will be blocked until the FEP replies to the request, or until the BEP times out waiting for the reply. The called routine on the FEP must return within 10 seconds to avoid a time-out (NOTE: The FEP routine will continue to run after the time-out has expired. The BEP will reset and re-load the FEP if it remains non-responsive during the setup stage of the next science run). Attempts to execute subsequent Memory Server commands, such as another “execute” command or a “read” or “write” command, while the called subroutine has control, will be rejected with a 3 (CMDRESULT_BUSY) reply in their respective Command Echo result fields.
Once the called subroutine returns on the FEP, the FEP software packages the returned value in its reply to the BEP. The Memory Server task records the returned value in a “FEP Execute Reply” telemetry packet. For the C compilers used for the Mongoose, this value is always in the same CPU register. If the function does not return any value, the recorded reply value will be meaningless. The maintainer should be aware of what the return value, if any, means, and therefore should know how to deal with it.
The constraints for execute FEP memory commands are as follows:
The start address must be aligned to a 32-bit word boundary (i.e. evenly divisible by 4)
If not, the command will be rejected, with a 4 (CMDRESULT_BAD_ARGUMENT) in the Command Echo
result field.
The FEP must be powered when the execute command is received
Attempts to call a routine on a FEP when the BEP knows that the FEP is not powered
will cause the “execute” to be rejected. The Command Echo result field will be set to 10
(CMDRESULT_BOARD_OFF).
The FEP must remain powered during the call
Attempts to call a FEP routine when the FEP is not powered may cause the request to abort,
or possibly cause a BEP Bus Error Exception, which will subsequently cause a Fatal Error and
BEP re-boot.
Commands
∙ Command to execute a routine on a FEP:
exec n fep fepId functionAddress { | # Execute routine at functionAddress of FEP fepId | |
n n ... | # Up to 20 arguments to pass to routine | |
} | ||
Science Telemetry
∙ The command echo from an “Execute FEP” command is:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
executeFep = { | ||
fepId | = 0..5 | # ID of FEP to call |
functionAddress | = n | # Address of BEP function to execute |
functionArguments | = n n ... | # Array of function arguments to pass |
} | ||
} | ||
If an error is encountered, such as specifying an invalid address, the Command Echo result field will contain 4 (CMDRESULT_BAD_ARGUMENT), and the function will not be called.
If the Memory Server task is in the process of executing an earlier “write” or “execute” command, the Command Echo result field will contain 3 (CMDRESULT_BUSY), and the function will not be called.
If the Memory Server task is in the process of performing an earlier memory “read” or “dump”, the Command Echo result field will contain 14 (CMDRESULT_CLOBBERED), the “read” operation will be aborted, and the function will be called.
When the called function returns, the Memory Server task will produce a “FEP Execute Reply” telemetry packet:
fepExecuteReply[n] = { | ||
... | ||
commandId | = n | # ID of command containing call |
fepId | = n | # ID of FEP (0-5) |
bepTickCounter | = n | # BEP 10Hz tick counter at time of the call |
functionAddress | = n | # Address of the function that was called |
returnedValue | = n | # 32-bit value returned by called function |
} | ||
NOTE: returnedValue is meaningless if the function is declared “void”.
If the called subroutine does not return within 10 seconds, the BEP will not issue the “FEP Execute Reply” telemetry packet. The FEP routine may continue to execute until the BEP attempts to setup for a subsequent science run. If the FEP remains non-responsive at this point, the BEP will reset and re-load the FEP.
Warning
Description
ACIS was designed to suspend an observation prior to passing through Earth’s radiation belts and to resume that operation afterwards. For this purpose, a DPA hardware command, 1RMONIRM, was implemented with a single ON/OFF value to Assert or De-Assert a Radiation Monitor Flag. The BEP flight software responds to these commands so as to place a science observation in “stopped” or “started” mode, dependent on 1RMONIRM and the most recently received DPA software start or stop command.
Alas, it was not to be. After suffering serious damage to the CCDs during early belt passages, commands are sent to Chandra to physically move ACIS out of the focal plane before belt passage, power down all video boards and some or all FEPs, and only restart science observations after emerging from the belts. Since powering down the FEPs loses the contents of their bias maps, nothing is gained by restarting the previous observations, so the Radiation Monitor Trigger is no longer used. It is included in this manual in case some use can be found for it in the future.
Commands
Radiation Alert Hardware Serial Digital Command Mnemonics
IP&CL syntax | bcmd syntax | Command Description
|
1RMONIRM (v=1) | set radiationmonitor high | Assert Radiation Monitor Flag |
1RMONIRM (v=0) | set radiationmonitor low | De-assert Radiation Monitor Flag |
Engineering Telemetry
As the science run is stopped, and as the video boards are powered off, the electric current levels will drop. See Table E.1 in Appendix E for a table of current levels under different instrument configurations.
Science Telemetry
When the radiation monitor flag is asserted, the instrument reports the following to Software Housekeeping:
SWSTAT_SCI_INHIBIT_ON | = 74 | Inhibited science runs |
SWSTAT_DEACCD_POWEROFF | = 81 | Power off to the DEA video boards |
Once the radiation subsides and the monitor flag is de-asserted, ACIS reports the following housekeeping:
SWSTAT_SCI_INHIBIT_OFF | = 75 | Science runs are allowed again |
SWSTAT_DEACCD_POWERON | = 80 | Re-powering the video boards (if necessary) |
If a science run was in progress when the radiation monitor is asserted, the run will be aborted. The resulting “Science Report” telemetry packet (see Section 4.1) will report a termination code of SMTERM_RADMON, indicating that the run was terminated due to the radiation monitor.
If a command is issued to start a science run while the monitor flag is asserted, the start will be deferred until the flag is de-asserted. The Command echo will indicate this in the result code with a 13 (CMDRESULT_INHIBITED).
If a command is issued to stop a science run while the monitor flag is asserted, the current run will not resume once the flag is de-asserted. The command echo will report a result code of 13 (CMDRESULT_INHIBITED).
Warning
For example, if ACIS is performing a science run, and the monitor goes off, the run is aborted. Once the monitor subsides, the science run will be re-started, with a forced recomputation of its bias maps. If, however, a stop command followed by a new start run command is received while the monitor is active, the second science run will be started, possibly with a different parameter block, when the monitor flag is de-asserted.
This Section describes the various activities used to perform routine science operations using the ACIS instrument software.
The overall process of performing a science run within ACIS is as described in the ACIS Software Requirements Specification (SRS), MIT 36-01103. This Section covers some of the implementation details not provided in the SRS, and recapitulates the overall process. (Although, a science run consists of the following overall steps, there are a variety of variants and details that are not addressed by this template, e.g. if and when DEA Housekeeping runs are started):
Power on those DEA video boards and FEPs required for the run
Load a parameter block and, optionally, a window block
Start the run
Wait for the desired observation time
Stop the run
Within ACIS, there are basically two types of science runs:
In Timed Exposure (TE) runs, the CCDs are statically integrated for some period of time, and then the resulting image is “captured”, i.e., rapidly moved into a shielded frame store, from which it is read out and processed. (NOTE: The “capture” step introduces a “smear” into the integration cycle). In order to avoid overloading the ACIS DEA Power Supply, the “capture” steps for each CCD are staggered in time, in the order in which the ccdIds appear in the fepCcdSelect array in the timed exposure parameter block (see Page 140).
In Continuous Clocking (CC) runs, the CCD rows are continuously shifted, and only integrated during the successive short pauses while each row is read out to its DEA Video Board for processing. No “staggering” is possible or necessary in Continuous Clocking mode.
Description
In Continuous Clocking mode, the user cannot explicitly set the integration time of each row. Instead, the exposure time is a fixed function of the summing parameters, the output register mode, and the number of overclocks parameter within loadCcBlock, the CC Mode Parameter Block. See Appendix H.8 for the details.
The time over which summed rows are clocked in CC mode is given by:
Seconds_per_row = 4 ⋅ 2r + + 2o + 5⋅ 10-5 |
where
n | = 256 or 512 | 256 if outputRegisterMode is FULL or DIAG, 512 otherwise |
m | = 1 or 2 | 1 if value of columnSum from the parameter block is 0; 2 otherwise |
r | = | Value of rowSum from the parameter block |
o | = | Value of overClockPairsPerNode from the parameter block |
The “static” integration time of a (possibly summed) row (i.e., the time spent integrating the row while the CCDs were not moving the charge within it) is the row rate, minus the parallel transfer time, i.e., Seconds_per_row = 4 ⋅ 2r ⋅ 10-5 seconds.
Parameters
The parameters that govern the row rate are contained in the Continuous Clocking Parameter Block (see Section 4.1.4.3), defined by the loadCcBlock command packet definition:
load n cc s { | ||
... | ||
rowSum | = n | # Row summation factor: summed rows = 2n |
columnSum | = n | # Column summation factor: true unless n==0 |
overclockPairsPerNode | = n | # Number of overclocks/node = 2*n |
outputRegisterMode | = 0..3 | # Clocking mode: FULL, DIAG, AC, BD |
... | ||
} | ||
Description
In Timed Exposure mode, the user explicitly specifies in the parameter block (see Section 4.1.4.1) one or two static integration periods, primaryExposure and secondaryExposure, along with a dutyCycle parameter specifying the ratio between the two, within loadTeBlock, the TE Mode Parameter Block. Ideally, the integration of one exposure should overlap, in time, the transfer of the previous exposure to the DEA/DPA for processing, which usually takes about 3.3 seconds. If, however, the integration time is commanded to be less than this transfer time, the flight software will ensure that the two processes don’t overlap: by quickly flushing all charge out of the CCDs prior to the start of each integration. This achieves the shorter integration time (i.e. less than 3.3 seconds), but at the cost of reducing the overall exposure rate.
Due to the “staggered” image capture, the minimum possible integration time depends on the number of CCDs used for the run. The minimum integration time that can be specified, with flushes, is as follows:
CCDs | Seconds |
1 | 0.1 |
2 | 0.1 |
3 | 0.2 |
4 | 0.2 |
5 | 0.3 |
6 | 0.3 |
In order to avoid CCD flushing needed to achieve the shorter integration times, the time must not be less than the time taken to capture (smear time) and transfer an image from the CCD to the DEA/DPA (transfer time). This time depends on a number of clocking parameters. See Appendix H for the details. The minimum non-short integration time that can be specified is as follows:
min_time = 4104 ⋅ (c - 1) + 4c ⋅ (r0 + 2) + 2 ⋅ + ⋅ + 2o + 9⋅ 10-5 |
where
n | = 256 or 512 | 256 if outputRegisterMode is FULL or DIAG, 512 otherwise |
m | = 1 or 2 | 1 if onChip2x2Summing is 0; 2 otherwise |
c | = | Number of CCDs selected (from fepCcdSelect) |
r | = | Value of subarrayRowCount |
r0 | = | Value of subArrayStartRow |
o | = | Value of overClockPairsPerNode |
For example, for a configuration with all 6 CCDs, no on-chip summing, a full image of 1024 rows, the output register mode in FULL mode, and 30 overclock pixels per node, the minimum non-short integration time that can be specified is 3.27224 seconds. Since the time must be expressed in 1/10th second increments, this becomes 3.3 seconds.
For another example, consider a configuration with a single CCD, 2x2 on-chip sum, a sub-array with 100 rows, starting at row 0, with the output registers in FULL mode, and only 2 overclock pixels per node, the time would be 0.14368 seconds, becoming 0.2 seconds.
Parameters
The parameters that govern the minimum integration times are contained in the Timed Exposure Parameter Block, defined by the loadTeBlock command packet definition:
load n te slotId { | ||
... | ||
fepCcdSelect | = n 0...n5 | # FEP Indexed array of CCD Ids. Number of CCDs |
# configured is number of entries in this array | ||
# CCD_DESELECT) | ||
onChip2x2Summing | = 0..1 | # =1 for 2x2 on-chip sum summation |
subarrayStartRow | = 0..1023 | # 1st row of subarray (counting from 0) |
subarrayRowCount | = 0..1023 | # One less than # rows in subarray |
overclockPairsPerNode | = 0..15 | # number of pairs of overclocks |
# pixels = overclockPairsPerNode * 2 | ||
outputRegisterMode | = 0..3 | # Clocking Mode: FULL, DIAG, AC or BD |
... | ||
} | ||
Description
Upon receipt of one of the “Start Science Run” commands, the Science Manager task starts setting up for the run. This setup time varies, depending on the various parameters contained in the parameter block and the state of hardware and software in the system. This Section describes the setup process, the approximate time for each step, and a summary of the parameters that affect this time. This Section does not describe the times taken to perform a bias re-computation, or to report the bias maps to the spacecraft, which are discussed in Section 4.2.1 and Section 4.2.2, respectively.
The overall steps performed by the Science Manager task are as follows, with time estimates of each step. For simplicity, time estimates of each step are approximated to the second or minute, as appropriate:
Copy the parameter blocks
At the start of the science run, the Science Manager makes a copy of the parameter block (and
optional window block) that it is about to use. The time taken to perform this step is very small,
and always less than 1 second.
Dump the parameter blocks to telemetry
Once the parameter block or blocks have been staged, they are copied into a telemetry packet
and posted for transfer. The copy takes much less than 1 second, and the time to telemeter the
blocks also takes less than 1 second.
Setup data processing
Once the parameter blocks have been posted, the Science Manager sets up its internal data
structures and variables to process the data for the current mode. This setup stage takes less than
1 second.
Reset Video Boards
At the start of each run, the BEP turns the video command clocks on and off again, and turns
video sequencer clocks on before bias creation and event processing. The only time the BEP sends
a hard reset (PULSE_DEARST) to the video boards is when it boots, i.e., in response to a “run
bep” command.
Load Video Board Registers and DACs from System Configuration Table
After the video boards have been reset, the Science Manager task loads the register values and Digital-to-Analog converter values into each video board. To ensure that the video boards are communicating properly, each write is followed by a read and compare. On the video boards, different register actions require different time-delays to take effect prior to issuing another command. In order to be robust to changes in the video board timing requirements, the ACIS software always inserts a 1 second time-delay after each video board register write. Although there are only 4 control registers for each video board, some of the control bits are “edge-driven”. This implies that some actions require writing a 0 to a control register bit, followed by writing a ‘1’, or vice-versa.
As a result, the setup requires a total of 5 control register writes for each video board (not including starting the sequencers). The time to actually perform each write and each read after a write is no more than 100μs each, leading to a worst-case time that is on the order of 10ms for all registers on all 10 video boards. This is small compared to the 1 second delay added after each write. The time taken to load and read-back the control registers on all of the configured boards:
video_board_register_load_time = (5 * configured CCDs) seconds |
There are 23 video board Digital-to-Analog Converter registers on each video board. Because the science run parameter blocks duplicate the video ADC offset DAC values, ACIS performs 27 DAC writes to the video boards. Since the DAC values are write-only, there are no read-backs.
Each write takes no longer than 100μs. It takes less than 0.5 seconds to load the DACs into all 10 video boards. Using 1 second for all of the I/O times to and from the video boards for the register loads and DAC loads, leads to:
video_register_and_DAC_load_time = (5 * configured CCDs + 1) seconds |
∙ Load SRAM Library into Video Board
Each video board contains 32K of 16-bit words of Sequencer RAM, although the current SRAM library uses only 3648 words. Once the video board registers have been loaded, the Science Manager task loads the SRAM library into each configured video board. Each word of the library is written and then read-back to ensure that the board is communicating properly. Each write and subsequent read-back takes on the order of 200μs. The worst case time to load all of SRAM in each board is:
worst_case_load_time_per_board | = 65535 * 200 μs * configured CCDs |
= 13.107 seconds/board | |
The current load time per board, given the delivered size of the SRAM library, is much shorter:
current_load time_per_board | = 3648 * 200μs * configured CCDs |
= 0.7296 seconds/board | |
For example, the load of the current SRAM library into 6 CCDs takes about 4.3776 seconds.
∙ Generate and Load PRAM into Video Boards
The Science Manager task then constructs a sequencer Program RAM (PRAM) load that implements a clocking sequence with the configured properties. The video boards each contain 32K 16-bit words of PRAM, so the worst-case transmission of the PRAM load is on the order of that for SRAM, about 14 seconds/board. In practice, however, most PRAM loads are much smaller. The size and complexity of a PRAM load depends non-linearly on the clocking parameters chosen for the run. In general, single integration times, with no on chip summation lead to the smallest PRAM loads, on the order of 100 words. Some larger PRAM loads are on the order of 1600 words. Assuming the larger load size, the load time per board is:
example_PRAM_load_time_per_board | = 1600 * 200 μs * configured CCDs |
= 0.32 seconds/board | |
For example, a load of 1600 words of PRAM into 6 CCDs takes a total of about 1.92 seconds
∙ Re-load and re-run FEP code if necessary
The Science Manager task queries each configured FEP as to the state of its bias map. If a FEP does not respond, the Science Manager resets and re-loads software into the offending FEP, and starts the loaded code. Under most circumstances, the FEPs do not required resets. If, however, a radiation monitor alert, or aborted science run (e.g., if a science run is already active when a subsequent science run request is received) has reset the FEPs, all of those requested by the parameter block would need to be re-loaded. It takes approximately 10 seconds to reset and re-load a FEP (see Section 3.3.2, i.e., 60–70 seconds to re-start all 6.
∙ Load parameters into FEP
Once the FEPs are running and responding, the Science Manager loads the necessary parameters into the FEPs. This operation takes less than 1 second to configure all 6 FEPs.
∙ Acquire and telemeter standard DEA housekeeping
The Science Manager queries all of the housekeeping channels of all of the configured DEA video boards and telemeters the information in a DEA Housekeeping telemetry packet. Each analog housekeeping channel takes 0.5 seconds to read (see Section 3.4.6 Warnings), and there is a total of 20 analog channels to read on each board. Reading the video control registers from all the boards takes well under 1/10th second, and the time to pack the data into the telemetry packet takes under 1/2 second, so the total time to acquire, pack and post the DEA video board housekeeping is:
video_housekeeping = ((0.5 * 20) * configured boards + 1) seconds |
NOTE: Housekeeping values from the Video Boards will not be valid unless all 10 boards are powered up simultaneously.
∙ Check the safety of the DEA sequencer loads
To ensure that the loaded DEA sequence cannot overheat and subsequently damage the video board driver circuits, the Science Manager task checks the contents of the video board’s PRAM and SRAM loads. The speed of the checking algorithm depends heavily on the nature of the loads. In most cases, the algorithm’s buffering allows the PRAM and SRAM to be read back once. In some cases, however, the algorithm may run out of buffer space and read back a given Section of PRAM or SRAM many times while checking the load.
During testing, the time taken by the checking algorithm on a large, complex load, has never exceeded 2 seconds.
∙ Flush charge from the CCDs (Jitter DACs)
In order to flush electrical charge built up in the CCDs while they were idle since the previous science run, the Science Manager task must adjust the video board DAC levels, and clock the CCDs for at least 1 exposure cycle. To simplify the design, the Science Manager always clocks the CCDs for 11 seconds, which is greater than the longest frame time.
Description
ACIS manages telemetry buffering using fixed numbers of fixed sized buffers for each type of application, where a telemetry packet must fit into a single buffer, and a single buffer never contains more than a single packet. ACIS manages its telemetry output bandwidth by assigning the number and size of buffers allocated for each function or thread. The effect is that, although the output may sometimes be dominated by one particular type of buffer, on average each function can utilize its maximum allocation if it needs to, minus inefficiencies due to unused space in the fixed size buffers. If an application does not require its full telemetry allocation, the unused bandwidth can be used by a function requiring more bandwidth. Although the use of fixed size buffers simplified the ACIS design and improved its reliability, it makes the job of estimating telemetry utilization more difficult.
For example, the science data processing applications are allocated 400 buffers of 512 32-bit words each, whereas memory dumps are allocated only 4 buffers of 1023 words each. Assuming that the current science mode is generating a constant data stream, filling 70% of each telemetry buffer it uses, and that a memory dump is in progress that fills 100% of each of its buffers, the science task can buffer ((0.7 * 512) * 400) = 140K 32-bit words in the BEP telemetry buffers, while the memory server can buffer 4092 words. If the telemetry stream is saturated and the buffers fill up, the science task will use 97.3% of the bandwidth, and the memory server will use 2.7%.
NOTE: In prior flight software releases, the science task had been allocated 200 buffers of 1023 32-bit words each. However, most science modes did not often fill these buffers, and this was considered to be an inefficient use of the buffer allocation scheme.
Buffer Allocations
Table 4.1 lists the current buffer sizes and allocations for each type of telemetry packet (NOTE: These do not include the ring buffers on each FEP that can buffer up to 8K events). Note that in some cases, the buffer size exceeds the fixed packet size. This allows patching of the output format without having to modify the buffer size allocation.
Buffer | Buffer Count | Buffer
Size (bytes) | Telemetry Packet | Packet Size | Frequency |
Bias Thief | 20 | 4092 | dataCcBiasMap | 1564 | If configured to compute and send the map, n per science run, where n is the number of configured CCDs |
| dataTeBiasMap | 44+(4*n | Bad or no compression yields 1 1024-pixel bias row per packet. Excellent compression yields about 8 rows per packet. The system sends one map per configured CCD. |
||
DEA Housekeeping | 8 | 1024 | deaHousekeepingData | 20+(4*n queries) | 1 every sampleRate seconds |
Command Echo | 4 | 2048 | commandEcho | 520 | 1 per command |
Fatal | 1 | 256 | fatalMessage | 20 | 1 per software crash |
Memory | 4 | 4092 | bepReadReply | 28+(4*n words) | Varies
depending
on
read,
dump,
and
execute
commands |
| fepReadReply | 28+(4*n words) |
|
||
| pramReadReply | 24+(2*n entries) |
|
||
| sramReadReply | 24+(2*n entries) |
|
||
| bepExecuteReply | 24 |
|
||
| fepExecuteReply | 24 |
|
||
Science | 400 | 2048 | dumpedTeBlock | ≤ 820 | 1 per TE Science Run |
| dumpedCcBlock | ≤ 724 | 1 per CC Science Run |
||
| dataTeFaint | 12+(16*n events) | Zero
or
more
per
exposure,
depending
on
event
rate |
||
| dataTeGraded | 12+(7.25*n events) |
|
||
| dataTeFaintBias | 12+(29.5*n events) |
|
||
| dataTeVeryFaint | 12+(40*n events) |
|
||
| dataCcFaint | 12+(6.875*n events) |
|
||
| dataCcGraded | 12+(4.25*n events) |
|
||
| dataTeHist, dataTeEvHist | 16+(4*n bins) | In FULL or DIAG mode, 33 packets per histogramCount exposures. In AC or BD mode, 17 packets. |
||
| dataTeRaw | 24+(4*n | Bad
or
no
compression
yields
1
row
per
packet.
Excellent
compression
yields
about
8
rows
per
packet. |
||
| dataCcRaw |
|
|
||
| dataBiasError | 20+(4*n | Zero or more per exposure, depending on corruption rate of bias map |
||
| exposureCcRaw | 72 | n
per
exposure,
where
n
is
the
number
of
configured
CCDs |
||
| exposureCcFaint | 36 |
|
||
| exposureTeFaint | 72 |
|
||
| exposureTeFaintBias | 80 |
|
||
| exposureTeHistogram, exposureTeEvHistogram | 52 |
|
||
| exposureTeRaw | 36 |
|
||
| scienceReport | 48 | 1 per science run |
||
Startup | 1 | 4092 | bepStartupMessage | 28 | 1 per BEP startup |
SwHouse | 8 | 3088 | swHousekeeping | 16+(12*n | 1 every 64 seconds |
ACIS contains a total of 25 slots to hold various types of control blocks - TE, CC, 1D, 2D, and DEA. There are 5 slots reserved for each type of block. The following sections describe these parameter blocks and how they are managed.
Description
∙ teBlockSlotIndex
ACIS has five numbered slots in which it stores Timed Exposure Parameter blocks. The parameter blocks are loaded into a particular slot using a “load n te” command, specifying the slot number (0–4) in the “bcmd” command line, e.g.,
load 123 te 4 teblock.txt | # load TE pBlock from teBlock.txt into slot 4 |
The teBlockSlotIndex field will be set to 4. When a parameter block is loaded into a slot, that slot’s contents are overwritten by the new block contained in the command. If the instrument is power-cycled or cold booted (see Section 3.1.3.1, Section 3.1.3.2), the contents of the slots will be restored to their “as-launched” values. A warm boot (see Section 3.1.3.3), however, retains the contents of the most recently loaded slots.
∙ checksum
Each parameter block contains a checksum field, which is the bit-wise XOR of each 16-bit word in the command packet following the checksum field (i.e. starting with the lowest address 16-bit word of the parameterBlockId field). The bcmd command will create this field automatically, along with the rest of the command header.
∙ parameterBlockId
This is a 32-bit field used to uniquely identify the parameter block. ACIS reports its value in all exposure, bias map, bias error, and science report packets that use this parameter block for a bias computation or science run. In some cases, the Parameter Block used for science run data processing may differ from that used to compute the bias map used for the run, in which case, the telemetered parameterBlockId and biasParameterId values will differ.
NOTE: The intent of parameterBlockId is to aid bookkeeping on the ground. ACIS does not use the ID internally for any particular purpose, and users are free to use the field as they wish.
∙ fepCcdSelect
This field consists of an array of 6 CCD identifiers that are indexed by FEP Id. The user selects which CCDs to use for the science run by assigning a CCD Id (0..9) to each FEP. A FEP can be designated as unused by assigning a value of 10 (CCD_DESELECT) to that field.
A CCD may be processed by more than one FEP, but other parameter values may conflict, e.g., if two or more FEPs are processing data from the same CCD, the fep*VideoResponse and fep*VideoOffset values will come from the FEP with the higher ID (0..5). For example, if one configured:
fepCcdSelect[FEP_0] | = CCD_I0 |
fepCcdSelect[FEP_1] | = CCD_I1 |
fepCcdSelect[FEP_2] | = CCD_I0 |
fepCcdSelect[FEP_3...FEP_5] | = CCD_DESELECT |
| |
and
ccdVideoResponse[FEP_0] | = 0 |
ccdVideoResponse[FEP_1] | = 0 |
ccdVideoResponse[FEP_2] | = 1 |
| |
and
fep0VideoOffset[FEP_0] | = [60,60,60,60] |
fep0VideoOffset[FEP_1] | = [60,60,60,60] |
fep0VideoOffset[FEP_2] | = [30,30,30,30] |
| |
then CCD_I0 would use the low-gain video response (Video Response = 1) and 30 for the video ADC offsets.
On the other hand, the CCD images are captured in the order they first appear in the FEP CCD selection list, so in the above example, CCD_I0 would perform its image-to-frame captures first, followed by CCD_I1.
NOTE: Since the image transfer from the CCD framestores to the DEA/DPA is performed synchronously, images captured earlier spend more time in the CCD framestore. The time taken for each capture is approximately 40ms, so images from the CCD used by FEP_0 would spend 40ms longer in the framestore than images from the CCD used by FEP_1. The user can control this by selecting which CCDs are placed in the low order FEPs. For example, if a particular CCD performs better if its images are retained longer in the framestore, then the user would probably assign it to FEP_0.
If a CCD’s video board is not powered, or if its assigned FEP is not powered, or if an error is encountered while setting up for the run, the offending FEP or CCD will not be used for the run. This will not, however, affect the image capture sequence. Because the time spent in the framestore is indirectly configured by the user (i.e. the user may be counting on this behavior for some reason), ACIS attempts to preserve the specified behavior by keeping the relative time delays the same. Unfortunately, this is not true for the video response and video offset parameters. If a FEP is not powered or has encountered an error, the most recent successful FEP’s parameters will be used. The user can avoid this problem by ensuring that the video response and offset parameters are the same for all FEPs processing the same CCD during a run.
Processing Modes
The user selects the ACIS processing via the fepMode and bepPackingMode parameters of the loadTeBlock parameter block. Table 4.2 shows how the modes are selected, and what other parameters are affected (note that the ignore initial frames, clocking parameters, video offsets and special parameters are always enabled). “Event Histogram” mode is only available when the “eventhist” patch is installed (see Table E.2).
BEP |
|
|
||
Mode | fepMode | Packing | Telemetry Packets | Enabled Parameters
|
Mode |
|
|
||
Raw | Raw | ignored | 1. (1) dumpedTeBlock | rawCompressionSlotIndex |
Histogram | Histogram | ignored | 1. (1) dumpedTeBlock | histogramCount |
Event | Histogram | ignored | 1. (1) dumpedTeBlock | histogramCount |
Faint 3x3 | 3x3 | Faint | 1. (1) dumpedTeBlock | All bias parameters |
Faint with | 3x3 | FaintBias | 1. (1) dumpedTeBlock | Same as Faint 3x3 |
Graded | 3x3 | Graded | 1. (1) dumpedTeBlock | Same as Faint 3x3 |
Faint 5x5 | 5x5 | Faint | 1. (1) dumpedTeBlock | Same as Faint 3x3 |
Clocking Parameters
See Appendix H for a description of video board sequencing.
The Timed Exposure Parameter Block contains a set of parameters that controls how the CCDs are clocked, and the format of the resulting images. The clocking parameters are as follows:
∙ onChip2x2Summing1
If this flag is 0, then the system will not perform any charge summing on the CCD. If the flag is set to 1, then the charge from each pair of CCD rows and columns are summed on the CCD. This will halve the number of rows and columns clocked out for each image, and affects the time taken to transfer the image to the DEA/DPA for processing (see Section 4.1.1).
∙ subarrayStartRow1
This parameter specifies the first physical CCD row to transfer to the DEA/DPA for processing, unaffected by the value of onChip2x2Summing. If 0, then the first row used for imaging (there are two dummy rows prior to the first image row) is sent. If not zero, the image is down shifted in the framestore until the specified row is reached, and the resulting image is transferred to the instrument.2 This parameter also affects the time taken to transfer the image to the DEA/DPA (see Section 4.1.1). In order to avoid overheating the DEA driver circuit, this parameter must be less than 924 (i.e. for each image, at least 100 rows must be clocked from the CCD to the DEA) (NOTE: This is checked by the instrument software, and then effectively re-checked by the DEA sequence load checker. The ACIS software ensures that a bad assignment or corruption of this parameter cannot damage the hardware).
∙ subarrayRowCount1
When onChip2x2Summing=0, subarrayRowCount specifies one less than the number of physical rows of 1024 pixels to clock out of the CCD. When onChip2x2Summing=1, (subarrayRowCount+1)/2) rows of 512 summed pixels will be clocked out, starting at physical, i.e., unsummed, row subarrayStartRow. subarrayRowCount also affects the time taken to transfer to image to the DEA/DPA (see Section 4.1.1). In order to avoid overheating the DEA driver circuit, subarrayRowCount must be at least 99 (i.e., 100 rows) (NOTE: This is checked by the instrument software, and is then effectively re-checked by the DEA sequence load checker. The ACIS software ensures that a bad assignment or corruption of this parameter cannot damage the hardware).
∙ overclockPairsPerNode
This specifies the number of pairs of overclock pixels to clock out of each CCD serial register output node for each row of data. For example, if a value of 15 is specified and outputRegisterMode is 0 (FULL mode), 30 overclocks per node per row will be produced, or a grand total of 120 overclock pixels per row.
In raw mode, this parameter affects the telemetered image geometry, and is not affected by the windowing parameters. Although, the entire image may be clipped out with a window, the overclocks will be telemetered.
This parameter affects the time taken to transfer images to the DEA/DPA for further processing (see Section 4.1.1).
NOTE: Because this parameter may affect baseline overclock levels, it is recommended that the bias map be recomputed when this parameter changes.
∙ outputRegisterMode
This parameter specifies the configuration of the CCD output nodes. It takes one of 4 values:
NOTE: Because this parameter changes the relationship between CCD pixel and output node, and therefore, the baseline overclock levels, it is recommended that the bias maps be re-computed whenever this parameter is changed.
∙ ccdVideoResponse
This 6-element array of flags controls the gain of the measured signal by changing the A/D integration timing on the video boards sending data to the FEPs. If 0, then normal gain is used. If set to 1, then the corresponding CCD signal gain is cut by about 75%, but the dynamic range of the output signal is correspondingly increased. Currently, it is not expected that this feature will ever be used. This parameter only affects the signal quality, and does not affect the image geometry or transfer time to the DEA/DPA. This parameter may require adjustments to the fep*VideoOffset parameters, and the various threshold and bias parameters.
NOTE: Because these parameters dramatically affects the signal gains, the bias-maps should be recomputed whenever these parameters change.
∙ primaryExposure
∙ secondaryExposure
∙ dutyCycle
These parameters control the static integration times of the CCD images, and the ratios of integration times used. For example, if primaryExposure is 3, and secondaryExpsoure is 33, and dutyCycle is 10, the CCD will first integrate for 0.3 seconds, wait while the image is read out, and then perform a series of ten 3.3 second integrations, and repeat the cycle. Refer to Section 4.1.1 for a description of the minimum integration times, and the effect of short integration times. The effect of these parameters is coupled to the time taken to transfer images to the DEA/DPA.
If dutyCycle is non-zero, only images integrated using the secondary exposure times are used when computing the bias maps.
NOTE: Because the integration times may affect the CCD bias levels, it is recommended that the bias maps be re-computed whenever these parameters are changed.
∙ fep*VideoOffset
This set of 24 parameters adjusts the DC levels of each Analog-to-Digital Converter (ADC) in the DEA video boards used to digitize the signals from each output node. For instance, if FEP_3 is to receive data from CCD_I3, the 4-element fep3VideoOffset array supplies the DC offsets to nodes A, B, C, and D of CCD_I3, overriding the default SYSSET_DAC_A_OFF through SYSSET_DAC_D_OFF fields in the System Configuration table for CCD_I3 (see Section 3.3.4). The video offset parameters act inversely to the video chain signal level (i.e., larger values produce a lower offset). The offset in volts is related to the offset parameter as
Volts = 2.5 - 0.02 * Offset |
NOTE: Because the video offset parameters may affect the signal measurement levels and affect the CCD bias levels, it is recommended that the bias maps be re-computed whenever these parameters are changed, although, if the offsets are adjusted to compensate for changes in the other parameters in order to maintain a consistent bias level, one may not require a bias re-computation.
Bias (and related) Parameters
ACIS re-computes the bias maps whenever one or more of the following conditions are met:
A FEP’s bias offsets were corrupt, e.g., the FEP had previously been power-cycled, or
This is a timed exposure run but the previous run used continuous clocking, or
The radiation monitor had been asserted since the last bias computation
NOTE: Many of the CCD clocking parameters can affect the bias levels of the CCD images, and require re-computation of the map. The instrument software does NOT automatically detect these changes. It is the user’s responsibility to determine when the bias maps should be re-calculated, and request computation of the bias maps when needed.
∙ ignoreInitialFrames
This parameter indicates how many exposures the FEPs are to throw away prior to computing the bias map. This is to allow for the bias-levels of the CCDs to settle. (NOTE: For data processing, the first two exposures are always discarded, hence, all reported exposure numbers start at 2).
∙ biasAlgorithmId
∙ biasArg*
ACIS supports a variety of bias computation algorithms, each requiring a collection of parameters. The algorithm selection and parameters are supplied independently for each FEP in the biasAlgorithmId and biasArg parameters.
biasAlgorithmId | Mode | biasArg1 | submode | description
|
FEP_BIAS_1 | Whole Frame | A
conditioning
phase
followed
by
an
optional
low-pixel
elimination
filter,
followed
by
an
approximation-to-mean
phase
| ||
FEP_BIAS_2 | Strip | 0 | Mean | Returns the mean of n samples si whose difference from the unfiltered mean μ is within σ2 = (Σsi2 - μΣsi)∕n. |
1 | Median (Fractile) | Bias value of a column is the median value, given by the biasRejection parameter of 1024 samples (rows) |
||
2 | Med-Mean | Run the Median algorithm, then use its result as μ for the Mean algorithm |
||
The biasArg* parameters have very different meanings in whole frame and strip modes, as illustrated below:
Parameter | in “Whole-Frame” Mode | in “Strip” Mode
|
biasAlgorithmId | 1 (FEP_BIAS_1) | 2 (FEP_BIAS_2) |
biasArg0 | Number of conditioning exposures | Number of samples per pixel, i.e., number of exposures per strip |
biasArg1 | Number of total exposures: conditioning plus approximation-to-mean | =0 to use mean |
biasArg2 | Rejection threshold for low-pixel elimination after conditioning phase | For mean and med-mean, specifies sigma rejection criterion. For fractile, index of sorted pixel array |
biasArg3 | Threshold for event rejection in approximation-to-mean phase | Specifies how many of the largest samples are to be removed from the pixel array before applying the mean, medmean, or fractile algorithm. |
biasArg4 | Rejection threshold for approximation-to-mean | Specifies how many of the smallest samples are to be removed from the pixel array before applying the mean, medmean, or fractile algorithm. |
The details of the algorithms and the effect of the parameters are provided in the “CCD Bias Level Determination Algorithms” document listed in Table 1.1.
∙ ignoreBadPixelMap
If this flag is 0, ACIS flags newly created bias maps with the locations of bad pixels defined by the current contents of the Bad Pixel Map. If the flag is 1, the bias maps are not flagged.
∙ ignoreBadColumnMap
If this flag is 0, ACIS flags newly created 2D bias maps with the locations of bad columns defined by the current contents of the Bad TE Column Map (see Section 3.5). If the flag is 1, the bias maps are not flagged.
∙ trickleBias
If a bias is re-computed, and this flag set to a 1, then the bias maps from each used FEP are telemetered prior to the start of data processing. If the flag is 0, the maps are not telemetered.
NOTE: The maps are sent only when they are re-computed. If trickleBias is 1, but the map wasn’t computed as part of the run, the map will not be telemetered at that time. In order to maintain a stable bias-level, the sequencers will continue to clock the CCDs while the maps are telemetered. The FEPs will ignore the clocked data.
∙ biasCompressionSlotIndex
If the maps are trickled, this 6-element array indicates which compression table to use to pack the data from each FEP. If the field is set to 255, then the maps will be bit-packed, with no compression. Bias map compression uses the Huffman First-Difference algorithm, referenced in Table 1.1).
NOTE: The maps are sent only when they are re-computed. If trickleBias is 1, but the map wasn’t computed as part of the run, the map will not be telemetered at that time. In order to maintain a stable bias-level, the sequencers will continue to clock the CCDs while the maps are telemetered. The FEPs will ignore the clocked data.
Event Selection Parameters
The Timed Exposure mode event selection parameters listed below are only used when the ACIS is configured for Faint 3x3, FaintBias, Graded, or Faint 5x5 modes. The FEP selection algorithm is described under fep*EventThreshold and the BEP algorithms under the remaining parameters. In addition, grade selection is further explained in Appendix J.1.
∙ fep*EventThreshold
The six FEP threshold arrays, fep0EventThreshold through fep5EventThreshold, each contain 4 elements, referring to output nodes A, B, C, and D of the CCD supplying data to that particular FEP. The BEP loads these values into each FEP prior to the start of each run. The values are in bias-corrected Analog-to-Digital unit (ADU) values, which the FEP firmware uses to locate in-coming CCD image pixels whose measured pulse heights are large enough to suggest possible X-ray events. The FEP software and firmware use average overclock levels to adjust these values for drifts in the output in the DEA video chains.
∙ fep*SplitThreshold
The split threshold arrays, fep0SplitThreshold through fep5SplitThreshold, are indexed by FEP and output node, similar to fep*EventThreshold. The BEP software uses these values to determine which pixels, surrounding the center of a candidate X-ray event reported by the FEP, contain charge from the event. The values are specified in ADUs and are used by the BEP to estimate the total amplitude of the X-ray event and its grade code, which latter are then used for subsequent event filtering, and, in Graded Mode, are themselves telemetered.
∙ lowerEventAmplitude
∙ eventAmplitudeRange
These parameters specify the range of estimated amplitudes to accept from candidate events. If a candidate event’s estimated amplitude is less than the lowerEventAmplitude or is greater than or equal to lowerEventAmplitude+eventAmplitudeRange, the event is rejected and not sent to the ground. If the event is within the range, it is passed on for grade and window selection filtering.
∙ gradeSelections
This parameter represents an array of 256 bits, where each bit corresponds to a particular grade code. The BEP stores it in an 8-word array of 32-bit LSB integers so the least significant bit of the first word specifies grade 0 and the most significant bit of the eighth word is grade 255. If bit n is set to 0, events with grade code n will not be telemetered.
See Appendix J for a description of the event grading algorithm.
∙ windowSlotIndex
If this parameter is 0xffff, then no window processing is performed on the candidate events; otherwise, the 2-D Window Parameter Block stored in the corresponding slot is used by the BEP to filter the candidate events. See Section 4.1.4.2 for a description of this process.
Raw Image Processing
If the run is performing Raw Mode, then the following parameters are used to filter and telemeter the data:
∙ windowSlotIndex
If this parameter is 0xffff, then no window processing is performed on the raw image; otherwise, the 2-D Window Parameter Block stored in the corresponding slot is used to filter the image. See Section 4.1.4.2 for a description of this process.
NOTE: Window processing is not applied to overclock data. All overclocks from all of the rows in the image will be telemetered.
∙ rawCompressionSlotIndex
This parameter determines which compression table to use to pack the raw data. If the field is set to 255, then the maps will be bit-packed, with no compression. Raw image compression uses the Huffman First-Difference algorithm, referenced in Table 1.1).
Special Cases
∙ deaLoadOverride
When non-zero, this parameter specifies the address of a replacement PRAM/SRAM image to load into the video sequencers. The BEP will by-pass the SRAM library and the on-board PRAM builder, and will ignore all clocking parameters when building the load. It is the user’s responsibility to place the load image somewhere in the BEPs data memory, and ensure that the clocking parameters in the parameter block are consistent with the images produced by the explicit load.
NOTE: The DEA sequence checker will still verify that the loaded PRAM/SRAM does not threaten the health of the DEA electronics.
∙ fepLoadOverride
When non-zero, this parameter specifies the address of alternate software to run in the FEPs. It is the user’s responsibility to ensure that the FEP load image is stored somewhere in the BEP’s data memory, and that the loaded program is compatible with the BEP-FEP protocols expected by the BEP software.
Commands
∙ Load a Timed Exposure Parameter Block (see Section 5.4.4 for an example):
load n te slotId { | # Load pblock into slot slotId | |
parameterBlockId | = n | # Ground selected Parameter Block Id |
fepCcdSelect | = n0...n5 | # Array indexed by fepId of which ccdId |
# each FEP should use (or 10 if unused) | ||
fepMode | = 0..3 | # Raw, Histogram, 3x3 or 5x5 |
bepPackingMode | = 0..3 | # Faint, FaintBias, Graded, or EvHist (if loaded) |
onChip2x2Summing | = 0..1 | # =1 to select 2x2 on-chip summing |
ignoreBadPixelMap | = 0..1 | # =1 to not load bad pixels after bias |
ignoreBadColumnMap | = 0..1 | # =1 to not load bad columns after bias |
recomputeBias | = 0..1 | # =1 to force re-computation of bias |
trickleBias | = 0..1 | # =1 to send bias maps after computation |
subarrayStartRow | = 0..923 | # First row of subarray |
subarrayRowcount | = 100..1023 | # Number of rows in subarray, minus 1 |
overclockPairsPerNode | = 0..15 | # Number of overclock pairs |
outputRegisterMode | = 0..3 | # Output node configuration: |
# FULL, DIAG, AC, BD | ||
ccdVideoResponse | = n0...n5 | # Normal=0 or low-gain=1, indexed by FEP |
primaryExposure | = 1..100 | # Primary static exposure time × 0.1 sec |
secondaryExposure | = 1..100 | # Secondary static exposure time × 0.1 sec |
dutyCycle | = 0..15 | # Ratio of Secondary to Primary times |
fep[0-5]EventThreshold | = n0...n3 | # FEP threshold values (-4096..4095) |
# for each FEP, indexed by output node | ||
fep[0-5]SplitThreshold | = n0...n3 | # Split threshold values (0..4095) |
# for each FEP, indexed by output node | ||
lowerEventAmplitude | = 0..4095 | # Minimum event amplitude |
eventAmplitudeRange | = 0..65535 | # Maximum amplitude above minimum |
gradeSelections | = n0...n7 | # Select accepted event grade codes |
# a total of 8 32-bit integers | ||
windowSlotIndex | = n | # Select 2-D window slot (0..4 or 255) |
histogramCount | = 1..65535 | # Number of exposures in histogram mode |
biasCompressionSlotIndex | = n0...n5 | # Huffman compression table (0..255) |
# for bias maps, indexed by FEP | ||
rawCompressionSlotIndex | = 0..255 | # Huffman compression table for raw images |
ignoreInitialFrames | = 0..65535 | # Exposures to drop prior to bias |
biasAlgorithmId | = n0...n5 | # Bias Algorithm (1..2), indexed by FEP |
biasArg[0-4] | = n0...n5 | # Bias Arguments 0 thru 4, indexed by FEP |
fep*VideoOffset | = n0...n3 | # ADC Video Offsets (0..255) for each FEP, |
# indexed by output node | ||
deaLoadOverride | = n | # > 0 BEP Memory pointer to DEA load image |
fepLoadOverride | = n | # > 0 BEP Memory pointer to FEP load image |
} | ||
Science Telemetry
∙ Command Echo on a successful load:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
loadTeBlock = { | ||
teBlockSlotIndex | = 0..4 | # Slot that contained pblock (0..4) |
parameterBlockId | = n | # ID of the pblock |
... | ||
} | ||
} | ||
If the checksum of the packet doesn’t match its contents, the block will not be loaded into the slot, and the Command echo will report the error by setting the result field to 12 (CMDRESULT_STORE_ERROR).
NOTE: If the parameter block contains fields that are out of range, or that are illegal in combination with other fields, an attempt to start a science run will abort, with the terminationReason in the Science Report set to SMTERM_PROC_PARM_INVALID, SMTERM_DEA_PARM_INVALID, SMTERM_FEP_PARM_INVALID. However, if the user specifies a set of clocking parameters that are legal, but not supported by the on-board SRAM library, it will appear as DEA error, and the terminationReason will be set to SMTERM_DEA_IO_ERROR.
Warnings
Unsupported Parameter Sets | Missing SRAM Library Primitive(s)
|
onChip2x2Summing = 1 & outputRegisterMode == (DIAG or BD) | Primitives that sum & sample (or discard) 2 columns at the output node & reverse clock the output register |
onChip2x2Summing = 1 & ccdVideoResponse == 1 (attenuate) | Primitives that sum and sample two columns at the output register while selecting 4:1 attenuation |
ccdVideoResponse == 1 (attenuate) & outputRegisterMode == (DIAG) or BD | Primitives that select 4:1 attenuation while reverse clocking the output register |
Description
∙ windowSlotIndex
ACIS has five numbered slots in which it stores 2-D Window Parameter blocks. The parameter blocks are loaded into a particular slot using a “load n window2d” command, specifying the slot number (0–4) in the bcmd command line, e.g.,
load 123 window2d 1 2dblock.txt | # load 2D window in 2dblock.txt into slot 1 |
where windowSlotIndex will be set to 1. When a parameter block is loaded into a slot, that slot’s contents are overwritten by the new block contained in the command. If the instrument is power-cycled or cold booted (see Section 3.1.3.1, Section 3.1.3.2), the contents of the slots will be restored to their “as-launched” values. A warm boot (see Section 3.1.3.3), however, retains the contents of the most recently loaded slots.
∙ checksum
Each parameter block contains a checksum field, which is the bit-wise XOR of each 16-bit word in the command packet following the checksum field (i.e. starting with the least-significant 16-bit word of the windowBlockId field). The bcmd command will create this field automatically, along with the rest of the command header.
∙ windowBlockId
This is a 32-bit value used to uniquely identify this 2D window block. ACIS reports its value in all exposure record and science report packets that used the windows for a science run.
NOTE: The intent of the windowBlockId is to aid bookkeeping on the ground. ACIS does not use the ID internally for any particular purpose, and users are free to use the field as they wish.
Window Definitions
∙ ccdId
∙ ccdRow
∙ ccdColumn
∙ width
∙ height
∙ lowerEventAmplitude
∙ eventAmplitudeRange
∙ sampleCycle
The remainder of the window parameter block contains a series of zero or more window definitions. The number of windows in the block is determined using the command packet length. Each window definition specifies ccdId (the CCD to which the window applies), ccdRow and ccdColumn (the row and column position of the bottom left corner of the window), and the width and height of the window, all in CCD coordinates. Each window also specifies a lowerEventAmplitude and an eventAmplitudeRange, which are only used for event processing, and a sampleCycle field, which is used for both event filtering and for raw-mode data clipping. Refer to Appendix K.1 for an explicit description of window processing of event data, and Appendix K.2 for a description of window processing of raw mode data. ACIS is capable of supporting up to 6 windows for each CCD used for a run. The parameter block can hold up to 49 window definitions, and therefore, is capable of specifying 6 windows for 6 CCDs used for a run. The parameter block may contain windows for CCDs not used in the run, but it does not have enough space to specify all 6 windows for all 10 CCDs.
Commands
∙ Summary of Load 2-D Window Block:
load n window2d slotIt { | # load into 2D window slot slotId | |
windowBlockId | = id | # Ground selected Window Block Id |
windows { | # Array of window definitions | |
ccdId | = 0..9 | # Identify CCD |
ccdRow | = 0..1023 | # Bottom row of window |
ccdColumn | = 0..1023 | # Left most column of window |
width | = 0..1023 | # Width of window - 1 |
height | = 0..1023 | # Height of window - 1 |
sampleCycle | = 0..255 | # Event sample count |
lowerEventAmplitude | = 0..4095 | # Minimum event amplitude |
eventAmplitudeRange | = 0..65535 | # Maximum amplitude above minimum |
} | ||
... | ||
} | ||
See Appendix K.1 for an example of multiple windows.
Science Telemetry
∙ Command Echo on a successful load:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
load2dBlock = { | ||
windowSlotIndex | = 0..4 | # Slot that contained the window block |
parameterBlockId | = n | # ID of the 2d window block |
windows[0] = { | ||
... | ||
} | ||
... | ||
} | ||
} | ||
If the checksum of the packet doesn’t match its contents, the block will not be loaded into the slot, and the Command echo will report the error by setting the result field to 12 (CMDRESULT_STORE_ERROR).
NOTE: If the parameter block contains fields that are out of range, or that are illegal in combination with other fields, an attempt to start a science run will abort, with the terminationReason in the Science Report will be set to SMTERM_PROC_PARM_INVALID.
Warnings
Description
∙ ccBlockSlotIndex
ACIS has five numbered slots in which it stores Continuous Clocking Parameter blocks. The parameter blocks are loaded into a particular slot using a “load n te” command, specifying the slot number (0–4) in the bcmd command line, e.g.,
load 123 cc 4 ccblock.txt | # load CC pBlock from ccblock.txt into slot 4 |
The ccBlockSlotIndex field will be set to 4. When a parameter block is loaded into a slot, that slot’s contents are overwritten by the new block contained in the command. If the instrument is power-cycled or cold booted (see Section 3.1.3.1, Section 3.1.3.2), the contents of the slots will be restored to their “as-launched” values. A warm boot (see Section 3.1.3.3), however, retains the contents of the most recently loaded slots.
∙ checksum
Each parameter block contains a checksum field, which is the bit-wise XOR of each 16-bit word in the command packet following the checksum field itself (i.e. starting with the least-significant 16-bit word of the parameterBlockId field). The bcmd command will create this field automatically, along with the rest of the command header.
∙ parameterBlockId
This is a 32-bit field used to uniquely identify the parameter block. ACIS reports its value in all exposure, bias map, bias error, and science report packets that use this parameter block for a bias computation or science run. In some cases, the Parameter Block used for science run data processing may differ from that used to compute the bias map used for the run, in which case, the telemetered parameterBlockId and biasParameterId values will differ.
NOTE: The intent of parameterBlockId is to aid bookkeeping on the ground. ACIS does not use the ID internally for any particular purpose, and users are free to use the field as they wish.
∙ fepCcdSelect
This field consists of an array of 6 CCD identifiers that are indexed by FEP Id. The user selects which CCDs to use for the science run by assigning a CCD Id (0..9) to each FEP. A FEP can be designated as unused by assigning a value of 10 (CCD_DESELECT) to that field.
A CCD may be processed by more than one FEP, but other parameter values may conflict, e.g., if two or more FEPs are processing data from the same CCD, the fep*VideoResponse and fep*VideoOffset values will come from the FEP with the higher ID (0..5). For example, if one configured:
fepCcdSelect[FEP_0] | = CCD_I0 |
fepCcdSelect[FEP_1] | = CCD_I1 |
fepCcdSelect[FEP_2] | = CCD_I0 |
fepCcdSelect[FEP_3..FEP_5] | = CCD_DESELECT |
| |
and
ccdVideoResponse[FEP_0] | = 0 |
ccdVideoResponse[FEP_1] | = 0 |
ccdVideoResponse[FEP_2] | = 1 |
| |
and
fep0VideoOffset[FEP_0] | = [60,60,60,60] |
fep0VideoOffset[FEP_1] | = [60,60,60,60] |
fep0VideoOffset[FEP_2] | = [30,30,30,30] |
| |
then CCD_I0 would use the low-gain video response (Video Response = 1) and 30 for the video ADC offsets.
In Continuous Clocking mode, all the CCDs shift their respective rows in unison, avoiding the staggered capture complexities of Timed Exposure mode.
If a CCD’s video board is not powered, or if the assigned FEP is not powered, or if an error is encountered while setting up for the run, the offending item will not be used for the run.
Processing Modes
The user selects which ACIS processing mode to use with the fepMode and bepPackingMode parameters of the loadCcBlock parameter block. Table 4.4 shows how the modes are selected, and what other parameters are affected (note the ignore initial frames, clocking parameters, video offsets and special parameters are always enabled). Modes “Faint 3x3” and “Graded 3x3” can only be used when the cc3x3 software patch is installed (see Appendix F).
BEP |
|
|
||
Mode | fepMode | Packing | Telemetry Packets | Enabled Parameters
|
Mode |
|
|
||
Raw | Raw | ignored | 1. (1) dumpedCcBlock | rawCompressionSlotIndex |
Faint 1x3 | 1x3 | Faint | 1. (1) dumpedCcBlock | All bias parameters and |
Graded 1x3 | 1x3 | Graded | 1. (1) dumpedCcBlock | Same as Faint 1x3 |
Faint 3x3 | 3x3 | Faint | 1. (1) dumpedCcBlock | Same as Faint 1x3 |
Graded 3x3 | 3x3 | Graded | 1. (1) dumpedCcBlock | Same as Faint 1x3 |
† Data packets for Continuous Clocking 3x3 modes use formats identical to their Timed Exposure 3x3 counterparts, but are distinguished by their formatTag field values.
Clocking Parameters
In Continuous Clocking mode, ACIS always clocks 512 consecutive rows from the CCD to the DEA/DPA. Although the timing relationship between sets of 512 rows is seamless, this unit is used to re-compute average overclocks and adjust the threshold levels, and is treated by the system as an image, or “exposure”. The Continuous Clocking Parameter Block contains a set of parameters that control how the CCDs are clocked, and the format of the resulting images. Refer to Appendix H.8 for the details. The clocking parameters, with noted restrictions, are as follows:
∙ rowSum
∙ columnSum
These parameters control the on-chip summing of rows and columns performed in Continuous Clocking mode. Their values are expressed in terms of powers of 2, so, for example, if rowSum is 3, then 8 CCD rows are summed on the CCD and sent to the DEA/DPA. These parameters divide, by powers of 2, the number of rows and columns clocked out for each image, and affect the time taken to transfer the image to the DEA/DPA for processing (see Section 4.1.1). rowSum has a value range of 0 to 7, respectively mapping to no row summing to a maximum of 128 (27) on-chip summed rows. When outputRegisterMode (see below) uses all four output nodes (FULL or DIAG), columnSum can range from 0 to 8 (no column summing to a maximum of 256 columns, which output 256 (28) columns/node and 1 column/node, respectively). When outputRegisterMode restricts to two output nodes (AC or BD), then columnSum can range from 0 to 9 (no column summing to a maximum of 512 columns, which output 512 columns/node and 1 column/node, respectively).
NOTE: Because these parameters affect the image geometry and measured bias level, if they differ from those used for last bias computation, the user must ensure that a new bias map is computed with the changed parameters.
∙ overclockPairsPerNode
This specifies the number of pairs of overclock pixels to clock out of the CCD serial register output node for each row of data. For example, if a value of 15 is specified and outputRegisterMode is 0 (FULL mode), a total of 30 overclocks per node per row will be produced, or a grand total of 120 overclock pixels per row.
In raw mode, this parameter affects the telemetered image geometry, and is not affected by the windowing parameters. Although, the entire image may be clipped out with a window, the overclocks will be telemetered.
This parameter affects the time taken to transfer images to the DEA/DPA for further processing (see Section 4.1.1).
When processing raw pixels (Raw), overclockPairsPerNode can range from 0 to 8 pairs (0 to 16 overclocks per node). When event processing (Graded, Faint 1x3, etc.), it can range from 0 to 15 pairs (0 to 30 overclocks per node).
NOTE: Because this parameter may affect baseline overclock levels, it is recommended that the bias map be recomputed when this parameter changes.
∙ outputRegisterMode
This parameter specifies the configuration of the CCD output nodes. It takes one of 4 values:
NOTE: Because this parameter changes the relationship between CCD pixel and output node, and therefore, the baseline overclock levels, it is recommended that the bias maps be re-computed whenever this parameter is changed.
∙ ccdVideoResponse
This 6-element array of flags controls the gain of the measured signal by changing the A/D integration timing on the video boards sending data to the FEPs. If 0, then normal gain is used. If set to 1, then the corresponding CCD signal gain is cut by about 75%. Currently, it is not expected that this feature will ever be used. This parameter only affects the signal quality, and does not affect the image geometry or transfer time to the DEA/DPA. This parameter may require adjustments to the fep*VideoOffset parameters, and the various threshold and bias parameters.
NOTE: Because these parameters dramatically affects the signal gains, the bias-maps should be recomputed whenever these parameters change.
∙ fep*VideoOffset
This set of 24 parameters adjusts the DC levels of each Analog-to-Digital Converter (ADC) in the DEA video boards used to digitize the signals from each output node. For instance, if FEP_3 is to receive data from CCD_I3, the 4-element fep3VideoOffset array supplies the DC offsets to nodes A, B, C, and D of CCD_I3, overriding the default SYSSET_DAC_A_OFF through SYSSET_DAC_D_OFF fields in the System Configuration table for CCD_I3 (see Section 3.3.4). The video offset parameters act inversely to the video chain signal level (i.e., larger values produce a lower offset). The offset in volts is related to the offset parameter as
Volts = 2.5 - 0.02 * Offset |
NOTE: Because the video offset parameters may affect the signal measurement levels and affect the CCD bias levels, it is recommended that the bias maps be re-computed whenever these parameters are changed, although, if the offsets are adjusted to compensate for changes in the other parameters in order to maintain a consistent bias level, one may not require a bias re-computation.
Bias (and related) Parameters
A FEP’s bias offsets were corrupt, e.g., the FEP had previously been power-cycled, or
This is a continuous clocking run but the previous run used timed exposure mode, or
The radiation monitor had been asserted since the last bias computation
NOTE: Many of the CCD clocking parameters can affect the bias levels of the CCD images, and require re-computation of the map. The instrument software does NOT automatically detect these changes. It is the user’s responsibility to determine when the bias maps should be re-calculated, and request computation of the bias maps when needed.
∙ ignoreInitialFrames
This parameter indicates how many exposures the FEPs are to throw away prior to computing the bias map. This is to allow for the bias-levels of the CCDs to settle. (NOTE: For data processing, the first 2 exposures are always discarded, hence, all reported exposure numbers start at 2).
∙ biasAlgorithmId
∙ biasRejection
ACIS supports a variety of bias computation algorithms, each requiring a collection of parameters. The algorithm selection and parameters are supplied independently for each FEP in the biasAlgorithmId and biasRejection parameters.
The Continuous Clocking Bias algorithms and corresponding parameters are described in Table 4.4. Consult the ACIS document “CCD Bias Level Determination Algorithms” listed in Table 1.1 for more details.
biasAlgorithmId | Algorithm | biasRejection | description
|
0 | Mean | Rejection value expressed as μ. | Returns the mean of n accepted samples si whose difference from the unfiltered mean μ is within σ2 = (Σsi2 - μΣsi)∕n. |
1 | Medium (Fractile) | Offset into sorted samples for a given column (i.e. the median value) | Bias value of a column is the median value, given by the biasRejection parameter of 1024 samples (rows) |
∙ ignoreBadColumnMap
If this flag is 0, ACIS flags newly created 1D bias maps with the locations of bad columns defined by the current Bad CC Column Map (see Section 3.5). If the flag is 1, the column pixels are not flagged.
∙ trickleBias
If a bias is re-computed, and this flag set to a 1, then the bias maps from each used FEP are telemetered prior to the start of data processing. If the flag is 0, the maps are not telemetered.
NOTE: The maps are sent only when they are re-computed. If trickleBias is 1, but the map wasn’t computed as part of the run, the map will not be telemetered at that time. In order to maintain a stable bias-level, the sequencers will continue to clock the CCDs while the maps are telemetered. The FEPs will ignore the clocked data.
Event Selection Parameters
The Continuous Clocking mode event selection parameters listed below are only used when ACIS is configured for Faint 1x3, Faint 3x3, and Graded modes. The FEP selection algorithm is described under fep*EventThreshold and the BEP algorithms under the remaining parameters. In addition, grade selection is further explained in Appendix J.2.
∙ fep*EventThreshold
The six FEP threshold arrays, fep0EventThreshold through fep5EventThreshold, each contain 4 elements, referring to output nodes A, B, C, and D of the CCD supplying data to that particular FEP. The BEP loads these values into each FEP prior to the start of each run. The values are in bias-corrected Analog-to-Digital unit (ADU) values, which the FEP firmware uses to locate in-coming CCD image pixels whose measured pulse heights are large enough to suggest possible X-ray events. The FEP software and firmware use average overclock levels to adjust these values for drifts in the output in the DEA video chains.
∙ fep*SplitThreshold
The split threshold arrays, fep0SplitThreshold through fep5SplitThreshold, are indexed by FEP and output node, similar to fep*EventThreshold. The BEP software uses these values to determine which pixels, surrounding the center of a candidate X-ray event reported by the FEP, contain charge from the event. The values are specified in ADUs and are used by the BEP to estimate the total amplitude of the X-ray event and its grade code, which latter are then used for subsequent event filtering, and, in Graded Mode, are themselves telemetered.
∙ lowerEventAmplitude
∙ eventAmplitudeRange
These parameters specify the range of estimated amplitudes to accept from candidate events. If a candidate event’s estimated amplitude is less than the lowerEventAmplitude or is greater than or equal to lowerEventAmplitude+eventAmplitudeRange, the event is rejected and not sent to the ground. If the event is within the range, it is passed on for grade and window selection filtering.
∙ gradeSelections
This parameter is an array of 4 bits. In 1x3 mode (see fepMode, above), each bit corresponds to a grade code from 0 through 3. If a bit is set to 1, candidate x-ray events with that grade code will be ignored. Otherwise, the event will be passed on to energy and window filtering.
In 3x3 mode, as implemented by the optional cc3x3 software patch, gradeSelections represents an integer in the range from 0 through 15, which is interpreted as an index into a 16-element array, each element consisting of 256 bits. If a bit is set to 1 in the element appropriate to the current cc3x3 science run, events with that 3x3 grade code will be ignored.
Appendix J describes the grade code computation algorithms.
∙ windowSlotIndex
If this parameter is 0xffff, then no window processing is performed on the candidate events. Otherwise, the 1-D Window Parameter Block stored in the corresponding slot is used to process the candidate events. See Section 4.1.4.4 for a description of this processing.
Raw Image Processing
If the run is performing Raw Mode, then the following parameters are used to filter and telemeter the data:
∙ windowSlotIndex
If this parameter is 0xffff, then no window processing is performed on the raw image; otherwise, the 1-D Window Parameter Block stored in the corresponding slot is used to filter the image. See Section 4.1.4.4 for a description of this process.
NOTE: Window processing is not applied to overclock data. All overclocks from all of the rows in the image will be telemetered.
∙ rawCompressionSlotIndex
This parameter determines which compression table to use to pack the raw data. If the field is set to 255, then the maps will be bit-packed, with no compression. Raw image compression uses the Huffman First-Difference algorithm, referenced in Table 1.1).
Special Cases
∙ deaLoadOverride
When non-zero, this parameter specifies the address of a replacement PRAM/SRAM image to load into the video sequencers. The BEP will by-pass the SRAM library and the on-board PRAM builder, and will ignore all clocking parameters when building the load. It is the user’s responsibility to place the load image somewhere in the BEPs data memory, and ensure that the clocking parameters in the parameter block are consistent with the images produced by the explicit load.
NOTE: The DEA sequence checker will still verify that the loaded PRAM/SRAM does not threaten the health of the DEA electronics.
∙ fepLoadOverride
When non-zero, this parameter specifies the address of alternate software to run in the FEPs. It is the user’s responsibility to ensure that the FEP load image is stored somewhere in the BEP’s data memory, and that the loaded program is compatible with the BEP-FEP protocols expected by the BEP software.
Commands
∙ Load a Continuous Clocking Parameter Block (see Section 5.6.4 for an example):
load n cc slotId { | ||
parameterBlockId | = n | # Ground-selected parameter block Id |
fepCcdSelect | = n0...n5 | # Array indexed by fepId of which ccdId |
# each FEP should use (or 10 if unused) | ||
fepMode | = 0..2 | # Raw, 1x3, or 3x3 (if patch loaded) |
bepPackingMode | = 0..1 | # Faint or Graded |
ignoreBadPixelMap | = 0..1 | # =1 to not load bad pixels after bias |
ignoreBadColumnMap | = 0..1 | # =1 to not load bad columns after bias |
recomputeBias | = 0..1 | # =1 to force re-computation of bias |
trickleBias | = 0..1 | # =1 to send bias maps after computation |
rowSum | = 0..7 | # Number of rows to sum (2n) |
columnSum | = 0..9 | # Number of columns to sum (2n) |
overclockPairsPerNode | = 0..15 | # Number of overclock pairs |
outputRegisterMode | = 0..3 | # Output register configuration: |
# FULL, DIAG, AC, BD | ||
ccdVideoResponse | = n0...n5 | # Normal=0 or low-gain=1, indexed by FEP |
fep[0-5]EventThreshold | = n0...n3 | # FEP threshold values (-4096..4095) |
# for each FEP, indexed by output node | ||
fep[0-5]SplitThreshold | = n0...n3 | # Split threshold values (0..4095) |
# for each FEP, indexed by output node | ||
lowerEventAmplitude | = 0..4095 | # Minimum event amplitude |
eventAmplitudeRange | = 0..24570 | # Maximum amplitude above minimum |
gradeSelections | = 0..15 | # Accepted event grade code index |
windowSlotIndex | = n | # Select 1-D window slot (0..4 or 255) |
rawCompressionSlotIndex | = 0..255 | # Huffman compression table for raw images |
ignoreInitialFrames | = 0..65535 | # Exposures to drop prior to bias |
biasAlgorithmId | = n0...n5 | # Bias Algorithm (0 or 1), indexed by FEP |
biasRejection | = n0...n5 | # Bias Rejection Level, indexed by FEP |
fep*VideoOffset | = n0...n3 | # ADC Video Offsets (0..255) for each FEP, |
# indexed by output node | ||
deaLoadOverride | = n | # > 0 BEP Memory pointer to DEA load image |
fepLoadOverride | = n | # > 0 BEP Memory pointer to FEP load image |
} | ||
Science Telemetry
∙ Command Echo on a successful load:
commandEcho[n] = { | ||
.. | ||
result | = 1 | # Other values indicate an error |
loadCcBlock = { | ||
ccBlockSlotIndex | = 0..4 | # Slot that contained CC pblock |
parameterBlockId | = n | # ID of the CC pblock |
... | ||
} | ||
} | ||
If the checksum of the packet doesn’t match its contents, the block will not be loaded into the slot, and the Command echo will report the error by setting the result field to 12 (CMDRESULT_STORE_ERROR).
NOTE: If the parameter block contains fields that are out of range, or that are illegal in combination with other fields, an attempt to start a science run will abort, with the terminationReason in the Science Report set to SMTERM_PROC_PARM_INVALID, SMTERM_DEA_PARM_INVALID, SMTERM_FEP_PARM_INVALID. However, if the user specifies a set of clocking parameters that are legal, but not supported by the on-board SRAM library, it will appear as DEA error, and the terminationReason will be set to SMTERM_DEA_IO_ERROR.
Warnings
Unsupported Parameter Sets | Missing SRAM Library Primitive(s)
|
columnSum > 1 (4 or more columns) | Primitives that sum 2 columns from the output register and hold the charge at the output node, allowing subsequent additional charge integrations |
columnSum >= 1 (2 columns) and outputRegisterMode == (DIAG or BD) | Primitives that sum & sample (or discard) 2 columns at the output node & reverse clock the output register |
columnSum >= 1 (two columns) and ccdVideoResponse == 1 (attenuate) | Primitives that sum and sample two columns at the output register while selecting 4:1 attenuation |
ccdVideoResponse == 1 (attenuate) and outputRegisterMode == (DIAG or BD) | Primitives that select 4:1 attenuation while reverse clocking the output register |
Description
∙windowSlotIndex
ACIS has five numbered slots in which it stores 1-D Window Parameter blocks. The parameter blocks are loaded into a particular slot using a “load n window1d” command, specifying the slot number (0–4) in the “bcmd” command line, e.g.,
load 123 window1d 0 1dblock.txt | # load 1D window in 1dblock.txt into slot 0 |
The windowSlotIndex field will be set to 0. When a parameter block is loaded into a slot, that slot’s contents are overwritten by the new block contained in the command. If the instrument is power-cycled or cold booted (see Section 3.1.3.1, Section 3.1.3.2), the contents of the slots will be restored to their “as-launched” values. A warm boot (see Section 3.1.3.3), however, retains the contents of the most recently loaded slots.
∙ checksum
Each parameter block contains a checksum field, which is the bit-wise XOR of each 16-bit word in the command packet following the checksum field (i.e. starting with the least-significant 16-bit word of the windowBlockId field). The bcmd command will create this field automatically, along with the rest of the command header.
∙ windowBlockId
This is a 32-bit value used to uniquely identify this 1D window block. ACIS reports its value in all exposure record and science report packets that used the windows for a science run.
NOTE: The intent of the windowBlockId is to aid bookkeeping on the ground. ACIS does not use the ID internally for any particular purpose, and users are free to use the field as they wish.
Window Definitions
∙ ccdId
∙ ccdColumn
∙ width
∙ lowerEventAmplitude
∙ eventAmplitudeRange
∙ sampleCycle
The remainder of the window parameter block contains a series of zero or more window definitions. The number of windows in the block is determined using the command packet length. Each window definition specifies ccdId (the CCD to which the window applies), ccdColumn (the column position of the left edge of the window), and the width of the window, all in CCD coordinates. Each window also specifies a lowerEventAmplitude and an eventAmplitudeRange, which are only used for event filtering, and a sampleCycle field, which is used for both event processing and for raw-mode data clipping. Refer to Appendix K.3 for an explicit description of window processing of event data, and Appendix K.4 for a description of window processing of raw mode data. ACIS is capable of supporting up to 6 windows for each CCD used for a run. The parameter block can hold up to the maximum of 60 window definitions (6 windows x 10 CCDs).
Commands
∙ Summary of Load 1-D Window Block:
load n window1d slotId { | # load into 1D window slot slotId | |
windowBlockId | = n | # Ground selected Window Block Id |
windows { | ||
ccdId | = 0..9 | # Identify CCD |
ccdColumn | = 0..1023 | # Left most column of window |
width | = 0..1023 | # Width of window – 1 |
sampleCycle | = 0..255 | # Event sample count |
lowerEventAmplitude | = 0..4095 | # Minimum event amplitude |
eventAmplitudeRange | = 0..24570 | # Maximum amplitude above minimum |
} | ||
... | ||
} | ||
Science Telemetry
∙ Command Echo on a successful load:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
load1dBlock = { | ||
windowSlotIndex | = 0..4 | # Slot that contained the window block |
parameterBlockId | = n | # ID of the 1d window block |
windows[0] = { | ||
... | ||
} | ||
... | ||
} | ||
} | ||
If the checksum of the packet doesn’t match its contents, the block will not be loaded into the slot, and the Command echo will report the error by setting the result field to 12 (CMDRESULT_STORE_ERROR).
NOTE: If the parameter block contains fields that are out of range, or that are illegal in combination with other fields, an attempt to start a science run will abort, with the terminationReason in the Science Report set to 10 (SMTERM_PROC_PARM_INVALID).
Warnings
Description
Prior to starting a science run, the user should have powered on the FEPs and Video boards needed for the run (see Section 3.3.2 and Section 3.3.3) and planned and loaded the parameter and window blocks needed for the run (see Section 4.1.1, Section 4.1.2, Section 4.1.3, Section 4.1.4). The user initiates a Timed Exposure or Continuous Clocking science run with either “start n te slot” or “start n cc slot”, respectively, where slot (0..4) indicates which TE or CC slot contains the parameter block to use to configure the run.
Step | Procedure Name | Description
|
1 | requestAbort* | Halt any currently executing science run |
2 | activateParameters | Extract fields from the parameter block and optional window block |
3 | dumpParameters | Dump the parameter block and optional window block to telemetry |
4 | setup | Set up the data processing chain, window filters, etc. |
5 | dumpDeaHouse | Acquire and report video board housekeeping channels |
6 | checkLoad | Create, load and validate the video PRAM & SRAM |
7 | jitterDacs | Jitter the video DACs (see Appendix G) |
8 | computeBias | Optionally, compute and report FEP bias maps |
9 | processData | Process the pixel data |
* Called by the CmdManager task (see Table 2.1); the remaining procedures are run in the ScienceManager task, although computeBias passes control to the BiasThief task if the bias maps are to be copied to telemetry.
The steps required to execute a science run are listed in Table 4.8. Once started, the Science Manager will configure the processing parameters, load the CCD settings into the DEA video boards, load the sequencer memory of the video boards, configure the Front End Processor parameters. It will then “jitter” the video board DACs to clear charge out of the CCDs. If a bias computation is required, the task will command the FEPs to compute a bias, and then start the video board sequencers, and wait for the FEPs to signal that the bias maps are complete. If the trickleBias flag is set, the science task will then start the biasThief task to send the bias maps to telemetry. The science task will then stop the video board sequencers, command the FEPs to prepare for data, and re-start the sequencers. The FEPs will then ignore the first two images from the CCDs, and then start processing the data from the subsequent exposures, producing data packets and exposure records. The task will continue to do so, until either it is commanded to stop, via a “stop n science” command, inhibited by the radiation monitor, and aborted by a second “start te” or “start cc” command (in which case, a new run will be configured and started), or until the run is aborted due to errors (NOTE: The system attempts to degrade gracefully: if a FEP produces an error, it is not used for the remainder of the run. The remaining FEPs, however, will continue to be used. If all of the FEPs are in error, then the run is aborted because there’s nothing to do).
Commands
∙ Command to start a Timed Exposure Science Run:
start n te slotId | # start run from pblock in te slot slotId |
∙ Command to start a Continuous Clocking Science Run:
start n cc slotId | # start run from pblock in cc slot slotId |
Engineering Telemetry
When performing a science run, the Software Housekeeping task blinks the bi-level values between two values, about once a minute (see Section 3.4.3.1).
If system had not watchdog-reset since the last commanded reset:
LED_RUN_SCIENCE_A |
LED_RUN_SCIENCE_B |
If the system had watchdog-reset:
LED_WD_SCIENCE_A |
LED_WD_SCIENCE_B |
Science Telemetry
∙ Command Echo on a successful receipt of Timed Exposure start request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
startScience = { | ||
teBlockSlotIndex | = 0..4 | # Slot that contained the te pblock |
} | ||
} | ||
∙ Command Echo on a successful receipt of Continuous Clocking start request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
startScience = { | ||
ccBlockSlotIndex | = 0..4 | # Slot that contained the cc pblock |
} | ||
} | ||
If a run had been started, and not yet stopped, when the command is received, the result field of the echo will contain 14 (CMDRESULT_CLOBBERED). In this case, the earlier run will be aborted (NOTE: The FEPs will be reset), and the new run will be configured and started.
If the radiation monitor had been activated, then the start of the run will be deferred until the monitor is de-activated. In this case the result field will contain 13 (CMDRESULT_INHIBITED).
If the selected parameter block checksum does not match its contents1 1If the parameter block uses windows, it will also be considered corrupted if its window block doesn’t match its own checksum. (i.e., has been corrupted), the system will determine if the run was configured to use the Imaging CCDs or the Spectroscopy CCDs. If any of the CCDs in the fepCcdSelect field of the parameter block choose an Imaging CCD (I0..I3), the system will examine the parameter block contained in slot 0. If not, it will examine the parameter block in slot 1. If this alternative is not corrupt, the system will use it in place of the original selection and the result field will be set to 5 (CMDRESULT_CORRUPT_DEFAULT). .2
If both the original and the alternative blocks are corrupt (or they’re one and the same), the run will not be started, and the result field will contain 6 (CMDRESULT_CORRUPT_IDLE).
Since the field ranges within the parameter block are only checked during the set-up stage of the run, after the receipt of the command has been acknowledged via the command echo, if the a parameter contained in the block is invalid or unsupported, the Command Echo will not indicate the problem, and supply a 1 (CMDRESULT_OK). But the run will not be started, and a “Science Report” packet will indicate the problem within its terminationReason field.
At the start of the run, the Science Manager will fetch and telemeter the parameter blocks used for the run. In Timed Exposure Mode, the dump appears as:
dumpedTeBlock[n] = { | ||
loadTeBlock = { | ||
teBlockSlotIndex | = 0..4 | # The te pblock slotId |
parameterBlockId | = n | # The te pblock ID |
... | ||
} | ||
} | ||
If windows were used, the loadTeBlock is followed by a 2d Window Block, aligned to the next 32-bit word:
dumpedTeBlock[n] = { | ||
loadTeBlock = { | ||
teBlockSlotIndex | = 0..4 | # The te pblock slotId |
parameterBlockId | = n | # The te pblock ID |
... | ||
} | ||
load2dBlock = { | ||
windowSlotIndex | = 0..4 | # The 2D window slotId |
windowBlockId | = n | # The window block ID |
... | ||
} | ||
} | ||
In Continuous Clocking Mode, the parameter block appears as:
dumpedCcBlock[n] = { | ||
loadCcBlock = { | ||
ccBlockSlotIndex | = 0..4 | # The cc pblock slotId |
parameterBlockId | = n | # The cc pblock ID |
... | ||
} | ||
} | ||
If windows were used, the loadCcBlock is followed by a 1d Window Block, aligned to the next 32-bit word:
dumpedCcBlock[n] = { | ||
loadCcBlock = { | ||
ccBlockSlotIndex | = 0..4 | # The cc pblock slotId |
parameterBlockId | = n | # The cc pblock ID |
... | ||
} | ||
load1dBlock = { | ||
windowSlotIndex | = 0..4 | # The 1D window slotId |
windowBlockId | = n | # The window block ID |
... | ||
} | ||
} | ||
Once the parameter blocks have been dumped, the Science Manager acquires and telemeters the DEA Video Board housekeeping information for all CCDs used for the run (NOTE: Unless all 10 video boards are powered on, the analog values in the housekeeping packet will be of marginal use. They will indicate if the given channel is completely broken, but won’t really indicate the level that the DAC was set to). The content and form of the housekeeping information is described in Section 3.4.6.6.
If a bias map was re-computed, and the trickleBias flag was set in the parameter block, the system will telemeter the contents of the computed bias maps of each FEP, in FEP order (i.e. FEP_0 first, then FEP_1, etc.). The Timed Exposure Bias Map telemetry packets are of the form:
dataTeBiasMap[n] = { | ||
biasStartTime | = n | # 100KHz time-stamp at start of bias |
biasParameterId | = n | # Parameter Block Id used for bias |
ccdId | = 0..9 | # CCD that produced the map |
fepId | = 0..5 | # FEP used to produce the map |
dataPacketNumber | = n | # packet sequence number within map |
initialOverclocks[4] | = n n n n | # DC offset of bias values, by quadrant |
pixelsPerRow | = n | # number of pixels in each bias map row |
rowsPerBias | = n | # number of rows in the map |
ccdRow | = n | # starting row of data in the packet |
ccdRowCount | = n | # number of rows packed into the packet |
compressiontTableSlotIndex | = 0..255 | # compression table slot value |
pixelCount | = n | # total number of pixels in the packet |
data | = n n n ... | # packed or compressed data |
# in an array of 32-bit words | ||
} | ||
The single Continuous Clocking Bias Map telemetry packet is of the form:
dataCcBiasMap[n] = { | ||
biasStartTime | = n | # 100KHz time-stamp at start of bias |
biasParameterId | = n | # Parameter Block Id used for bias |
ccdId | = 0..9 | # CCD that produced the map |
fepId | = 0..5 | # FEP used to produce the map |
data | = n0...n383 | # 1024 12-bit pixel bias values (384 words) |
} | ||
Once processing data, the Science Manager task produces a series of telemetry data packets, followed by an exposure record, for each FEP. The data and exposure packets for the different FEPs are asynchronously interleaved into the telemetry stream. The form of the data and exposure packets vary, depending on the type of mode being run. See Table 4.2 and Table 4.5 for cross-references between the type of mode and the resulting telemetry packet types.
Warnings
1An unpatched BEP reuses the parameters from the previous run of the same type, either TE or CC. The run may fail to start if no runs of the given type have been successfully started since the instrument was last powered on.
Description
The user stops a science run by issuing a “stop n science” command. If no science run is currently active, it will have no effect. Otherwise, it will terminate the run after it has completed its current step (see Table 4.8). In addition, a “stop n science” received during processData (step 9) will cause the BEP to send a BEP_FEP_CMD_STOP signal to each active FEP, commanding them to stop processing after their current exposure frames (or, in continuous clocking mode, their 512-row transfer frames). Once all FEPs have terminated and all telemetry packets posted, the Science Manager task stops the DEA sequencers and formats and posts a “Science Report” telemetry packet.
Commands
∙ Command to stop a science run (either timed exposure or continuous clocking):
stop n science |
Engineering Telemetry
Once a science run is complete, the Software Housekeeping task will revert the bi-levels to their idle blinking states (see Section 3.4.3.1).
If system had not watchdog-reset since the last commanded reset:
LED_RUN_IDLE_A |
LED_RUN_IDLE_B |
If the system had watchdog-reset:
LED_WD_IDLE_A |
LED_WD_IDLE_B |
Science Telemetry
Once a run terminates, either due to a stop command, a radiation monitor inhibit, or an abort, the Science Manager produces a “Science Report” telemetry packet:
scienceReport[n] = { | ||
runStartTime | = n | # 100KHz time-stamp when data started |
parameterBlockId | = n | # Parameter Block Id used for data |
windowBlockId | = n | # Window Block Id used to filter |
biasStartTime | = n | # 100KHz time-stamp when bias was computed |
biasParameterId | = n | # Parameter Block Id used for bias |
exposuresProduced | = n | # Largest Exposure Number produced by FEPs |
exposuresSent | = n | # Number of exposures telemetered |
biasErrorCount | = n | # Number of bias errors telemetered |
fepErrorCodes[6] | = n0...n5 | # FEP Error codes, indexed by FEP |
ccdErrorFlags[6] | = n0...n5 | # Video Board error flags, indexed by FEP |
deaInterfaceErrorFlag | = 0..1 | # DEA Interface board error flag (0..1) |
terminationCode | = n | # Reason the run was stopped |
} | ||
FEP Error Code | Explanation
|
FEP_CMD_NOERR | No errors detected, the FEP is ok |
FEP_CMD_ERR_NO_RUN | Stop received, but it was already stopped. This may occur if many stop commands are issued to the instrument in a row. |
FEP_CMD_ERR_UNK_CMD | Unknown command type. SEU or bug. |
FEP_CMD_ERR_PARM_LEN | Parameter block too long. SEU or bug. |
FEP_CMD_ERR_PARM_TYPE | Unknown parameter block type. SEU or bug. |
FEP_CMD_ERR_QUAD_CODE | Unknown quadrant code. SEU or bug. |
FEP_CMD_ERR_BIAS_TYPE | Bad biasAlgorithmId in parameter block |
FEP_CMD_ERR_BIAS_PARM0 | Bad biasArg0 in parameter block. |
FEP_CMD_ERR_NROWS | Bad number of rows. SEU or bug. |
FEP_CMD_ERR_NCOLS | Bad number of columns. SEU or bug. |
FEP_CMD_ERR_NOCLK | Bad number of overclocks. SEU or bug. |
FEP_CMD_ERR_NHIST | histogramCount was zero in Histogram Mode |
FEP_CMD_ERR_NO_PARM | No parameter block loaded. SEU or bug. |
FEP_CMD_ERR_BAD_CMD | Illegal secondary command. SEU or bug. |
FEP_CMD_ERR_NO_BIAS | No bias map stored. SEU or bug |
FEP_ERR_LOCK_TIMEOUT | Time-out on FEP lock. SEU, bug or FEP crash |
FEP_ERR_NO_POWER | FEP is not powered on |
FEP_ERR_IS_RESET | FEP is reset, FEP probably crashed. |
FEP_ERR_NO_CMDRING | FEP program has no command mailbox, bad fepLoadOverride. |
FEP_ERR_REPLY_TIMEOUT | FEP reply timed-out. FEP probably in the process of crashing but hasn’t watchdogged yet. |
FEP_ERR_BAD_REPLY_TYPE | FEP produced bad reply. SEU or bug |
FEP_ERR_BAD_MBOX_STATE | FEP mailbox in wrong state. SEU or bug. |
Termination Code | Explanation
|
SMTERM_UNUSED | Unused. Should never see this one. |
SMTERM_STOPCMD | Commanded to Stop i.e. normal term. |
SMTERM_BIASDONE | Bias-only Run completed |
SMTERM_RADMON | Radiation Monitor was asserted |
SMTERM_CLOBBERED | Clobbered by another start command |
SMTERM_FEP_BIAS_START | FEP Bias Processing did not start |
SMTERM_FEP_DATA_START | FEP Data Processing did not start |
SMTERM_CCD_BIAS_START | Start clock failed. CCDs for bias failed |
SMTERM_CCD_DATA_START | Start clock failed. CCDs for data failed |
SMTERM_CCD_BIAS_STOP | Stop clock failed. CCDs for bias failed |
SMTERM_PROC_PARM_INVALID | Processing Parameter out of range |
SMTERM_DEA_PARM_INVALID | DEA Parameter out of range |
SMTERM_FEP_PARM_INVALID | FEP Parameter out of range |
SMTERM_FEP_CONFIG_ERROR | FEP Configuration Error |
SMTERM_DEA_IO_ERROR | I/O errors, or no CCD controllers on |
SMTERM_FEP_IO_ERROR | I/O errors, or no FEPs are on |
SMTERM_UNSPECIFIED | Reason is unspecified |
Warnings
This Section describes the activities used to perform a bias-only science run. Some of the information presented in this Section also applies to the optional bias computation stage of a science run (see Section 4.1).
The overall process of performing a bias-only science run within ACIS is similar to that for a normal science run, except that the run automatically terminates once the bias maps have been calculated and, if configured to do so, telemetered.
Description
In Continuous Clocking Mode, the bias values for the columns is computed using 1024 samples, from two consecutive data sets of 512 rows each. The computation time is always somewhat greater than the frame time.
∙ Frame Time
The frame time in Continuous Clocking Mode is given by:
frame_time = 512 * seconds-per-row |
where seconds-per-row is a function of the summing parameters. Refer to Section 4.1.1.1 for the formula.
∙ Bias Time
Rounding up to the nearest frame time for time to calculate the actual bias values, the total bias computation time for Continuous Clocking mode is:
bias_time = (frame_time * 3) seconds |
Description
In Timed Exposure Mode, the time taken to compute the bias maps depends heavily on the number of exposures needed to compute the bias, which, in turn, depends on the clocking parameters and bias parameters used, and the number of exposures discarded because the algorithm did not keep up with the incoming exposures. Whether or not the software can keep up is a function of speed of the algorithm running in the FEPs, and the number of events and background noise in the CCD images.
Ignoring the problem of discarded exposures for the moment (which may multiply the time by large factors), the following describes the amount of time required to compute a bias for Timed Exposure Mode, in terms of the of the parameters in the Timed Exposure Parameter Block (see Section 4.1.4.1).
∙ Frame Time
First, compute the frame time for the primaryExposure, and if dutyCycle is not zero, the secondaryExposure times. If the desired exposure time is not a “short-exposure” (see Section 4.1.1.2), the frame time for the primaryExposure is:
frame_time = (0.1 * primaryExposure + 0.04104) seconds |
i.e., the static integration time plus the “smear” time. If the exposure time is a “short-exposure”, then the frame time is:
frame_time | = staggered_smear_time + transfer_time |
+ (0.1 * primaryExposure + 0.04104) seconds | |
where (staggered_smear_time + transfer_time) is the minimum non-short integration time described in Section 4.1.1.2. For the frame time of the secondaryExposure field, replace primaryExposure with secondaryExposure in the above expressions.
∙ Whole-Frame Mode: Number of Frames
The number of frames used to compute a bias level in Whole-Frame mode (FEP_BIAS_1) is specified by either biasArg0 or biasArg1, whichever is the larger.
number_of_frames = max(biasArg0, biasArg1) |
No timed-exposure bias maps can be created without discarding a number of exposure frames, so the above is a minimum value. In practice, the creation time is divided into three phases:
In Phase 1, for every frame processed, two are discarded; in the optional Phase 2, two or three frames are discarded; in Phase 3, 7 out of 8 frames are discarded, independent of CCD type or background rate.
∙ Strip-Mode: Number of Frames
Alternatively, in “Strip” mode, (FEP_BIAS_2), the image buffer is divided into “strips” of rows, where each strip contains 1 sample for each pixel in the collection of rows. The bias algorithm collects these strips for a set of rows, and then computes the bias level for those rows. There is always at least 1 exposure dropped during the computation phase. The following estimate assumes that only 1 exposure is dropped.
However, in practice, the number of exposures dropped will vary. If the number of exposures per pixel, biasArg0, divides evenly into the image buffer size of 1024 rows, then the number of frames is:
number_of_frames = (biasArg0 + 1) * biasArg0 |
If biasArg0 does not divide evenly, the expression is:
number_of_frames = ((biasArg0 + 1) * biasArg0) + biasArg0 |
This assumes the computation of the last set of strips is small compared to the frame time.
∙ Bias Time: Single Integration Time
If using a single integration time (i.e., dutyCycle = 0), then the time taken to compute the bias, in seconds, is:
bias_time = primary_frame_time * (ignoreInitialFrames + number_of_frames) |
∙ Bias Time: Multiple Integration Times
If using multiple integration times (dutyCycle > 0), and using an initial discard count that divides evenly by the number of exposures in a cycle ((ignoreInitialFrames MOD (dutyCycle + 1)) == 0), then the time to compute the bias is:
number_of_primaries | = [ignoreInitialFrames DIV (dutyCycle + 1)] |
+ (number_of_frames DIV dutyCycle) | |
+ (1 if number_of_frames MOD dutyCycle != 0) | |
number_of_secondaries | = number_of_frames |
+ [(ignoreInitialFrames * dutyCycle) DIV (dutyCycle + 1)] | |
bias_time | = (primary_frame_time * number_of_primaries) |
+ (secondary_frame_time * number_of_secondaries) | |
If the initial discard count does not divide evenly, the number of secondaries is:
number_of_secondaries | = number_of_frames |
+ [(ignoreInitialFrames * dutyCycle) DIV (dutyCycle + 1)] | |
+ ([ignoreInitialFrames MOD (dutyCycle + 1)] - 1) | |
Description
While Continuous Clocking Mode uses only one telemetry packet for each bias map, and takes less than 1 second to form and post the maps for each FEP, Timed Exposure Mode takes many packets to send the FEP bias maps. The time taken depends on the number of maps being sent, the number of rows in the bias maps, and whether or not the maps are compressed, and if so, how well they compressed.
∙ Total Number of Pixels
The total number of rows being telemetered is:
number_of_rows | = number_of_FEPs * (subArrayRowCount+1) |
pixels_per_row | = 1024 if onChip2x2Summing == 0 |
or 512 if onChip2x2Summing == 1 | |
number_of_pixels | = number_of_rows * pixels_per_row |
∙ Time if Uncompressed, 24Kbps
If the bias maps are not compressed, each pixel is packed into 12-bits in the bias data telemetry packets. Ignoring the overhead, the time to send the maps, assuming 24K bits per second of telemetry, is:
bias_telemetry_time = (number_of_pixels * 12 bits / 24000) seconds |
For example, it takes about 53 minutes to send 6 uncompressed FEP bias maps, given a standard 1024 row image, without on-chip summing.
∙ Time if Compressed, 24Kbps
The time taken to send compressed bias maps depends on how well the maps compress. At XRCF, the compression factor was about 4 to 1 (this is about as good as it gets), and took about 13 minutes to send all 6 bias maps. As the CCDs erode over the life of the mission, and as artifacts due to cosmic rays add extra noise, the compression will become less effective, and take longer to send the maps.
The commands needed to load the parameter blocks for a bias-only run are identical to those for a normal science run, except that the state of the recomputeBias flag is ignored. A bias is always re-computed for a bias-only run, and the system behaves as if the recomputeBias flag is asserted. For a description of loading parameter blocks, see Section 4.1.4.1 and Section 4.1.4.3 (NOTE: Although windows are not used during a bias-only run, if a parameter block references a window parameter block, the window parameter block must not be corrupt).
Description
Prior to starting a bias-only science run, the user should have powered on the FEPs and Video boards needed for the run (see Section 3.3.2 and Section 3.3.3) and planned and loaded the parameter blocks needed for the run (see Section 4.1.1, Section 4.1.2, Section 4.1.3, Section 4.1.4). The user initiates a run using the “start n te bias slot” or “start n cc bias slot” command, and “slot” selects which parameter block to use to configure the run from the appropriate TE or CC slot.
Just as for a normal science run, once started, the Science Manager will configure the processing parameters, load the CCD settings into the DEA video boards, load the sequencer memory of the video boards, configure the Front End Processor parameters. It will then “jitter” the video board DACs to clear charge out of the CCDs. The task will command the FEPs to compute a bias, and then start the video board sequencers. Once the bias is complete, the task will stop the sequencers, and will send the bias maps to telemetry, if requested by the trickleBias flag. Once the bias maps have been sent, the task will automatically terminate the run.
Commands
∙ Command to start a Timed Exposure Bias-Only Science Run:
start n te bias slotId | # Start bias-only run with te pblock in slotId |
∙ Command to start a Continuous Clocking Bias-Only Science Run:
start n cc bias slotId | # Start bias-only run with cc pblock in slotId |
Engineering Telemetry
When performing the bias run, the Software Housekeeping task blinks the bi-level values between two values, about once a minute (see Section 3.4.3.1).
If system had not watchdog-reset since the last commanded reset:
LED_RUN_SCIENCE_A |
LED_RUN_SCIENCE_B |
If the system had watchdog-reset:
LED_WD_SCIENCE_A |
LED_WD_SCIENCE_B |
Science Telemetry
∙ Command Echo on a successful receipt of Timed Exposure start request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
commandOpcode | = 15 | # CMDOP_BIAS_TE |
startScience = { | ||
teBlockSlotIndex | = 0..4 | # Slot that contained the te pblock |
} | ||
} | ||
∙ Command Echo on a successful receipt of Continuous Clocking start request:
commandEcho[n] = { | ||
... | ||
result | = 1 | # Other values indicate an error |
commandOpcode | = 17 | # CMDOP_BIAS_CC |
startScience = { | ||
ccBlockSlotIndex | = 0..4 | # Slot that contained the cc pblock |
} | ||
} | ||
If a science run had been started, and not yet stopped, when the command is received, the result field of the echo will contain 14 (CMDRESULT_CLOBBERED). In this case, the earlier run will be aborted (NOTE: The FEPs will be reset), and the new run will be configured and started.
If the radiation monitor had been activated, then the start of the run will be deferred until the monitor is de-activated. In this case the result field will contain 13 (CMDRESULT_INHIBITED).
If the selected parameter block checksum does not match its contents (i.e. has been corrupted), the system will attempt to determine if the run was configured to use the Imaging CCDs or the Spectroscopy CCDs. If any of the CCDs in the fepSelect field of the parameter block choose an Imaging CCD (I0..I3), the system will attempt to use the parameter block contained in slot 0. If not, it will try to default to the parameter block in slot 1. If the default is not corrupt, the system will use the default parameter block, and the result field will be set to 5 (CMDRESULT_CORRUPT_DEFAULT). See Section 4.1.5 for details.
If the requested parameter block is corrupt, and the previous block is also corrupt (or they’re one and the same), the run will not be started, and the result field will contain 6 (CMDRESULT_CORRUPT_IDLE).
Since the field ranges within the parameter block are only checked during the set-up stage of the run, after the receipt of the command has been acknowledged via the command echo, if a parameter contained in the block is invalid or unsupported, the commandEcho will not indicate the problem, and supply a 1 (CMDRESULT_OK) in its result field. Instead, the run will not be started, and a “Science Report” packet will indicate the problem in its terminationReason field.
At the start of the run, the Science Manager will fetch and telemeter the parameter blocks used for the run.
∙ In Timed Exposure Mode, the dump appears as:
dumpedTeBlock[n] = { | ||
loadTeBlock = { | ||
teBlockSlotIndex | = 0..4 | # The te pblock slotId |
parameterBlockId | = n | # The te pblock ID |
... | ||
} | ||
} | ||
∙ If windows were used, the loadTeBlock is followed by a 2-D Window Block, aligned to the next 32-bit word:
dumpedTeBlock[n] = { | ||
loadTeBlock = { | ||
teBlockSlotIndex | = 0..4 | # The te pblock slotId |
parameterBlockId | = n | # The te pblock ID |
... | ||
} | ||
load2dBlock = { | ||
windowSlotIndex | = 0..4 | # The 2D window slotId |
windowBlockId | = n | # The window block ID |
... | ||
} | ||
} | ||
∙ In Continuous Clocking Mode, the dump appears as:
dumpedCcBlock[n] = { | ||
loadCcBlock = { | ||
ccBlockSlotIndex | = 0..4 | # The cc pblock slotId |
parameterBlockId | = n | # The cc pblock ID |
... | ||
} | ||
} | ||
∙ If windows were used, the loadCcBlock is followed by a 1d Window Block, aligned to the next 32-bit word:
dumpedCcBlock[n] = { | ||
loadCcBlock = { | ||
ccBlockSlotIndex | = 0..4 | # The cc pblock slotId |
parameterBlockId | = n | # The cc pblock ID |
... | ||
} | ||
load1dBlock = { | ||
windowSlotIndex | = 0..4 | # The 1D window slotId |
windowBlockId | = n | # The window block ID |
... | ||
} | ||
} | ||
Once the parameter blocks have been dumped, the Science Manager acquires and telemeters the DEA Video Board housekeeping information for all CCDs used for the run (NOTE: Unless all 10 video boards are powered on, the analog values in the packet will be of marginal use. They will indicate if the given channel is completely broken, but won’t really indicate the level that the DAC was set to). The content and form of this information is described in Section 3.4.6.6.
If the trickleBias flag was set in the parameter block, the system will telemeter the contents of the computed bias maps of each FEP, in FEP order (i.e. FEP_0 first, then FEP_1, etc.).
∙ The Timed Exposure Bias Map telemetry packets are of the form:
dataTeBiasMap[n] = { | ||
biasStartTime | = n | # 100KHz time-stamp at start of bias |
biasParameterId | = n | # Parameter Block Id used for bias |
ccdId | = 0..9 | # CCD that produced the map |
fepId | = 0..5 | # FEP used to produce the map |
dataPacketNumber | = n | # packet sequence number within map |
initialOverclocks[4] | = n0...n3 | # DC offset of bias values, by quadrant |
pixelsPerRow | = n | # number of pixels in each bias map row |
rowsPerBias | = n | # number of rows in the map |
ccdRow | = n | # starting row of data in the packet |
ccdRowCount | = n | # number of rows packed into the packet |
compressionTableSlotIndex | = 0..255 | # compression table slot value |
pixelCount | = n | # total number of pixels in the packet |
data | = n | # packed or compressed data |
# in an array of 32-bit words | ||
} | ||
∙ The single Continuous Clocking Bias Map telemetry packet is of the form:
dataCcBiasMap[n] = { | ||
biasStartTime | = n | # 100KHz time-stamp at start of bias |
biasParameterId | = n | # Parameter Block Id used for bias |
ccdId | = 0..9 | # CCD that produced the map |
fepId | = 0..5 | # FEP used to produce the map |
initialOverclocks[4] | = n0...n3 | # Overclocks at start of bias computation |
data | = n0...n383 | # Packet 12-bit bias values (384 words) |
} | ||
NOTE: If column summing is used in Continuous Clocking, the bias values will not fill the data array, leaving garbage in the unused portion.
Once the bias is complete, the Science Manager terminates the run and produces a “Science Report” telemetry packet. Under normal circumstances, the terminationReason field will contain a SMTERM_BIASDONE.
scienceReport[n] = { | ||
biasStartTime | = n | # 100KHz time-stamp at start of bias |
runStartTime | = n | # 100KHz time-stamp when data started |
parameterBlockId | = n | # Parameter Block Id used for data |
windowBlockId | = n | # Window Block Id used to filter |
biasStartTime | = n | # 100KHz time-stamp when bias was computed |
biasParameterId | = n | # Parameter Block Id used for bias |
exposuresProduced | = 0 | # Largest Exposure Number produced by FEPs |
exposuresSent | = 0 | # Number of exposures telemetered |
biasErrorCount | = 0 | # Number of bias errors telemetered |
fepErrorCodes[6] | = n0...n5 | # FEP Error codes, indexed by FEP |
ccdErrorFlags[6] | = n0...n5 | # Video Board error flags, indexed by FEP |
deaInterfaceErrorFlag | = n | # DEA Interface board error flag (0..1) |
terminationCode | = n | # Reason the run was stopped |
} | ||
Refer to Section 4.1.6 Science Telemetry for a description of the various error flags and other termination reason codes.
Warnings
The Continuous Clocking bias map telemetry always consists of a packed array of 1024, 12-bit elements. If column summing is used in Continuous Clocking mode, the unused portion will contain garbage.
This section illustrates how some of the features of the instrument may be used in combination to perform various procedures, such as restarting the instrument after a power-off. The detailed procedures are archived at SAO and MKI. The Command Action Procedures that define the uplink commands can be customized or built from pre-tested “atomic” components, as listed in Table 5.1. The atomic procedures usually include lists of telemetry verifiers and their expected values and are executed in realtime, except where noted with †, when they upload one or more stored command sequences for later execution.
Procedure | Name | Description | References
|
SOP_61038 | dpaa_on | Turn on DPA A | |
SOP_61035 | dpaa_off | Turn off DPA A |
|
SOP_61037 | dpab_on | Turn on DPA B |
|
SOP_61034 | dpa_b_off | Turn off DPA B |
|
SOP_61036 | deaa_on | Turn on DEA A | |
SOP_61033 | deaa_off | Turn off DEA A |
|
DEAB_ON | deab_on | Turn on DEA B |
|
DEAB_OFF | deab_off | Turn off DEA B |
|
SOP_61002 | dpaab_deaa_on | Turn on DPA A & B and DEA A [realtime] | |
SOP_61039† | dpaab_deaa_scs | Turn on DPA A & B and DEA A [using SCS] |
|
SOP_61011 | dpaab_deaa_off | Turn off DPA A & B and DEA A |
|
WARMBOOT | warmboot | Warm Boot the ACIS BEP | |
COLDBOOT | coldboot | Cold Boot the ACIS BEP | |
WARMBOOT_HKP | warmboot_hkp | Warmboot BEP and start DEA H/K | |
SOP_61010 | dea_hkp | Load DEA HK Block & Execute DEA Housekeeping Run | |
SOP_61014 | dahtr_b_on | Turn On Detector Assembly Heater Side B | |
SOP_61015 | setfp_m120 | Set focal plane temperature to -120C | |
SOP_61030 | setfp_m90 | Set focal plane temperature to -90C |
|
MZ_61030 | setfp_m50 | Set focal plane temperature to -50C |
|
SOP_61075 | setfp_m110 | Set focal plane temperature to -110C |
|
Table 5.2 lists a set of procedures that have been developed to run in various contingencies. Procedures marked † use a mixture of realtime commands and stored command sequences; the remainder use only realtime commands.
Procedure | Name | Description | References
|
SWAP_BEPA_B | switch_bepa_b | Switch from BEP A to BEP B | |
SWAP_BEPB_A | switch_bepb_a | Switch from BEP B to BEP A |
|
SWITCH_DEAA_B† | switch_deaa_b | Switch from DEA A to DEA B | |
SWAP_DEAB_A† | switch_deab_a | Switch from DEA B to DEA A |
|
SOP_51005 | dahtr_aon_boff | Turn Off DA heater side B and turn on side A | |
SOP_51006 | dahtr_bon_aoff | Turn Off DA heater side A and turn on side B |
|
DEA_FEP_DIAGS† | dea_fep_diags | DEA and FEP diagnostics procedure | |
DEAA_ON_TEST_VID† | deaa_on_test_vid | Turn On DEA A and Test Video Boards | |
CAP1375† | eeprom_chk | Monitoring the active flight EEPROM | |
SOP_61082 | sw_fep0eng | Flight S/W FEP0 Engineering Patch |
|
FSW_DUMP | sw_dump | Dump Flight Software | |
SOP_61020† | radbelt_entry | Radiation Belt Entry |
|
SOP_61016† | mem_save | Put ACIS into memory save mode for eclipse |
|
SOP_61021† | standby | Put ACIS into standby mode for eclipse |
|
SOP_61022 | uplink_boot | Tests Uplink Boot on BEP-A and -B | |
SOP_61023 | swbootmode | Tests BEP-A and -B reboots | |
The initial phase of the on-orbit check-out verified that none of the hardware broke during launch and on-orbit insertion. The second phase, described in Table 5.3, ran a series of command procedures to test the CCDs and their optical blocking filters, and to generate data while the CCDs were exposed to the internal X-ray calibration. While of some historic interest, their specific commands should not be used blindly since some of the parameters may have changed in the course of the mission. The ACIS door was then (carefully) opened and the third phase, a series of science runs, began.
Procedure | Description | References
|
SOP_61024 | Diagnose the ACIS video boards and DPA
| |
Start a DEA HKP run if necessary | ||
Run TE diagnostic mode of image array | See DIAG |
|
Run TE diagnostic mode of spectroscopy array | p.143 |
|
Power-down video boards and FEPs | ||
SOP_61054 | Obtain raw pixel data for diagnostic purposes
| |
Start a DEA HKP run if necessary | ||
Configure the instrument to collect imaging array data with all video boards up to check the clock biases | ||
Execute a short science run to get the clock biases | ||
Configure the instrument to collect imaging array data with 6 video boards powered up | ||
Execute the science run, collect 2 raw frames per CCD, including a dump of all the configuration information | ||
Configure the instrument to collect spectroscopy array data with all video boards powered up | ||
Execute a short science run to get the clock biases | ||
Configure the instrument to collect spectroscopy array data with 6 video boards powered up | ||
Execute the science run, collect 2 raw frames per CCD, including a dump of all the configuration information | ||
Reconfigure back to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SOP_61053 | Check the integrity of the Optical Blocking Filter
| |
Start DEA HKP if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the science run with the ACIS-I array, including a dump of the complete configuration information | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the science run with the ACIS-S array, including a dump of the complete configuration information | ||
Turn the LED on | ||
Configure the instrument to collect imaging array data | ||
Execute the science run with the ACIS-I array, including a dump of the complete configuration information | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the science run with the ACIS-S array, including a dump of the complete configuration information | ||
Turn off the LED | ||
Power off the video boards and FEPs, if necessary | ||
SOP_61052 | Measure the dark current from each CCD | |
Start a DEA HKP run if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the 9.9 and 3.3 s bias computations with the imaging array include the full configuration dumps | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the 9.9 and 3.3 s bias computations with the spectroscopy array include the full configuration dumps | ||
Power down the video boards and FEPs and return to thermal standby state – all FEPs and video boards powered down – if necessary | ||
The sequence above will be repeated at the desired temperatures |
|
|
SOP_61012 | Event Histogram on Intl Cal Source, ACIS-S in Fmt 1
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect spectroscopy array data | ||
Start the science run including a complete dump of the configuration information and wait 25 m for the bias maps to get down in TLM FMT 2 | ||
Switch the spacecraft to TLM FMT 1 |
|
|
Acquire data for at least 90 m in TLM FMT 1 |
|
|
Switch the spacecraft to TLM FMT 2, wait five minutes |
|
|
End the science run | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SOP_61074 | Event Histogram on Intl Cal Source, ACIS-I in Fmt 1
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect imaging array data | ||
Start the science run including a complete dump of the configuration information and wait 25 m for the bias maps to get down in TLM FMT 2 | ||
Switch the spacecraft to TLM FMT 1 |
|
|
Acquire data for at least 90 m in TLM FMT 1 |
|
|
Switch the spacecraft to TLM FMT 2, wait five minutes |
|
|
End the science run | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SAP_61049 | Calibrate CCDs using internal cal source
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect imaging array data, (no ASCA Grade-7, no event amplitude cutoff) | ||
Execute the faint mode science run | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the faint mode science run, (no ASCA Grade-7, no event amplitude cutoff) | ||
Configure the instrument to collect imaging array data | ||
Execute the faint mode science run, (no Grade 255, event amplitude cutoff at 2900 ADU, only telemeter events from S2 and S3, bias algorithm parameters vary for I0-I3, event threshold varies by quadrant for S2) | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the graded mode science run (no Grade 255, no event amplitude cutoff, employs a window to only telemeter events from S2 and S3) | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SAP_61079 | Raw Mode Data for Bias Algorithm Optimization
| |
Start a DEA HKP run if necessary | ||
Configure the instrument to collect imaging array data with 6 video boards up | ||
Execute the science run, collect 26 or more raw frames each from CCDs S2 and S3, including a dump of all the configuration information | ||
Reconfigure back to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SAP_61049 | Repeat Internal Calibration Source Procedure
| |
SAP_61077 | Test the continuous clocking 3x3 mode
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the continuous clocking 3x3 mode science run | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the continuous clocking 3x3 mode science run | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SOP_61012 | Repeat Event Histogram of Internal Cal Source with ACIS-S in Fmt 1
| |
SAP_61049 | Repeat Internal Calibration Source Procedure
| |
SOP_61019 | Power cycle DPA and DEA boards
| |
Turn off both sides of the DPA, turn on DPA A and verify BEP A boot | ||
Power up I0,I1,I2 video boards and FEPs and perform a science run and check the power levels while clocking only I0,I1,I2 | ||
Power off all boards and check power, power off DPA A | ||
Power on DPA Side B, select BEP B and boot, check power levels | ||
Power up I3,S2,S3 video boards and FEPs and perform a 2nd science run and check power levels while clocking only I3,S2,S3 | ||
Power off all boards and FEPs | ||
Switch back to BEP A in charge | ||
SOP_61008 | DEA/FEP MUX Verification
| |
Power on the 6 FEPs and the 6 DEA video boards used for imaging | ||
Run a suite of science runs, varying the expected overclock levels in each run | ||
Power off the imaging video boards and power on those used for spectroscopy | ||
Run a new suite of science runs, varying the expected overclock levels for each | ||
SOP_61012 | Repeat Event Histogram of Internal Cal Source with ACIS-S in Fmt 1
| |
SAP_61082 | Internal Calibration Source and Background Measurement
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the faint mode science run (no ASCA Grade-7, no event amplitude cutoff ) | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the faint mode science run (no ASCA Grade-7, no event amplitude cutoff ) | ||
Configure the instrument to collect imaging array data | ||
Execute the faint mode science run (no Grade 255, event amplitude cutoff at 3750 ADU, window out I1 and I2) | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the faint mode science run (no Grade 255, event amplitude cutoff at 3750 ADU, window out S4 and S5) | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SAP_61077 | Repeat Test of the Continuous Clocking 3x3 mode
| |
SAP_61079 | Repeat Collection of Raw Mode Data for Bias Algorithm Optimization
| |
SOP_61054 | Repeat Collection of Raw Pixel Data for Diagnostic Purposes
| |
SAP_61083 | Test the continuous clocking mode
| |
Warm boot and start DEA housekeeping if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the continuous clocking 3x3 mode science run | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the continuous clocking 3x3 mode science run | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
SAP_61082 | Repeat Background Measurement with Internal Calibration Source
| |
SAP_61045 | Characterize Background after opening ACIS door
| |
Warm boot and start DEA HKP if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the science run with the ACIS-I array, including a dump of the complete configuration information | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the science run with the ACIS-S array, including a dump of the complete configuration information | ||
Repeat previous 4 steps, twice |
|
|
Return to the thermal standby state – all FEPs and video boards powered down | ||
SAP_61084 | Unfiltered CCD Orbital Background Measurement
| |
Warm boot and start DEA HKP if necessary | ||
Configure the instrument to collect imaging array data | ||
Execute the science run with the ACIS-I array, including a dump of the complete configuration information | ||
Return to the thermal standby state – all FEPs and video boards powered down | ||
SAP_61045 | Repeat Characterizing Background after Opening ACIS Door
| |
SAP_61044 | HRMA Flux Transfer Standard FTS Sources Measurement
| |
Warm boot and start DEA HKP if necessary | ||
Set the focal plane temperature to -109.2 C | ||
Configure the instrument to collect imaging array data | ||
Execute the science run including a dump of the complete configuration information | ||
Configure the instrument to collect spectroscopy array data | ||
Execute the science run including a dump of the complete configuration information | ||
Return to the thermal standby state – all FEPs and video boards powered down – if necessary | ||
This section describe scenarios that start with ACIS powered down, receiving no power from the PSMC. Section 5.2.1 illustrates how to start the instrument in its nominal operating mode using BEP-A and six FEPs. Section 5.2.2 show how to use BEP-B with six FEPs when BEP-A is known to be damaged. Sections 5.2.3 and 5.2.4 assume DPA-B or DPA-A power failures, using either BEP-A or BEP-B with 3 FEPs. Some other contingencies are addressed by command procedures and are listed in Table 5.2, above.
In the following tables, the steps should be executed in the order given, but most can be repeated if the first attempt fails, e.g., if the previous step was still in process and the commandEcho packet reported a result code of 3 CMDRESULT_BUSY. The “Command/Telemetry” column contains either the uplinked bcmd command (in brown), or the name (in green) of the resulting ACIS packet or telemetry mnemonic (CAPITALIZED) whose value(s) should be examined to determine whether the step was successful.
The DEA can be powered up at any time before the ”Warm Boot” step. Either side of the PSMC – DEA-A or DEA-B – can be used, but the DEA’s analog-to-digital converters and focal plane heater controller will not be properly configured until the warm boot.
When a BEP is powered off (i.e. its corresponding power-supply side is turned off or is disabled), it loses its patch list. When the power is re-applied, the bad pixel and column maps, system configuration table, Huffman table modifications, and all parameter blocks are overwritten by those stored in EEPROM.
The normal system configuration is to have both DPA-A and -B powered, allowing use of all 6 FEPs, and BEP-A as the selected BEP, with BEP-B powered but halted.
Step | Task | Command/Telemetry | Refs
|
1 | Power on DPA Side A |
| Table 3.2 |
Enable DPA Side A | enable dpa a | 3.1.2 | |
Power on DPA Side A | poweron dpa a | ||
Check Voltage, Current, and Thermal | 1DPP0AVO, etc. | 3.4.1 | |
Check BEP Startup Message | bepStartupMessage | 3.4.2 | |
2 | Power on DPA Side B |
| 3.2 |
Enable DPA Side B | enable dpa b | 3.1.2 | |
Power on DPA Side B | poweron dpa b | ||
Check Voltage, Current, and Thermal | 1DPP0BVO, etc. | 3.4.1 | |
3 | Re-load patch list |
| |
Clear all patches |
remove n patch {...} | 3.7.1.1 | |
Add new patches |
add n patch id addr {...} | App. F | |
4 | Power on DEA Side A or B (n) | 1DEP0AVO, 1DEP0BVO, etc. | |
Enable DEA Side n | enable dea n | 3.3.3 | |
Power on DEA Side n | poweron dea n | 3.3.3 | |
Check Voltage, Current, and Thermal | 1EPP0nVO, etc. | 3.4.1 | |
5 | Dump patch list and verify |
| |
Dump all patches | dump n patchList | 3.6.2.4 | |
Compare download against archive |
| ||
6 | Warm Boot |
| 3.1.3.3 |
Halt the processor | halt bep | ||
Set warmboot flag | set warmboot on | ||
Restart the processor | run bep | ||
Check the BEP Startup Message | bepStartupMessage | 3.4.2 | |
7 | Start DEA Housekeeping |
| 3.4.6 |
Load DEA parameter block |
load n dea s {...} | 3.4.6.1 | |
Start DEA housekeeping | start n dea s | 3.4.6.2 | |
8 | Set System Configuration parameters |
change n systemConfig {...} | 3.3 |
(especially focal plane temperatures) |
| ||
Check all Voltage, Current and Thermal | 1DPP0AVO, 1DPICACU, 1DPAMZT, | 3.4.1 | |
channels | deaHousekeepingData, etc. | ||
9 | Dump System Configuration table |
dump n systemConfig {...} | 3.6.2.5 |
Examine the configuration table | bepReadReply (formatTag=34) | ||
Steps 10–13 may be skipped if the BEP maps and parameter blocks are initialized
from the EEPROM (see Appendix I) and only changed via uplink command prior
to their use. | |||
10 | Re-load Bad Pixel and Column Maps |
| |
Reload the bad pixel map |
add n badPixel {...} | 3.5.1 | |
Reload the bad CC column map |
add n cc badColumn {...} | ||
Reload the bad TE column map |
add n te badColumn {...} | ||
11 | Re-load parameter blocks (i.e. those not automatically re-loaded at start of each run) |
| 4.1.4 |
Reload DEA parameter blocks |
load n dea slot {...} | 3.4.6.1 | |
Reload TE parameter blocks |
load n te slot {...} | 4.1.4.1 | |
Reload 2D parameter blocks |
load n window2d slot {...} | 4.1.4.2 | |
Reload CC parameter blocks |
load n cc slot {...} | 4.1.4.3 | |
Reload 1D parameter blocks |
load n window1d slot {...} | 4.1.4.4 | |
12 | Dump Maps and Tables |
| |
Dump the bad pixel map | dump n badPixel | 3.6.2.1 | |
Dump the bad CC column map | dump n cc badColumn | ||
Dump the bad TE column map | dump n te badColumn | ||
Dump all DEA parameter blocks | dump n dea | 3.6.2.2 | |
Dump all TE parameter blocks | dump n te | ||
Dump all 2D parameter blocks | dump n window2d | ||
Dump all CC parameter blocks | dump n cc | ||
Dump all 1D parameter blocks | dump n window1d | ||
Dump the Huffman compression table | dump n huffman | 3.6.2.3 | |
Verify maps and tables against archive |
| ||
13 | Re-load Huffman table changes (if any) |
write n addr {...} | 3.7.2 |
14 | The instrument is now ready for use. Before starting a science observation,
the required FEPs and video boards must be powered up (“change n
systemConfig”), parameter and optional window block loaded (“load n te”,
etc), and started (“start n s”). These topics are described in Sections 5.4, 5.5
and 5.6, below. | ||
In the first contingency scenario, the PSMC is able to power DPA-A and DPA-B, but BEP-A is unusable for some reason, so all 6 FEPs can be used but BEP-B must be selected.
Step | Task | Command/Telemetry | Refs
|
1 | Power on DPA Side A |
| Table 3.2 |
Enable DPA Side A | enable dpa a | 3.1.2 | |
Power on DPA Side A | poweron dpa a | ||
Check Voltage, Current, and Thermal | 1DPP0AVO, etc. | 3.4.1 | |
Check BEP Startup Message | bepStartupMessage | 3.4.2 | |
Halt BEP-A | halt bep | 3.2.2 | |
2 | Power on DPA Side B |
| Table 3.2 |
Enable DPA Side B | enable dpa b | 3.1.2 | |
Power on DPA Side B | poweron dpa b | 3.1.2 | |
Check Voltage, Current, and Thermal | 1DPP0BVO, etc. | 3.4.1 | |
3 | Start BEP-B |
| |
Select BEP-B | select bep b | 3.1.2 | |
Run BEP-B | run bep | ||
Check BEP Startup Message | bepStartupMessage | 3.4.2 | |
... | |||
If the DPA-B power supply fails, such as a short in the PSMC or on a DPA board, only BEP-A and FEP_0, FEP_1, and FEP_2 can be used.
If DPA-A or its power supply fails, such as a short in the PSMC or on a DPA board, only BEP-B and FEP_3, FEP_4, and FEP_5 can be used.
Step | Task | Command/Telemetry | Refs
|
1 | Power on DPA Side B |
| Table 3.2 |
Enable DPA Side B | enable dpa b | 3.1.2 | |
Power on DPA Side B | poweron dpa b | 3.1.2 | |
Check Voltage, Current, and Thermal | 1DPP0BVO, etc. | 3.4.1 | |
2 | Start BEP-B |
| |
Select BEP-B | select bep b | 3.1.2 | |
Run BEP-B | run bep | ||
Check BEP Startup Message | bepStartupMessage | 3.4.2 | |
... | |||
The user performs “warm” boots of the instrument either after removing or installing patches, or in order to “fix” a software or hardware problem by re-starting the BEP with its existing patches. The procedure is as follows:
This scenario exemplifies a “Timed Exposure” science run in “Very Faint” mode to observe faint, extended targets, using the four “imaging” CCDs, CCD_I0, CCD_I1, CCD_I2 and CCD_I3, along with the pair of adjacent “spectroscopic” CCDs, CCD_S2 and CCD_S3. The choice of mode is driven by the expected number of events in telemetry format 2, as shown in Table 5.9, where the “Max Events per Second” column shows a range of rates: the first value is when the events are distributed equally among 6 CCDs and the second is for runs that use a single CCD. Graded modes report a single PHA value calculated from “islands” of 3x3 or 1x3 pixels. Timed-exposure rates reflect a static exposure time of 3.2 seconds; shorter exposure times achievable with sub-array readout (subarrayRowCount<1023 in Section 5.5), or on-chip summation (onChip2x2Summing=1) in Section 4.1.4.1, will reduce the maximum rates by a few percent. Exceeding these rates will eventually cause housekeeping packets to be dropped and force one or more FEPs to drop entire exposures.
This section describes the parameters used for this timed exposure scenario, and why their particular values were chosen. The parameters themselves are defined in Section 4.1.4.1. Note that it is not necessary to know whether BEP-A or BEP-B is the active BEP: the parameter blocks and command procedures will be identical.
This scenario uses the parameters of the TE_0046CB science mode in the ACIS command archive, which assigns a parameterBlockId of 0x0046c034 to its timed exposure parameter block. The first 5 hexadecimal digits are unique to its contents, while the remaining 3 digits reflect the revision level, e.g., to indicate occasional changes to the fep*VideoOffset levels, as described in Section 5.4.1.5, below. Some of the remaining fields in this example will be taken from an actual observation using this science mode, OBSID 24514, run on November 19, 2021.
This science run uses all 4 Imaging CCDs and the two center spectroscopy CCDs, of which CCD_S3 is a back-side CCD.1 In order to take advantage of this, CCD_S3 is assigned to the first reliable2 FEP (see Section 4.1.1.2).
The FEP selection array is configured as:
fepCcdSelect[0] = 6 | # CCD_S2 assigned to FEP_0 |
fepCcdSelect[1] = 7 | # CCD_S3 assigned to FEP_1 |
fepCcdSelect[2] = 3 | # CCD_I3 assigned to FEP_2 |
fepCcdSelect[3] = 2 | # CCD_I2 assigned to FEP_3 |
fepCcdSelect[4] = 1 | # CCD_I1 assigned to FEP_4 |
fepCcdSelect[5] = 0 | # CCD_I0 assigned to FEP_5 |
This example assumes that the source will produce no more than ~68 events per second (including background events that “sneak” through the BEP’s filters) across all CCDs (see Table 5.9). The event rate for this example is low enough to support “Timed Exposure Faint 5x5” mode, so we choose:
fepMode | = 3 | # FEP_TE_MODE_EV5x5 |
bepPackingMode | = 1 | # BEP_TE_MODE_FAINT |
This scenario will not use on-chip summing, not use a sub-array, use 16 overclocks per output node (the maximum number is 30), and normal video gain. All of the video chains are working and will be used. The minimum, most efficient full-frame integration time for 6 CCDs is 3.2 seconds (see Section 4.1.1.2). We assume that the source is diffuse enough and the spacecraft dither rate is fast enough to avoid pile-up with the 70 counts/second (Table 5.9), given a 3.2 second static integration time. This leads to the following:
primaryExposure | = 32 |
secondaryExposure | = 0 |
dutyCycle | = 0 |
onChip2x2Summing | = 0 |
subarrayStartRow | = 0 |
subarrayRowCount | = 1023 |
overclockPairsPerNode | = 8 |
outputRegisterMode | = 0 # QUAD_FULL |
ccdVideoResponse[FEP_0] | = 0 |
ccdVideoResponse[FEP_1] | = 0 |
ccdVideoResponse[FEP_2] | = 0 |
ccdVideoResponse[FEP_3] | = 0 |
ccdVideoResponse[FEP_4] | = 0 |
ccdVideoResponse[FEP_5] | = 0 |
Each video board channel has a characteristic video offset value, which is adjusted to provide a sufficient dynamic range for the pixels, i.e., avoiding clipping their values below zero or above 4095. These offsets may be changed over the lifetime of the mission. The video offsets saved in the default parameter blocks in EEPROM, and used during pre-launch calibration are shown in Table 5.10, where → denotes subsequent changes made since launch, while the EEPROM blocks retain their original values.. The offset parameters are specific to each node of each CCD.
ccdId | Board | Type | NODE_A | NODE_B | NODE_C | NODE_D
|
0 | CCD_I0 | FI | 87 | 86 | 76 | 89 |
1 | CCD_I1 | FI | 83 | 69 | 79 | 83 |
2 | CCD_I2 | FI | 86 | 65 | 82 | 89 → 86 |
3 | CCD_I3 | FI | 76 | 68 | 79 | 80 |
4 | CCD_S0 | FI | 73 | 75 | 73 | 83 |
5 | CCD_S1 | BI | 79 | 99 → 94 | 76 | 95 |
6 | CCD_S2 | FI | 90 | 86 → 82 | 79 | 94 |
7 | CCD_S3 | BI | 79 | 79 | 79 | 77 |
8 | CCD_S4 | FI | 72 | 72 | 78 | 71 |
9 | CCD_S5 | FI | 81 | 87 | 80 | 82 |
In the current scenario, the CCD selection in Section 5.4.1.2 will result in the following offsets:
Board | Item | NODE_A | NODE_B | NODE_C | NODE_D
|
CCD_S2 | fep0VideoOffset | 90 | 82 | 79 | 94 |
CCD_S3 | fep1VideoOffset | 79 | 79 | 79 | 77 |
CCD_I3 | fep2VideoOffset | 76 | 68 | 79 | 80 |
CCD_I2 | fep3VideoOffset | 86 | 65 | 82 | 86 |
CCD_I1 | fep4VideoOffset | 83 | 69 | 79 | 83 |
CCD_I0 | fep5VideoOffset | 87 | 86 | 76 | 89 |
This scenario uses the “Whole-Frame” algorithm (FEP_BIAS_1), taking 9 conditioning exposures (biasArg[0]=9) followed by 16 approximation-to-mean exposures (biasArg[1]=9+16). Refer to Section 4.1.4.1 for a detailed discussion of timed exposure bias algorithms and their parameters. The low-pixel elimination parameter (biasArg[2]) will be set to 20 ADU. The event rejection threshold (biasArg[3]) for the backside CCD_S3 will be 26 ADU, and 50 ADU for all of the front-side CCDs. The pixel rejection threshold (biasArg[4]) for the approximation-to-mean stage will be 20 ADU for all of the CCDs. In order to allow the video board temperatures to settle, and to effectively flush the charge from the CCDs, the system will ignore the first 100 exposures prior to starting the bias computation. The current bad pixel and timed exposure bad column lists will be applied to the bias maps once the maps have been computed. This leads to the following parameter choices:
ignoreBadPixelMap | = 0 |
trickleBias | = 1 |
ignoreBadColumnMap | = 0 |
ignoreInitialFrames | = 100 |
recomputeBias | = 1 |
Board |
biasAlgorithmId | [0] | [1] | [2] | [3] | [4] |
biasCompressionSlotIndex |
CCD_S2 | FEP_BIAS_1 | 9 | 25 | 20 | 50 | 20 | 1 |
CCD_S3 | FEP_BIAS_1 | 9 | 25 | 20 | 26 | 20 | 3 |
CCD_I3 | FEP_BIAS_1 | 9 | 25 | 20 | 50 | 20 | 1 |
CCD_I2 | FEP_BIAS_1 | 9 | 25 | 20 | 50 | 20 | 1 |
CCD_I1 | FEP_BIAS_1 | 9 | 25 | 20 | 50 | 20 | 1 |
CCD_I0 | FEP_BIAS_1 | 9 | 25 | 20 | 50 | 20 | 1 |
The Front End Processors will select a candidate event center if the center pixel values are 20 ADU above their bias levels for the back-side CCD (CCD_S3), and 38 ADU for the remaining front-side CCDs. The event’s split threshold is 13 ADU above the pixel bias values for all of the CCDs. In this example, the BEP will reject ACIS flight grades 24, 66, 107, 214, and 255. No window filters and only the standard pulse height filters will be applied. This leads to the following event selection parameters:
lowerEventAmplitude | = 20 | # Standard PHA filtering |
eventAmplitudeRange | = 3250 | # |
gradeSelections | = 0xfeffffff 0xffffffff | # 256-bit array |
0xfffffffb 0xfffff7ff | # of grade code flags | |
0xffffffff 0xffffffff | # =0 to accept | |
0xffbfffff 0x7fffffff | # =1 to reject | |
windowSlotIndex | = 65535 | # No windows |
fep0EventThreshold | = 38 38 38 38 | # CCD_S2 |
fep0SplitThreshold | = 13 13 13 13 | # |
fep1EventThreshold | = 20 20 20 20 | # CCD_S3 |
fep1SplitThreshold | = 13 13 13 13 | # |
fep2EventThreshold | = 38 38 38 38 | # CCD_I3 |
fep2SplitThreshold | = 13 13 13 13 | # |
fep3EventThreshold | = 38 38 38 38 | # CCD_I2 |
fep3SplitThreshold | = 13 13 13 13 | # |
fep4EventThreshold | = 38 38 38 38 | # CCD_I1 |
fep4SplitThreshold | = 13 13 13 13 | # |
fep5EventThreshold | = 38 38 38 38 | # CCD_I0 |
fep5SplitThreshold | = 13 13 13 13 | # |
This example assumes that both DPA-A and DPA-B are powered, that the Side-A DEA Power supply has power, that all the FEPs have power (and were successfully loaded with software by the active BEP), but that the power state of the individual video boards are unknown to the ground scheduling algorithm. This example also assumes that all of the hardware and software is operating properly, that the system configuration parameters (other than the video board power) are in a stable, known state, and that the focal plane temperature is at its normal operating temperature (i.e., about -120C).
The user first issues a command that powers off video boards not used for the run, and powers on the boards required for the run. In this example, six FEPs and CCDs I0-I3, S2 and S3 are to be used. This is achieved with the following “Change System Configuration” command (see Section 3.3.3):
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 0 | # SYSSET_DEA_POWER |
itemValue | = 207 | # DEA power bit-map: 0011001111b |
} | ||
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = 63 | # FEP power bit-map: 111111b |
} | ||
} | ||
If all of the DEA video board power settings were changed by the command, it would take about 11 seconds to execute. If the 6 video boards were already in their desired power states, the command would take less than 1 second to execute. Each FEP takes less than 1 second to power down, but ~10 seconds to power up, since the BEP must reload its software. When executed from a stored command sequence, the change command is followed by a 63 second delay.
For this example, the parameter block will be loaded into Timed Exposure slot 4, by copying the output of the following bcmd command to the software serial port of the active BEP. The process by which the block is transferred to the uplink command library, transmitted to the spacecraft, and sent to ACIS, is outside the context of this document.
load n te slotId { | ||
parameterBlockId | = 0x0046c034 | |
fepCcdSelect | = 6 7 3 2 1 0 | # CCD_S2 on FEP_0, S3 on FEP_1, etc. |
fepMode | = 3 | # FEP_TE_MODE_EV5x5 |
bepPackingMode | = 0 | # BEP_TE_MODE_FAINT |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 0 | |
subarrayRowcount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL mode |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 32 | |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 38 38 38 38 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 20 | |
eventAmplitudeRange | = 3250 | |
gradeSelections | = 0xfeffffff 0xffffffff 0xfffffffb 0xfffff7ff \
| |
0xffffffff 0xffffffff 0xffbfffff 0x7fffffff
| ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 1 3 1 1 1 1
| |
rawCompressionSlotIndex | = 2 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | # all using FEP_BIAS_1 |
biasArg0 | = 9 9 9 9 9 9 | |
biasArg1 | = 25 25 25 25 25 25 | |
biasArg2 | = 20 20 20 20 20 20 | |
biasArg3 | = 50 26 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 90 82 79 94 | |
fep1VideoOffset | = 79 79 79 77 | |
fep2VideoOffset | = 76 68 79 80 | |
fep3VideoOffset | = 86 65 82 86 | |
fep4VideoOffset | = 83 69 79 83 | |
fep5VideoOffset | = 87 86 76 89 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
} | ||
Since no windows are being used, no 2-dimensional window parameter block command is needed for the run. Upon receipt of the TE parameter block, it will be loaded into BEP I-cache in less than 1 second (see Section 4.1.4.1). ACIS is now ready to start the run.
The user starts the run by issuing a “Start Science” command, specifying slot 4 (see Section 4.1.5), which means that the binary output of the following bcmd command is sent to the active BEP in the same manner as the parameter block described in Section 5.4.4, above. The number, n, is an integer in the range 0-65535 chosen to identify this particular ACIS command, and will be echoed in the commandIdentifier field of the BEP’s commandEcho acknowledgment packet.
start n te 4 |
Given that 6 CCDs are being configured and the PRAM load is relatively small (see Appendix H.5), the system will take on the order of 2 minutes to configure the system, acquire and dump the DEA housekeeping information, and start clocking the CCDs:
setup_time | = 30 seconds to load video registers |
+ 1 minute to acquire and dump DEA housekeeping | |
+ 11 seconds to flush CCD charge | |
+ 1 second of additional overhead | |
= ~1.7 minutes | |
Once the system is configured, the FEPs will be commanded to re-compute their bias maps. The initial phase typically drops 2 of 3 exposure frames. This phase will therefore take about 7 minutes:
bias_init | = (100 ignored frames + biasArg0*3 bias frames) * 3.2 seconds/frame |
= ~7.0 minutes | |
In the second phase, the FEPs use the bias maps created in the first phase to filter out excess charge in the incoming exposures, and improve the maps with what remains. They drop between 5 of 6 and 7 of 8 incoming frames, and the whole computation will therefore take approximately:
bias_time | = (100 + (biasArg0 * 3) + ((biasArg1-biasArg0) * 8)) * 3.2 |
= ~13.6 minutes | |
Since the trickleBias flag was set in the parameter block, the BEP will copy the new bias maps into telemetry as a set of dataTeBiasMap packets, as follows:
dataTeBiasMap[n] = { | ||
biasStartTime | = 0x59754e96 | # 100 KHz time-stamp at start of bias |
biasParameterId | = 0x0046c034 | # Parameter Block Id used for bias |
ccdId | = 6 | # CCD that produced the map CCD_S2 |
fepId | = 0 | # FEP used to produce the map FEP_0 |
dataPacketNumber | = n | # packet sequence number within map |
initialOverclocks[4] | = n n n n | # DC offset of bias values, by quadrant |
pixelsPerRow | = 1023 | # number of pixels -1 in each bias map row |
rowsPerBias | = 1023 | # number of rows -1 in the map |
ccdRow | = n | # starting row of data in the packet |
ccdRowCount | = n | # number of rows packed into the packet |
compressiontTableSlotIndex | = 1 | # compression table slot value |
pixelCount | = n | # total number of pixels in the packet |
data | = n n n ... | # packed or compressed data |
# in an array of 32-bit words | ||
} | ||
followed by the other bias maps in order of their appearance in fepCcdSelect. Within each map, the bias values are packed in ascending row order until no more rows can fill a packet, but the packets are written out in descending row index. So if, for instance, each telemetry packet contains 10 (compressed) rows, the first packet of a map will contain dataPacketNumber=0, ccdRow=1023 and ccdRowCount=9, the second dataPacketNumber=1, ccdRow=1013 and ccdRowCount=9, etc., leaving the last packet partially filled.
On average, Huffman first-difference compression reduces each 12-bit bias map value to ~2.5 bits, packing 10 rows of pixels into each dataTeBiasMap packet. Compression efficiency is optimized by choosing a stored Huffman table whose contents best match the distribution of bias values. Currently, front-illuminated CCDs use a biasCompressionSlotIndex of 1 and back-illuminated CCDs use index 3. In format 2, it takes ~112 seconds to write each map to telemetry; in format 1, ~1.5 hours.
After the bias maps have been created and written to the telemetry stream, the BEP will stop the video board sequencers, prepare the FEPs for event processing, and re-start the sequencers. Each FEP will send event candidates to the BEP, which will filter out unwanted candidates, and write the remaining data into a series of data packets. The FEPs will discard the first two exposures, so the first exposure records will appear about 10 seconds after data processing starts (3.2 seconds-per-frame * 2 ignore frames + 1 exposure frame). Every 3.2 seconds, each FEP will produce zero or more dataTeVeryFaint event packets followed by 1 exposureTeFaint exposure packet. The event and exposure packets from the various FEPs will be interleaved in time. If the event rate climbs such that one or more of the FEPs gets back-logged, their packets may be sent later than those for FEPs that are not back-logged. NOTE: If the system’s buffers fill, some FEPs may drop exposures, whereas others might not.
The following examples show a pair of packets from CCD_S3 in ltlm format, one containing events and the other describing the exposure in which they were found. (psci with an -s flag outputs a similar format, but suppresses the details of the event pulse heights; with an -l flag, psci writes the event list from each CCD into a separate file in “erv5” format.)
dataTeVeryFaint[n] = { | ||
... | ||
formatTag | = 46 | # TTAG_SCI_TE_DAT_FAINT_5x5 |
sequenceNumber | = n | # Packet sequence number |
ccdId | = 7 | # CCD_S3 |
fepId | = 1 | # FEP_1 |
dataPacketNumber | = n | # Index of packet for this exposure |
events[0] = { | # First event | |
ccdRow | = n | # Event row |
ccdColumn | = n | # Event column |
pulseHeights | = n n n n n n n n n | # 5x5 Pixel values |
= n n n n n n n n n | ||
= n n n n n n n | ||
} | ||
events[1] = { | # Second event | |
... | ||
} | ||
... | ||
} | ||
exposureTeFaint[n] = { | ||
... | ||
formatTag | = 47 | # TTAG_SCI_TE_REC_FAINT_5x5 |
sequenceNumber | = n | |
runStartTime | = 0x61415ad2 | # BEP clock at run start |
parameterBlockId | = 0x0046c034 | # ID of the parameter block |
windowBlockId | = 0xffffffff | # ID of the window block (none) |
biasStartTime | = 0x59754e96 | # BEP clock at bias start |
biasParameterId | = 0x0046c034 | # ID of parameter block for bias |
ccdId | = 7 | # CCD_S3 |
fepId | = 1 | # FEP_1 |
fepTimestamp | = 0x00a977f9 | # BEP clock at exposure start |
exposureNumber | = n | # exposure number |
eventsSent | = n | # number of events reported |
thresholdPixels | = n | # number of thresholds in frame |
discardEventAmplitude | = n | # events removed by PHA |
discardWindow | = n | # events removed by location |
discardGrade | = n | # events removed by grade |
deltaOverclocks | = n n n n | # change in overclocks since bias map |
biasParityErrors | = n | # bias map errors in this frame |
} | ||
The PHA of an event is constructed from the inner 3x3 pulse heights by first subtracting the bias map values from the corresponding pulseHeights and then subtracting the deltaOverclocks appropriate to this ccdColumn to compensate for amplifier drift in the video board. The resulting values are then graded and those pixels with significant charge (see Appendix J.1) are summed to create the PHA.
Once the desired observation time has elapsed, the user stops the run by issuing a “Stop Science” command. (As with the other software serial commands described in this document, this command is translated by bcmd into an array of 16-bit values that will be sent to the software serial port of the active BEP.)
stop n science |
Once the FEPs have been instructed to stop, the BEP will poll the FEPs until they have finished their current exposures and drained their FEP to BEP ring buffers. In this example, the event rate doesn’t exceed the telemetry rate, and therefore, the ring buffers and telemetry buffers are fairly empty. If the last image had just started arriving at the FEPs when they were instructed to stop, the image transfer time will dominate the time to finish the run. For this example, this is about 3.2 seconds.
Once the run completes, the BEP writes “Science Report” telemetry packet. In this example, the observation was scheduled to last ~30 hours, no errors were reported, and telemetry was never saturated (i.e., no frames were dropped). The handfull of bias parity errors reported in biasErrorCount is to be expected, especially during lengthy observations. The report packet contained the following:
scienceReport { | ||
runStartTime | = 0x61415ad2 | # biasStartTime + ~2.5 minutes |
parameterBlockId | = 0x0046c034 | # See Section 5.4.1.1 |
windowBlockId | = 0xffffffff | # No window filters used |
biasStartTime | = 0x59754e96 | # BEP 100 KHz clock at bias start |
biasParameterId | = 0x0046c034 | # Same as parameterBlockId |
exposuresProduced | = 8940 | # Largest exposure number |
exposuresSent | = 53627 | # First 2 exposures are never sent |
biasErrorCount | = 25 | # Bias parity errors |
fepErrorCodes[6] | = 0 0 0 0 0 0 | # All = FEP_CMD_NOERR |
ccdErrorFlags[6] | = 0 0 0 0 0 0 | # No CCD errors reported |
deaInterfaceErrorFlag | = 0 | # No interface board errors |
terminationCode | = 1 | # SMTERM_STOPCMD (Successful termination) |
} | ||
This scenario describes a “Timed Exposure” science run using a single CCD, CCD_S3, in “Sub Array” mode, to achieve the shortest possibly static exposure time (0.4 seconds) without sacrificing efficiency. Using “Faint 3x3” sub-mode, this configuration is capable of sustaining a downlink telemetry rate of ~177 events per second (see Table 5.9). If the expected rate were less than ~70 per second, “Very Faint 5x5 sub-mode” would have been a better choice.
This section describes the parameters used in this scenario and why they were chosen. They are defined in Section 4.1.4.1. Note that it is not necessary to know whether BEP-A or BEP-B is the active BEP: the parameter blocks and command procedures will be identical.
This scenario uses the parameters of the TE_008FCB science mode which assigns a parameterBlockId of 0x008fc014 to its timed exposure parameter block. Currently, the first 5 hexadecimal digits are unique to its contents, while the remaining 3 digits reflect the revision level, especially to distinguish changes to the fep*VideoOffset levels, as described in Section 5.5.1.5, below. Some of the remaining fields in this example will be taken from an actual observation using this science mode, OBSID 25116, run on December 20, 2021.
This example uses only the CCD_S3 chip It is assigned to the first “reliable” FEP (see footnote 2 on page 218).
The remaining FEPs will not be used. The FEP selection array is configured as:
fepCcdSelect[0] = 10 | # FEP_0 unassigned |
fepCcdSelect[1] = 7 | # CCD_S3 assigned to FEP_1 |
fepCcdSelect[2] = 10 | # FEP_2 unassigned |
fepCcdSelect[3] = 10 | # FEP_3 unassigned |
fepCcdSelect[4] = 10 | # FEP_4 unassigned |
fepCcdSelect[5] = 10 | # FEP_5 unassigned |
As in Section 5.4.1.3, but using Faint 3x3 mode:
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 0 | # BEP_TE_MODE_FAINT |
As in Section 5.4.1.4, but with a 128-row sub-array spanning CCD rows 448 through 575 and a static exposure time of 0.4 seconds:
primaryExposure | = 4 |
secondaryExposure | = 0 |
dutyCycle | = 0 |
onChip2x2Summing | = 0 |
subarrayStartRow | = 448 |
subarrayRowCount | = 127 |
overclockPairsPerNode | = 8 |
outputRegisterMode | = 0 # QUAD_FULL |
ccdVideoResponse[FEP_0] | = 0 |
ccdVideoResponse[FEP_1] | = 0 |
ccdVideoResponse[FEP_2] | = 0 |
ccdVideoResponse[FEP_3] | = 0 |
ccdVideoResponse[FEP_4] | = 0 |
ccdVideoResponse[FEP_5] | = 0 |
The channel offsets are listed in Table 5.10, above. The CCD selection in Section 5.5.1.2 results in the following assignments, although these values may change in the future, as explained in Section 5.4.1.5:
Board | Item | NODE_A | NODE_B | NODE_C | NODE_D
|
None | fep0VideoOffset | 0 | 0 | 0 | 0 |
CCD_S3 | fep1VideoOffset | 79 | 79 | 79 | 77 |
None | fep2VideoOffset | 0 | 0 | 0 | 0 |
None | fep3VideoOffset | 0 | 0 | 0 | 0 |
None | fep4VideoOffset | 0 | 0 | 0 | 0 |
None | fep5VideoOffset | 0 | 0 | 0 | 0 |
The parameter selection follows the scheme outlined in Section 5.4.1.6 and in Table 4.3, where biasArg[0] and biasArg[1] are increased to take advantage of the shorter exposure times and the back-illuminated CCD_S3 is assigned a slightly smaller biasArg[3] value to account for its lower event threshold.
ignoreBadPixelMap | = 0 |
trickleBias | = 1 |
ignoreBadColumnMap | = 0 |
ignoreInitialFrames | = 800 |
recomputeBias | = 1 |
FEP |
Board |
biasAlgorithmId | [0] | [1] | [2] | [3] | [4] |
Compress |
FEP_0 | None | 0 | 0 | 0 | 0 | 0 | 0 | |
FEP_1 | CCD_S3 | FEP_BIAS_1 | 75 | 124 | 20 | 26 | 20 | 3 |
FEP_2 | None | 0 | 0 | 0 | 0 | 0 | 0 | |
FEP_3 | None | 0 | 0 | 0 | 0 | 0 | 0 | |
FEP_4 | None | 0 | 0 | 0 | 0 | 0 | 0 | |
FEP_5 | None | 0 | 0 | 0 | 0 | 0 | 0 | |
As in Section 5.4.1.7, but only assigned to one CCD:
lowerEventAmplitude | = 20 | # Standard PHA filtering |
eventAmplitudeRange | = 3250 | # |
gradeSelections | = 0xfeffffff 0xffffffff | # 256-bit array of |
0xfffffffb 0xfffff7ff | # grade code flags | |
0xffffffff 0xffffffff | # =1 to reject | |
0xffbfffff 0x7fffffff | # =0 to accept | |
windowSlotIndex | = 65535 | # No window filters |
fep0EventThreshold | = 0 0 0 0 | |
fep0SplitThreshold | = 0 0 0 0 | |
fep1EventThreshold | = 20 20 20 20 | # CCD_S3 |
fep1SplitThreshold | = 13 13 13 13 | |
fep2EventThreshold | = 0 0 0 0 | |
fep2SplitThreshold | = 0 0 0 0 | |
fep3EventThreshold | = 0 0 0 0 | |
fep3SplitThreshold | = 0 0 0 0 | |
fep4EventThreshold | = 0 0 0 0 | |
fep4SplitThreshold | = 0 0 0 0 | |
fep5EventThreshold | = 0 0 0 0 | |
fep5SplitThreshold | = 0 0 0 0 | |
This example has followed the same steps as the preceding scenario described in Sections 5.4.1 and 5.4.2, although only one CCD and one FEP3 needs to be powered up by a change command of the following form:
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 0 | # SYSSET_DEA_POWER |
itemValue | = 128 | # DEA power bit-map: 0010000000b |
} | ||
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = 2 | # FEP power bit-map: 000010b |
} | ||
} | ||
For this example, the parameter block will be loaded into Timed Exposure slot 4, by copying the output of the following bcmd command to the software serial port of the active BEP. The process by which the block is transferred to the uplink command library, transmitted to the spacecraft, and send to ACIS, is outside the context of this document.
load n te slotId { | ||
parameterBlockId | = 0x008fc014 | |
fepCcdSelect | = 10 7 10 10 10 10 | # CCD_S3 on FEP_1, only |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 0 | # BEP_TE_MODE_FAINT |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 448 | |
subarrayRowcount | = 127 | # 128 row sub-array |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL mode |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 4 | # 0.4 second static exposures |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 0 0 0 0 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 0 0 0 0 | |
fep3EventThreshold | = 0 0 0 0 | |
fep4EventThreshold | = 0 0 0 0 | |
fep5EventThreshold | = 0 0 0 0 | |
fep0SplitThreshold | = 0 0 0 0 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 0 0 0 0 | |
fep3SplitThreshold | = 0 0 0 0 | |
fep4SplitThreshold | = 0 0 0 0 | |
fep5SplitThreshold | = 0 0 0 0 | |
lowerEventAmplitude | = 20 | |
eventAmplitudeRange | = 3250 | |
gradeSelections | = 0xfeffffff 0xffffffff 0xfffffffb 0xfffff7ff \
| |
0xffffffff 0xffffffff 0xffbfffff 0x7fffffff
| ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 0 3 0 0 0 0 | |
rawCompressionSlotIndex | = 2 | |
ignoreInitialFrames | = 800 | |
biasAlgorithmId | = 0 1 0 0 0 0 | # FEP_BIAS_1 algorithm |
biasArg0 | = 0 75 0 0 0 0 | |
biasArg1 | = 0 124 0 0 0 0 | |
biasArg2 | = 0 26 0 0 0 0 | |
biasArg4 | = 0 20 0 0 0 0 | |
fep0VideoOffset | = 0 0 0 0 | |
fep1VideoOffset | = 79 79 79 77 | |
fep2VideoOffset | = 0 0 0 0 | |
fep3VideoOffset | = 0 0 0 0 | |
fep4VideoOffset | = 0 0 0 0 | |
fep5VideoOffset | = 0 0 0 0 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
} | ||
The user starts the run by issuing a “Start Science” command, specifying slot 4 (see Section 4.1.5), which means that the binary output of the following bcmd command is sent to the active BEP in the same manner as the parameter block described in Section 5.5.3, above.
start n te 4 |
The choice of bias parameters in Section 5.5.1.6 will result in a bias_init time of 6.8 minutes and a total bias_time of 9.5 minutes (see Section 5.4.7). Compared to the full-frame scenario (Section 5.4.8), the sub-array bias map will be compressed into no more than ~13 packets and written to telemetry in format 2 in ~15 seconds.
After creating and telemetering the CCD_S3 bias map, the BEP will write events into dataTeFaint packets, interleaved with exposureTeFaint packets, as shown in the following example:
dataTeFaint[n] = { | ||
... | ||
formatTag | = 21 | # TTAG_SCI_TE_DAT_FAINT |
sequenceNumber | = n | # Packet sequence number |
ccdId | = 7 | # CCD_S3 |
fepId | = 1 | # FEP_1 |
dataPacketNumber | = n | # Index of packet for this exposure |
events[0] = { | # First event of this exposure | |
ccdRow | = n | # Event row |
ccdColumn | = n | # Event column |
pulseHeights | = n n n n n n n n n
| |
} | ||
events[1] = { | # Second event of this exposure | |
... | ||
} | ||
... | ||
} | ||
exposureTeFaint[n] = { | ||
... | ||
formatTag | = 20 | # TTAG_SCI_TE_REC_FAINT |
sequenceNumber | = n | |
runStartTime | = 0x9b0b852d | # BEP clock at run start |
parameterBlockId | = 0x008fc014 | # ID of the parameter block |
windowBlockId | = 0xffffffff | # ID of the window block (none) |
biasStartTime | = 0x9803fe93 | # BEP clock at bias start |
biasParameterId | = 0x008fc014 | # ID of parameter block for bias |
ccdId | = 7 | # CCD_S3 |
fepId | = 1 | # FEP_1 |
fepTimestamp | = 0x006255d5 | # BEP clock at exposure start |
exposureNumber | = n | # Exposure number |
eventsSent | = n | # Number of events reported |
thresholdPixels | = n | # Number of thresholds in frame |
discardEventAmplitude | = n | # Events removed by PHA |
discardWindow | = 0 | # Events removed by location |
discardGrade | = n | # Events removed by grade |
deltaOverclocks | = n n n n | # Change in overclocks since bias map |
biasParityErrors | = n | # Bias map errors in this frame |
} | ||
The PHA of an event is constructed by first subtracting the bias values in the previously down-loaded bias map from the corresponding pulseHeights and then subtracting the deltaOverclocks appropriate to this pixel’s quadrant to compensate for amplifier drift in the video board. The resulting values are then graded and those pixels with significant charge (see Appendix J.1) are summed to create the PHA.
Once the desired observation time has elapsed, the user stops the run by issuing a “Stop Science” command. In the current scenario we’re assuming that the event rate doesn’t exceed telemetry capacity so the ring- and telemetry buffers will be nearly empty. If the last image had just started arriving at the FEP when it was instructed to stop, the image transfer time will dominate the time to finish the run. For this example, this is about 0.4 seconds (see Sections 5.4.11 and 5.4.12 for details):
stop n science |
Once the run completes, the BEP writes a “Science Report” telemetry packet. In this example, the observation was scheduled to last ~10 ksec, no errors were reported, and telemetry was never saturated (i.e., no frames were dropped). A few bias parity errors reported in biasErrorCount are to be expected, especially during lengthy observations and times of high background radiation. The report packet in the chosen example contained the following:
scienceReport { | ||
runStartTime | = 0x9b0b852d | # biasStartTime + ~2.5 minutes |
parameterBlockId | = 0x0046c034 | # See Section 5.4.1.1 |
windowBlockId | = 0xffffffff | # No window filters used |
biasStartTime | = 0x9803fe93 | # BEP 100 KHz clock at bias start |
biasParameterId | = 0x0046c034 | # Same as parameterBlockId |
exposuresProduced | = 22835 | # Largest exposure number |
exposuresSent | = 22833 | # First 2 exposures are never sent |
biasErrorCount | = 0 | # Bias parity errors |
fepErrorCodes[6] | = 0 0 0 0 0 0 | # All = FEP_CMD_NOERR |
ccdErrorFlags[6] | = 1 0 1 1 1 1 | # No CCD_S3 errors reported |
deaInterfaceErrorFlag | = 0 | # No interface board errors |
terminationCode | = 1 | # SMTERM_STOPCMD (Successful termination) |
} | ||
This scenario describes a “Continuous Clocking” science run using the six spectroscopy CCDs, viz., CCD_S0, CCD_S1, CCD_S2, CCD_S3, CCD_S4 and CCD_S5. “Graded 3x3” sub-mode will be chosen in order to reduce telemetry usage for high event rates (see Table 5.9), e.g., when observing very bright targets at high time resolution.
This section describes the continuous clocking parameter block fields and why the particular values were chosen. The fields themselves are defined in Section 4.1.4.3. Note that it is not necessary to know whether BEP-A or BEP-B is the active BEP: the parameter blocks and command procedures will be identical.
This scenario uses the parameters of the CC_0011AB science mode in the ACIS command archive, which assigns a continuous clocking parameterBlockId of 0x0011a024. The following example uses values from an actual 20 ksec observation, OBSID 22410 on June 13, 2021, in which there were no reported errors and telemetry never saturated.
All 6 spectroscopy CCDs are used, of which CCD_S1 and CCD_S3 are back-side CCDs. CCD_S3 is assigned to the first “reliable” FEP (see footnote 2 on page 218) and CCD_S1 for the second. The FEP selection array is configured as:
fepCcdSelect[0] = 4 | # CCD_S0 assigned to FEP_0 |
fepCcdSelect[1] = 7 | # CCD_S3 assigned to FEP_1 |
fepCcdSelect[2] = 5 | # CCD_S1 assigned to FEP_2 |
fepCcdSelect[3] = 6 | # CCD_S2 assigned to FEP_3 |
fepCcdSelect[4] = 8 | # CCD_S4 assigned to FEP_4 |
fepCcdSelect[5] = 9 | # CCD_S5 assigned to FEP_5 |
ACIS flight software as launched provided only “Faint 1x3” mode for continuous clocking observations, but a cc3x3 software patch has been developed in order to process “Faint 3x3” and “Graded 3x3” events in continuous clocking mode but with the improved energy resolution previously available only in timed exposure mode. This example therefore assumes that the patch has been loaded and that the BEP has been subsequently warm-booted (see Sections 3.7.1 and 3.1.3.3).
Assuming that the target is expected to produce no more than about 375 events per second (including background events that “sneak” through the filters) across all CCDs (see Table 5.9), we shall use “Graded 3x3” mode.
fepMode | = 2 | # FEP_CC_MODE_EV3x3 |
bepPackingMode | = 1 | # BEP_CC_MODE_GRADED |
For this example, we suppress on-chip row or column summing, use 16 overclocks per output node, and normal video gain. We also assume that all of the video chains are working and are to be used. This is achieved as follows:
rowSum | = 0 |
columnSum | = 0 |
overclockPairsPerNode | = 8 |
outputRegisterMode | = 0 # QUAD_FULL |
ccdVideoResponse[FEP_0] | = 0 |
ccdVideoResponse[FEP_1] | = 0 |
ccdVideoResponse[FEP_2] | = 0 |
ccdVideoResponse[FEP_3] | = 0 |
ccdVideoResponse[FEP_4] | = 0 |
ccdVideoResponse[FEP_5] | = 0 |
The video board offset values are the same as used in timed exposure mode (see Table 5.10). The current CCD selection will result in the following assignments:
Board | Item | NODE_A | NODE_B | NODE_C | NODE_D
|
CCD_S0 | fep0VideoOffset | 73 | 75 | 73 | 83 |
CCD_S3 | fep1VideoOffset | 79 | 79 | 79 | 77 |
CCD_S1 | fep2VideoOffset | 79 | 94 | 76 | 95 |
CCD_S2 | fep3VideoOffset | 90 | 82 | 79 | 94 |
CCD_S4 | fep4VideoOffset | 72 | 72 | 78 | 71 |
CCD_S5 | fep5VideoOffset | 81 | 87 | 80 | 82 |
In continuous clocking mode, the FEPs will re-compute their 1-dimensional bias maps from pairs of 512-pixel rows, and the BEP will then write the maps to telemetry as uncompressed 1024-element arrays. For the back-illuminated CCDs, the FEP will be commanded to use the “Mean” algorithm, assigning the weighted mean of the pixel values in each column of the 1024-row array to that element of the bias map. For the front-illuminated CCDs, the “Fractile” algorithm will be used, sorting in ascending order the pixel values in each column and assigning the 384th to that element in the bias map. (See Table 4.6 for details.)
In order to allow the video board temperatures to settle, and to effectively flush initial charge from the CCDs, the FEP will be commanded ignore the first 100 exposures prior to starting the bias computation. The current bad continuous-clocking column lists will be applied to the bias maps once the latter have been computed. This is achieved by the following parameter selections:
ignoreBadColumnMap | = 0 |
trickleBias | = 1 |
recomputeBias | = 1 |
ignoreInitialFrames | = 100 |
Board | biasAlgorithmId | biasRejection
|
CCD_S0 | 1 | 384 |
CCD_S3 | 0 | 5 |
CCD_S1 | 0 | 5 |
CCD_S2 | 1 | 384 |
CCD_S4 | 1 | 384 |
CCD_S5 | 1 | 384 |
The FEPs will select a candidate event center if the center pixel values are 20 ADU above their bias levels for the back-side CCD (CCD_S1 or CCD_S3), and 38 ADU for the remaining front-side CCDs. The event’s split threshold is 13 ADU above the pixel bias values for back-illuminated CCDs and 16 ADU for front-illuminated ones. In this example, the system will only accept events whose grade codes match those in the 9th element of the array of grade codes (gradeSelections[0..15]) internal to the cc3x3 patch. This particular filter will command the BEP to reject ACIS flight grades of 24, 107, 127, 214, 223, 248, 251, 254, and 255. Refer to Appendix J.3 and Table J.3 for details. No window filters and only the standard pulse height filters will be applied. This leads to the following event selection parameters:
lowerEventAmplitude | = 20 | # Standard PHA filtering |
eventAmplitudeRange | = 3250 | # |
gradeSelections | = 8 | # Index of grade array in the cc3x3 patch |
windowSlotIndex | = 65535 | # No windows |
fep0EventThreshold | = 38 38 38 38 | # CCD_S0 |
fep0SplitThreshold | = 16 16 16 16 | # |
fep1EventThreshold | = 20 20 20 20 | # CCD_S3 |
fep1SplitThreshold | = 13 13 13 13 | # |
fep2EventThreshold | = 20 20 20 20 | # CCD_S1 |
fep2SplitThreshold | = 13 13 13 13 | # |
fep3EventThreshold | = 38 38 38 38 | # CCD_S2 |
fep3SplitThreshold | = 16 16 16 16 | # |
fep4EventThreshold | = 38 38 38 38 | # CCD_S4 |
fep4SplitThreshold | = 16 16 16 16 | # |
fep5EventThreshold | = 38 38 38 38 | # CCD_S5 |
fep5SplitThreshold | = 16 16 16 16 | # |
This scenario assumes that the PSMC is supplying power to the DEA and to both sides of the DPA, but that the power states of the individual FEPs and video boards are unknown to the ground scheduling algorithm. It also assumes that the hardware and software are operating properly, that the cc3x3 patch has been loaded,4 that the BEP has been successfully warm-booted, that the system configuration parameters (other than the video board power) are in a stable, known state, and that the focal plane temperature is at its normal operating temperature (i.e., ~–120C).
The user first issues a command that powers off video boards not used for the run, and powers on the boards required for the run. In this example, CCDs S0 through S5 are to be used. This is achieved with the following “Change System Configuration” command (see Section 3.3.3):
change n systemConfig { | # CMDOP_CHANGE_SYS_ENTRY | |
entries = { | ||
itemId | = 0 | # SYSSET_DEA_POWER |
itemValue | = 1008 | # DEA power bit-map: 1111110000b |
} | ||
entries = { | ||
itemId | = 1 | # SYSSET_FEP_POWER |
itemValue | = 63 | # FEP power bit-map: 111111b |
} | ||
} | ||
If all of the video board power states were changed, the first phase of the command would take ~9 seconds to execute; if all of the video boards were already in their desired states, it will take only 1 second. Each FEP takes less than 1 second to power down, but ~9 seconds to power up, since the BEP must reload its software. This is in addition to the extra FEP setup time required by the cc3x3 patch, described in Section 5.6.6, below. When executed from a stored command sequence, the change command is followed by a 63 second delay.
The parameter block will be loaded into continuous clocking slot 4, by copying the output of the following bcmd command to the software serial port of the active BEP. The process by which the block is transferred to the uplink command library, transmitted to the spacecraft, and send to ACIS, is outside the context of this document.
load n cc slotId { | ||
parameterBlockId | = 0x0011a024 | |
fepCcdSelect | = 4 7 5 6 8 9 | # CCD_S0 on FEP_0, S3 on FEP_1, etc. |
fepMode | = 2 | # FEP_CC_MODE_EV3x3 |
bepPackingMode | = 1 | # BEP_CC_MODE_GRADED |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 0 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL mode |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 38 38 38 38 | |
fep1EventThreshold | = 20 20 20 20 | # BI CCD |
fep2EventThreshold | = 20 20 20 20 | # BI CCD |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 16 16 16 16 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 16 16 16 16 | |
fep4SplitThreshold | = 16 16 16 16 | |
fep5SplitThreshold | = 16 16 16 16 | |
lowerEventAmplitude | = 20 | |
eventAmplitudeRange | = 3250 | |
gradeSelections | = 8 | |
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 0 0 1 1 1 | # =0 for BI CCDs, =1 for FIs |
biasRejection | = 384 5 5 384 384 384 | |
fep0VideoOffset | = 73 75 73 83 | |
fep1VideoOffset | = 79 79 79 77 | |
fep2VideoOffset | = 79 94 76 95 | |
fep3VideoOffset | = 90 82 79 94 | |
fep4VideoOffset | = 72 72 78 71 | |
fep5VideoOffset | = 81 87 80 82 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
} | ||
Since no window filters are being used, no 1-dimensional window parameter block is needed for the run. Upon receipt of the load command, the continuous clocking parameter block will be copied into BEP I-cache in less than 1 second (see Section 4.1.4.1). ACIS is now ready to start the run.
The user starts the run using a “Start Science” command, specifying continuous clocking slot 4 (see Section 4.1.5):
start n cc 4 |
Continuous clocking runs that use the 3x3 features of the cc3x3 patch must reconfigure the FEPs before starting the video boards. The BEP reloads each FEP’s software and then applies patches to their I-cache memories. Given that 6 CCDs are being configured and the PRAM/SRAM load is a standard load, the system will take on the order of 3 minutes to configure the system, acquire and dump the DEA housekeeping information, and start clocking the CCDs:
setup_time | = 6*11 seconds to reload FEP software |
+ 6*1 seconds to patch FEP I-cache | |
+ 30 seconds to load video registers | |
+ 1 minute to acquire and dump DEA housekeeping | |
+ 11 seconds to flush CCD charge | |
+ 1 second of additional overhead | |
= ~2.9 minutes | |
Once the system is configured, the FEPs will be commanded to re-compute their bias maps. Unlike timed exposure mode, the time required to create and downlink continuous clocking bias maps is relatively short. The process will take less than 3 minutes:
bias_time | = (100 ignored frames + 2 bias frames) * 1.4592 seconds/frame |
+ 10 seconds for a “mean” or “fractile” computation | |
= ~159 seconds | |
The BEP writes each FEP’s continuous clocking bias map to telemetry in a single, uncompressed 1564-byte dataCcBiasMap packet. In telemetry format 2, all 6 maps are written to telemetry in 3.1 seconds; in format 1, this takes ~2.5 minutes.
dataCcBiasMap[n] = { | ||
biasStartTime | = 0x7a3330c9 | # 100KHz time-stamp at start of bias |
biasParameterId | = 0011a024 | # Parameter Block Id used for bias |
ccdId | = 0 | # CCD that produced the map CCD_S2 |
fepId | = 0 | # FEP used to produce the map FEP_0 |
initialOverclocks[4] | = n n n n | # DC offsets of bias values, by quadrant |
data | = n n n ... | # 1024 values in 384 32-bit words |
} | ||
After the bias maps have been computed, the instrument will stop the video board sequencers, prepare the FEPs for data processing, and re-start the sequencers. The FEPs will automatically discard the first two 512-row exposure frames, and then start data processing. Each FEP will send event candidates to the BEP, which will examine them, filter out unwanted candidates, and, for each exposure, write the remaining event data to telemetry. The first exposure records will appear ~7 seconds after data processing starts (1.4592 seconds/frame * 2 ignore frames + 2 exposure frames). Every 1.4592 seconds, each FEP will write zero or more dataTeGraded event packets followed by a exposureCcFaint exposure record. In Continuous Clocking mode, the CPU in each FEP processes a 512-row frame while the next 512 rows are being received by that FEP’s firmware. The event and exposure packets from the various FEPs will be interleaved in time. If the event rate climbs such that one or more of the FEPs gets backlogged, their data packets and exposure records may be sent later than those for FEPs that are not backlogged. If the system’s buffers fill, some FEPs may drop exposures, whereas others might not.
The following example shows a pair of packets from CCD_S0 in ltlm format, one containing graded events and the other describing the exposure in which they were found. psci with an -s flag outputs a similar format; with an -l flag, psci writes the event list from each CCD into a separate file in “erv” format. Note that the PHA values (eventAmplitude) are restricted to the range set by the lowerEventAmplitude and eventAmplitudeRange parameters (see Section 5.6.1.7).
dataTeGraded[n] = { | # Not dataCcGraded. See footnote 5 | |
... | ||
formatTag | = 53 | # TTAG_SCI_CC_DAT_GRADED3x3 |
sequenceNumber | = n | # Packet sequence number |
ccdId | = 4 | # CCD_S0 |
fepId | = 0 | # FEP_0 |
dataPacketNumber | = n | # Index of packet for this exposure |
events[0] = { | # First event | |
ccdRow | = n | # Event transfer row (0..511) |
ccdColumn | = n | # Event column (1..1022) |
eventAmplitude | = n | # Event PHA (20..3270) |
gradeCode | = n | # Event grade (0..255) |
cornerMean | = n | # Mean of the bias-subtracted corner pixels |
} | ||
events[1] = { | # Second event | |
... | ||
} | ||
... | ||
} | ||
exposureCcFaint[n] = { | ||
... | ||
formatTag | = 54 | # TTAG_SCI_CC_REC_GRADED3x3 |
sequenceNumber | = n | |
runStartTime | = 0x7b494131 | # BEP 100 KHz clock at run start |
parameterBlockId | = 0x0001c024 | # ID of the parameter block |
windowBlockId | = 0xffffffff | # ID of the window block (none) |
biasStartTime | = 0x7a3330c9 | # BEP clock at bias start |
biasParameterId | = 0x0001c024 | # ID of parameter block for bias |
ccdId | = 4 | # CCD_S0 |
fepId | = 0 | # FEP_0 |
fepTimestamp | = 0x001662cb | # BEP clock at exposure start |
exposureNumber | = n | # exposure number |
eventsSent | = n | # number of events reported |
thresholdPixels | = n | # number of thresholds in frame |
discardEventAmplitude | = n | # events removed by PHA |
discardWindow | = 0 | # events removed by location |
discardGrade | = n | # events removed by grade |
deltaOverclocks | = n n n n | # change in overclocks since bias map |
biasParityErrors | = n | # bias map errors in this transfer frame |
} | ||
The eventAmplitude (PHA) of an event is computed within the BEP by first subtracting the values in the bias map from the corresponding 3x3 frame pixels and then subtracting the delta-overclocks appropriate to this pixel’s quadrant to compensate for amplifier drift in the video board. The resulting values are then graded and those pixels with significant charge (see Appendix J.3) are summed to create the PHA.
Once the desired observation time has elapsed, the user stops the run by issuing a “Stop Science” command:
stop n science |
Once the FEPs have been instructed to stop, the BEP will poll the FEPs until they’ve finished their current exposures and drained their FEP-to-BEP ring-buffers. In this example, the event rate doesn’t exceed the telemetry rate so the ring-buffers and telemetry buffers will be relatively empty. If the last 512-row exposure had just started arriving at the FEPs when they were instructed to stop, the image transfer time will dominate the time to finish the run. For this example, this is about 1.5 seconds.
Once the run completes, the BEP will produce a scienceReport telemetry packet. In this scenario, based on OBSID 22410, it will look as follows:
scienceReport { | ||
synch | = 0x736f4166 | # Synchronization code |
telemetryLength | = 12 | # Packet length in 32-bit words |
formatTag | = 15 | # TTAG_SCI_REPORT |
sequenceNumber | = 57662 | # Packet counter |
runStartTime | = 0x7b494131 | # biasStartTime + ~2 minutes |
parameterBlockId | = 0x0011a024 | # See Section 5.6.1.1 |
windowBlockId | = 0xffffffff | # No window filters defined |
biasStartTime | = 0x7a3330c9 | # BEP 100 KHz clock at bias start |
biasParameterId | = 0x0011a024 | # same as parameterBlockId |
exposuresProduced | = 13765 | # Largest frame number |
exposuresSent | = 82578 | # First 2 exposure frames are never sent |
biasErrorCount | = 0 | # Number of bias parity errors |
fepErrorCodes[6] | = 0 0 0 0 0 0 | # All are FEP_CMD_NOERR |
ccdErrorFlags[6] | = 0 0 0 0 0 0 | # No CCD errors reported |
deaInterfaceErrorFlag | = 0 | # No interface board errors |
terminationCode | = 1 | # SMTERM_STOPCMD |
} | ||
While most calibration tasks can be performed by running ACIS in standard science modes, a number of additional modes have been developed for special purposes. Two modes, Raw and Raw Histogram, are included in the baseline software release recorded on the BEP EEPROMs; another, Event Histogram mode, was added via the evhist patch, and can only be run when this patch is included in the current load (see Tables F.1 and E.2).
This mode copies selected regions of the FEPs’ Image Buffers to telemetry. Since each FEP receives pixels from its video board at a rate of 4 Mbaud and the BEP’s output telemetry is restricted to 24 Kbaud, either the physical region of the CCD must be severely restricted, or most exposure frames must be ignored. The flight software is designed to make this choice automatic, i.e., the user specifies in the parameter block the number of CCDs to run, the number of rows to sample (timed exposure mode only), and the spatial window filtering to apply; ACIS does the rest: when the BEP’s output buffers become full, the FEPs are forced to drop exposures.
The parameter block fields used for raw mode runs are similar to the other modes in Sections 4.1.4.1 (Timed Exposure mode) and 4.1.4.3 (Continuous Clocking mode), and with the corresponding window filter blocks in Sections 4.1.4.2 (two-dimensional for Timed Exposures) and 4.1.4.4 (one-dimensional for Continuous Clocking). Fields associated with bias maps and amplitude filtering are ignored. Raw mode window filtering is explained in depth in Appendix K.2 (timed exposures) and K.4 (continuous clocking).
dataTeRaw[n] = { | ||
... | ||
formatTag | = 17 | # TTAG_SCI_TE_DAT_RAW |
sequenceNumber | = 44098 | # Packet sequence number |
ccdId | = 8 | # CCD_S4 |
fepId | = 3 | # FEP_3 |
dataPacketNumber | = 0 | # First data packet in frame |
ccdRow | = 0 | # First CCD row in this packet |
compressionTableSlotIndex | = 0 | # Compression index |
compressionTableIdentifier | = 0xffffffff | # ID of compression index |
pixelCount | = n | # Number of pixels to follow |
data | = n n ... n | # Compressed pixel array |
} | ||
... | # more dataTeRaw packets | |
exposureTeRaw[n] = { | ||
... | ||
formatTag | = 16 | # TTAG_SCI_TE_REC_RAW |
sequenceNumber | = 47086 | # Packet sequence number |
runStartTime | = 0x6ee2f23c | # BEP time at start of run |
parameterBlockId | = 0x000b7024 | # ID of parmeter block |
windowBlockId | = 0xffffffff | # ID of window block (none) |
ccdId | = 8 | # CCD_S4 |
fepId | = 3 | # FEP_3 |
fepTimestamp | = 0x00f28fec | # BEP time at exposure start |
exposureNumber | = 2 | # Exposure number |
pixelCount | = 1114112 | # Number of pixels reported |
} | ||
Each dataTeRaw packet contains one or more complete rows of pixels+overclocks, compressed by the chosen compressionTableSlotIndex. The pixels are written in ascending column order. The overclocks are in ascending node order and, within each node, in ascending sample time, so when quadMode is 0 (FULL) or 1 (DIAG), there will be 4 sets of overclocks, but if quadMode is 2 (AC) or 3 (BD), only two sets will be written. Since some rows may compress better than others, some packets may contain more rows than others, but rows will never be split between packets. When processed through psci with the -l flag, each raw image will be written to disk in 2-dimensional FITS format with the overclocks appended to each row, as described in Section 6.2.3. In sub-frame mode, or if window filters were applied, the FITS images will still contain 1024 columns of pixels and either 1024 rows (timed exposure mode) or 512 rows (continuous clocking mode), with excluded pixels set to zero. The overclocks will be appended to each column in the same order as in the original packets.
In this Timed Exposure mode, a histogram is constructed of the raw pixel values from each quadrant of each selected CCD. No bias subtraction is performed; in fact, the FEPs’ thresholding firmware is disabled for the duration of the run, so this mode is intended to be used for debugging purposes only. Since there are 4096 possible values for each 12-bit pixel, the histogram for a quadrant will contain 4096 32-bit values. There is insufficient storage within the BEP to save this data, so it is accumulated directly within output packets that have been allocated in the telemetry buffers and only released when the summation period has ended. Each quadrant yields a total of 9 dataTeHist packets, followed by a single exposureTeHistogram packet, but buffer size limits the number of CCDs that can be histogrammed simultaneously to 5. The number of exposures to accumulate is defined in the histogramCount field of the parameter block. There is no guarantee that these exposures are contiguous—some may be dropped if the output buffers become full. After each quadrant’s histogram completes, the packets are released for output.
When quadMode is 0 (FULL) or 1 (DIAG), 4 sets of dataTeHist and exposureTeHistogram packets will be written. If quadMode is 2 (AC) or 3 (BD), only two sets will appear.
Although raw histograms were quite useful prior to launch, they are less so in orbit, principally because of the presence of excess charge in the CCDs caused by ionizing radiation, which can also lead to the corruption of data packet in the BEP’s output buffer memory, which is upset-tolerant but not radiation-hard. The resulting histograms are not particularly useful either for calibration or diagnostic purposes, and this mode has not been used on orbit.
The following example is taken from Instrument Thermal Vacuum tests at Ball Bros. It includes erroneous overclock variances, since corrected by the histogramvar patch.
dataTeHist[n] = { | ||
... | ||
formatTag | = 19 | # TTAG_SCI_TE_DAT_HIST |
sequenceNumber | = 2466 | # Packet sequence number |
ccdId | = 9 | # CCD_S4 |
fepId | = 5 | # FEP_5 |
dataPacketNumber | = 0 | # First packet in this node |
outputNodeId | = 0 | # Node (0..3) of CCD |
startingBin | = 0 | # First histogram bin |
binValues | = 0 0 0 0 0 | |
...
| ||
8 237 1441 7214 26310 | ||
71407 142726 214748 244906 224756
| ||
168146 107229 56221 26120 10965 | ||
4225 1397 511 219 101
| ||
69 53 40 49 34 | ||
23 31 27 27 18
| ||
22 23 14 16 18 | ||
...
| ||
} | ||
... | # more dataTeHist packets | |
exposureTeHistogram[n] = { | ||
... | ||
formatTag | = 18 | # TTAG_SCI_TE_REC_HIST |
sequenceNumber | = 2480 | # Packet sequence number |
runStartTime | = 0x0000b014 | # BEP time at start of run |
parameterBlockId | = 0x8fffffff | # ID of parameter block |
startExposureNumber | = 3 | # Starting exposure number |
endExposureNumber | = 7 | # Ending exposure number |
exposureCount | = 5 | # Number of exposures summed |
outputNodeId | = 0 | # CCD output node (0..3) |
ccdId | = 9 | # CCD_S4 |
fepId | = 5 | # FEP_5 |
fepTimestamp | = 0x010f84dc | # BEP time at start of exposure |
minimumOverclock | = 940 | # Miniumum overclock value |
maximumOverclock | = 958 | # Maximum overclock value |
meanOverclock | = 948 | # Mean ovrclock value |
varianceOverclockLow | = 3 | # Variance of lowest row overclocks |
varianceOverclockHigh | = 0 | # Variance of highest row overclocks |
} | ||
Event Histogram mode, also restricted to Timed Exposures, combines the methodology of Raw Histogram mode with the event detection features of Graded mode. Instead of making histograms of raw pixel values 0–4095, the FEPs are commanded to search for event candidates, as in Faint 3x3 mode, and the BEP applies event, grade, and window filters before creating the PHA of the event, and then histograms the PHAs in the range 0–4095 into dataTeEvHist packets. Events with PHA < 0 are included in bin 0 and those with PHS > 4095 are included in bin 4095. The number of out-of-range events for each histogram interval is reported in the errorCount field of the exposureTeEvHistogram packet.
Using the FEPs and BEP to detect, grade and filter events instead of raw pixels resolves most of the limitations of raw histogram mode, but there remains the problem of corruption in the output buffers. This is solved by including an error correcting code within each element of the histogram array. The 5 most significant bits of each word contain a 5-bit Hamming code (see “Error Correcting Codes” in Table 1.1) associated with the remaining 26-bit integer. Event histogram mode is particularly suitable for reporting the spectrum of the ACIS calibration source in telemetry format 1, when the HRC is taking data in the focal plane and ACIS is assigned a telemetry bandwidth of 484 bits per second.
The formats of the dataTeEvHist and exposureTeEvHistogram are identical to dataTeHist and exposureTeHistogram described in Section 5.7.2 above, except that the values of minimumOverclock, maximumOverclock, meanOverclock, and varianceOverclocklow are set to zero and varianceOverclockHigh is renamed errorCount and contains the cumulative count of bit errors that have been corrected in this histogram packet. Remaining errors in binValues are corrected and the fields are translated to integers in the output from ltlm with the -v flag and from psci with the -l flag.
As in Raw Histogram mode, when quadMode is 0 (FULL) or 1 (DIAG), 4 sets of dataTeEvHist and exposureTeEvHistogram packets will be written. If quadMode is 2 (AC) or 3 (BD), only two sets will appear.
ACIS was designed with the intention of baking out the CCDs in the focal plane, along with their optical blocking filters, in order to evaporate any contamination that might condense on them. This section describes the procedures that were developed for periodic bake outs. They were thoroughly tested on the flight instrument prior to launch, and executed once, shortly after launch, but before the ACIS door was opened. When the CCDs were subsequently damaged, it was determined, both from data received from the flight unit and from extensive laboratory simulation, that heating the CCDs to high temperatures would further increase the damage and no bake-out has since been attempted. Nevertheless, if some thermal adjustment of the ACIS focal plane or detector housing is to be attempted, this Section might serve as a guide to how to do it.
Warning: This section lists many “Expected Values” for ACIS thermal and electrical sensors; these values were appropriate for the original bake-out scenarios in pre-launch testing and before the on-orbit damage. Any subsequent thermal procedures will most probably anticipate very different values, and the external environment, e.g., bus voltage, spacecraft orientation, etc., may also be important. Caveat usor.
Since contamination, especially volatile contamination, tends strongly to move from warm surfaces to cooler surfaces (and stay stuck there until forced by thermal considerations to move), we try in this process to shift any focal-plane contamination first to the walls of the detector housing, and then out the detector housing vent ports to the spacecraft nominally room temperature environment. To accomplish this, we first warm the focal plane to a temperature at least 10C above the temperature of the detector housing (say -50C in a nominal case) before commanding the detector housing to start heating. Since the rate of temperature rise of the relatively massive detector housing is much slower than that of the focal plane assembly, one can simply command the focal plane to 35C, then command the detector housing heater on as soon as the focal plane passes it.
Cooling the instrument down after bake-out should acknowledge the same constraints. With the focal plane still held at its bake-out temperature, allow the detector housing to cool as far as it will go, then lower the focal plane in stages, staying above the detector housing temperature (thus hope-fully “freezing” any residual contamination to the detector housing walls), until the detector housing has reached its operational -60C set point. Then, finally, turn off the focal plane bake-out heater and allow the focal plane to cool to the normal -120C operating temperature.
Check that all CCDs are powered off
To limit the current drawn from the PSMC, it is first necessary to make sure that all 10 video boards are powered off.
dump n systemConfig |
and inspect the output for
bepDumpSysConfig[n] = { | |
... | |
sysConfigBlock = { | # — Power Settings — |
0, | # Dea Power |
63, | # Fep Power |
... | |
} | |
} | |
where the “0” indicates that all video boards are powered down. In this example, the bake-out heaters will use the “B” side of the PSMC power supply, on the assumption that the “A” side is powering the DEA video boards.
Check external unit temperatures
Channel | Description | Expected Value | Comments
|
1CBAT | Camera Body Temperature A | -60C |
|
1CBBT | Camera Body Temperature B | -60C |
|
1CRAT | Cold Radiator Temperature A | -130C |
Depends
on
FP
temperature |
1CRBT | Cold Radiator Temperature B | -130C |
|
1WRAT | Warm Radiator Temperature A | -90C |
|
1WRBT | Warm Radiator Temperature B | -90C |
|
Determine the Focal Plane temperature
load n dea 4 { | ||
queries = { | ||
ccdId | = 10 | |
queryId | = 16 | # or 15 for interface board 12 |
} | ||
} | ||
start n dea 4 | ||
and examine the reply:
deaHousekeepingData[n] = { | ||
... | ||
entries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | |
value | = adc | |
} | ||
} | ||
The conversion from Focal Plane Temperature ADC values to degrees Celsius (C) is given in Section 3.4.6.4. The temperature should lie between -110C and -120C.
Verify the DEA-A power consumption
Channel | Description | Expected Value | Comments
|
1DEICACU | DEA Input Current A | 0.60 – 0.78 A | Noisy reading; average it |
1DE28AVO | DEA Input Voltage A | 27.0 – 35.0 V | Varies with S/C bus voltage |
Disable Warm Booting if the BEP should time out
IP&CL syntax | bcmd syntax | Command Description
|
1WRMBTSB (v=0) | set warmboot off | Enable cold boot mode |
Enable the FP Bake-Out Heater
write n 0x80012058 { | # Write to configuration limit table | |
0x0001ffff | # Set SYSSET_CNTL_BAKE_ENABLE limit | |
} | ||
change n systemConfig { | ||
entries = { | ||
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
itemValue | = 1 | # Enable for bake-out |
} | ||
} | ||
Set the FP temperature set point and begin heating
change n systemConfig { | ||
entries = { | ||
itemId | = 3 | # SYSSET_CNTL_FOCAL_TEMP |
itemValue | = 128 | # Fine temperature value |
} | ||
entries = { | ||
itemId | = 4 | # SYSSET_CNTL_BAKE_TEMP |
itemValue | = 238 | # Coarse temperature value |
} | ||
} | ||
The relation between these itemValues and temperature is given in Section 3.3.6.
Wait for FP temperature rise
Monitor the FP temperature and the Cold Radiator (CR):
Channel | Description | Expected Value | Comments
|
1CRAT | Cold Radiator Temperature A | -110C |
Wait
for
FP
temperature
to
exceed
-60C
with
CR
increase |
1CRBT | Cold Radiator Temperature B | -110C |
|
Start the Detector Housing bake-out heater
IP&CL syntax | bcmd syntax | Command Description
|
1HBOBEN | enable dabake b | Enable detector assembly bakeout heater B |
1HBOBON | poweron dabake b | Start detector assembly bakeout heater B |
Monitor the Detector Housing heater and Camera Body temperature
Channel | Description | Expected Value | Comments
|
1DABOBON | DA Bake-out ON | On |
|
1DAHBVO | DA Heater Voltage B | 28.0 – 34.0 V | Varies with S/C bus voltage |
1DAHBCU | DA Heater Current B | ~2.0 A |
|
1CBAT | Camera Body Temperature A | ≥ -60C |
Wait
for
CB
temperature
to
rise
significantly
above
-60C |
1CBBT | Camera Body Temperature B | ≥ -60C |
|
Wait for Focal Plane and Camera Body to stabilize
Channel | Description | Expected Value | Comments
|
Focal Plane Temperature | +30C | From DEA housekeeping6 |
|
1CBAT | Camera Body Temperature A | +25 ± 2C |
|
1CBBT | Camera Body Temperature B | +25 ± 2C |
|
1CRAT | Cold Radiator Temperature A | -44C |
Temperature
should
gradually
increase |
1CRBT | Cold Radiator Temperature B | -44C |
|
1WRAT | Warm Radiator Temperature A | -32C |
|
1WRBT | Warm Radiator Temperature B | -32C |
|
The instrument has reached its bake-out condition and should be left there for sufficient time to drive off the focal plane contamination.
Turn the Detector Housing bake-out heater off
IP&CL syntax | bcmd syntax | Command Description
|
1HBOBOF | poweroff dabake b | Stop detector assembly bakeout heater B |
1HBOBDS | disable dabake b | Disable detector assembly bakeout heater B |
and monitor the camera body temperature drop:
Channel | Description | Expected Value | Comments
|
1CBAT | Camera Body Temperature A | ≤ +25C |
Wait
for
a
significant
drop
below
+25
±
2
C |
1CBBT | Camera Body Temperature B | ≤ +25C |
|
Gradually drop the Focal Plane temperature
change n systemConfig { | ||
entries = { | ||
itemId | = 3 | # SYSSET_CNTL_FOCAL_TEMP |
itemValue | = 128 | # Fine temperature value |
} | ||
entries = { | ||
itemId | = 4 | # SYSSET_CNTL_BAKE_TEMP |
itemValue | = temp | # Coarse temperature value |
} | ||
} | ||
where temp is successively lowered in 10-minute steps:
Command | Temperature | SYSSET_CNTL_BAKE_TEMP
|
WSFTPOS_20 | +20C | 229 |
WSFTPOS_10 | +10C | 220 |
WSFTPOS_00 | 0C | 212 |
WSFTNEG_10 | -10C | 203 |
WSFTNEG_20 | -20C | 194 |
WSFTNEG_30 | -30C | 185 |
WSFTNEG_40 | -40C | 177 |
Verify that the Camera Body temperature has dropped
Channel | Description | Expected Value | Comments
|
1CBAT | Camera Body Temperature A | -60C |
|
1CBBT | Camera Body Temperature B | -60C |
|
Cool down the Focal Plane and turn off and disable its Bake-out heater
change n systemConfig { | ||
entries = { | ||
itemId | = 3 | # SYSSET_CNTL_FOCAL_TEMP |
itemValue | = 128 | # Fine temperature value |
} | ||
entries = { | ||
itemId | = 4 | # SYSSET_CNTL_BAKE_TEMP |
itemValue | = 106 | # Coarse temperature value |
} | ||
entries = { | ||
itemId | = 5 | # SYSSET_CNTL_BAKE_ENABLE |
itemValue | = 0 | # Disable the bake-out heater |
} | ||
} | ||
write n 0x80012058 { | # Write to configuration limit table | |
0x0000ffff | # Clear SYSSET_CNTL_BAKE_ENABLE | |
} | ||
Warm-boot the BEP
IP&CL syntax | bcmd syntax | Command Description
|
1WRMBTSB (v=1) | set warmboot on | Set BEP to warm boot |
1RSETIRT (v=1) | halt bep | Reset the active BEP |
1RSETIRT (v=0) | run bep | Reboot the active BEP |
Examine telemetry for the startup message and first software housekeeping packet:
bepStartupMessage[n] = { | ||
... | ||
formatTag | = 8 | # TTAG_STARTUP |
bepTickCounter | = n | # expect n < 10 |
version | = v | # expect same version as before |
lastFatalBepTickCounter | = n | # BEP interrupt count at last fatal error |
lastFatalCode | = n | # See Table 3.15 (ignore if watchdogFlag is 1) |
watchdogFlag | = 1 | # =0 if watchdog timer expired |
patchValidFlag | = 1 | # =0 if patch list invalid |
configFlag | = 1 | # =0 if configuration table invalid |
parametersFlag | = 1 | # =0 if any parameter blocks invalid |
warmBootFlag | = 1 | # =1 if BEP warm booted |
} | ||
swHousekeeping[n] = { | ||
... | ||
formatTag | = 10 | # TTAG_SW_HOUSE |
startingBepTickCounter | = n | # expect n < 10 |
endingBepTickCounter | = n+640 | # expect n + 640 |
statistics[0] = { | ||
swStatisticId | = 0 | # SWSTAT_VERSION |
count | = 1 | # Number of reports |
value | = v | # expect same version as before |
} | ||
statistics[1] = { | ||
swStatisticId | = 3 | # SWSTAT_TIMERCB_INVOKE |
count | = 640 | # Number of reports (~10/second) |
value | = 0 | # Most recent reported value |
} | ||
} | ||
Check the DPA Bilevels
Channel | Description | Expected Value | Comments
|
1STAT0ST | Keep alive toggle | 0 or 1 | Changes every 64 seconds |
1STAT1ST | Science run status | 1 | No science run in process |
1STAT2ST | Watchdog status | 1 | Last reboot was not watchdog |
1STAT3ST | BEP initialization flag | 0 | BEP is correctly initialized |
1STAT4ST | BEP Select flag | 0 | BEP-A is active |
1STAT6ST | BEP FIFO not full flag | 1 | DPA input FIFO not full |
1STAT7ST | BEP FIFO not empty flag | 0 | DPA input FIFO empty |
Restart DEA Housekeeping and keep monitoring
load n dea 4 { | # Load DEA housekeeping block | |
queries = { | ||
ccdId | = 10 | |
queryId | = 16 | # Report focal plane temperature |
} | ||
... | # Query the other board 11 channels | |
} | ||
start n dea 4 | # Start DEA housekeeping | |
dump n systemConfig | # Dump the system configuration table | |
and periodically examine the focal plane temperature channel
deaHousekeepingData[n] = { | ||
... | ||
entries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | |
value | = n | |
} | ||
} | ||
monitoring the FP temperature (as derived from the n values in successive deaHousekeepingData packets by the formula in Section 3.4.6.4) until it has at least dropped below -60C.
This Section continues the discussion of loading and executing uplinked code begun in Section 3.1.4. A binary executable and data is packaged in a series of startUpload and continueUpload commands, known to bcmd as “start n upload” and “continue n upload” respectively. The BEP’s BOOT_MOD flag is set by a “set bootmodifier on” command, followed by the “start” and optional “continue” commands. Once the totalCount is satisfied, the BEP starts executing code at executeAddress. Multiple “start” commands into various loadAddress locations and which do not exceed their totalCount fields can be used to scatter-load the program commands and data. The following writeable target locations are available:
Name | Start | End | Normal Usage
|
BEP D-cache | 0x80000000 | 0x8003fffc | Execution stacks & heap |
BEP I-cache | 0x80080000 | 0x800ffffc | Instruction text, patches, parameter blocks |
BEP Bulk | 0xa0000000 | 0xa00ffffc | Telemetry buffers |
FEP_0 shared memory | 0xa8000000 | 0xa8fffffc | FEP 0 shared memory (when powered) |
FEP_1 shared memory | 0xa9000000 | 0xa9fffffc | FEP 1 shared memory (when powered) |
FEP_2 shared memory | 0xaa000000 | 0xaafffffc | FEP 2 shared memory (when powered) |
FEP_3 shared memory | 0xab000000 | 0xabfffffc | FEP 3 shared memory (when powered) |
FEP_4 shared memory | 0xac000000 | 0xacfffffc | FEP 4 shared memory (when powered) |
FEP_5 shared memory | 0xad000000 | 0xadfffffc | FEP 5 shared memory (when powered) |
Some Useful BEP Registers
BEP_CTRL_REG | 0xa0180000 | BEP control register |
BEP_STAT_REG | 0xa0180004 | BEP status register |
BEP_PULS_REG | 0xa0180008 | BEP pulse register |
FIFO_ADDR | 0xa0180014 | BEP input FIFO |
DTC_START | 0xa0180018 | DTC start address |
DTC_END | 0xa018001c | DTC end address |
WATCHDOG | 0xbf400018 | Watchdog timer register |
M_IADDR | 0xbf40002c | I-cache address |
M_IDATA | 0xbf400030 | I-cache data |
The executable part of an uplink program should best be written to I-Cache, unless the latter’s contents is to be preserved or overwritten, in which case BEP bulk can be used, but execution will be slower by a factor to 3 or 4. Data can be written into any of the above areas, even the shared memory of a FEP, provided that board is powered up.
The hard part is in writing the results into telemetry, since none of the usual BEP commands will work. Luckily, the BEP contains a DMA transfer chip (DTC) whose control registers are mapped into BEP memory by the firmware and this greatly simplifies sending data to the DPA serial output port. The following example shows how to write a single ACIS telemetry packet. The header is constructed in the first two elements of pkt, and the data in dwords of the pkt.data array. The code must be compiled on a MIPS 32-bit compiler or cross-compiler, e.g., acis-gcc, making use of the register definitions in the above table. Objects used to reference registers must be declared volatile to prevent the compiler from any unwanted optimization. Note the use of the asm directive to issue assembler instructions.
The DTC transfers data to the RCTU at a rate determined by the RCTU itself: at 24 Kbaud in telemetry format 2, at 500 baud in format 1, and not at all in other formats. Unless the uplinked program contains its own interrupt handler, the only way to determine when the transfer has finished is to poll the CNTL_DNLKENB flag of the BEP control register, while occasionally resetting the WATCHDOG timer which would otherwise time out in 429 seconds and reboot.
A word about I-cache memory: to read or write a word within I-cache, it is first necessary to disable interrupts, then write the word’s I-cache address to M_IADDR, then read the value from—or write it to—M_IDATA, and finally, enable the interrupts again. While laborious, this ensures that instructions in I-cache cannot be accidentally altered without causing a hardware interrupt. Any attempt to access I-cache location addr directly will be interpreted as referencing “addr & 0x8003ffff”, i.e., the word at the same offset in D-cache.
To prepare for uplinking, the C-language program is compiled using the acis-gcc cross-complier and linked into an absolute core load. It is a feature of the MIPS architecture that short programs that include no external references are fully relocatable, i.e., may be loaded at any address. We shall load this one in the BEP’s bulk memory at 0xa00000000 (see Table 3.18) and start it at the same address, as follows:
halt bep | # Restart the BEP in boot-from-uplink mode |
set bootmodifier on | |
run bep | |
wait 1 | |
start 1 uplink 0xa0000000 n 0xa0000000 { | # Load and start the program |
0xnnnnnnnn 0xnnnnnnnn ... | # which is n 32-bit words long |
} | |
wait 1 | |
set bootmodifier off | # Turn off the boot-via-uplink flag (optional) |
The report named “Correcting for ACIS EEPROM Corruption” and listed in Table 1.2 contains two boot-from-uplink programs that are intended to be used if a BEP’s EEPROM storage becomes corrupted. One, eeprom_dump is similar to the example in Section 5.9.1 above. The other, eeprom_patch can be used to correct for EEPROM errors while booting, and in other anomalous situations. Its C-language source code is shown in Appendix L. In the present example, we shall assume that we have diagnosed a bad I-cache memory location at 0x80083F50 (see Table 3.18) which, unfortunately for us, lies within the Mongoose::icacheRead routine which starts at 0x80083f38. Since the BEP can’t operate without that routine, we must move it someplace else after eeprom_patch has loaded the I-cache but before it starts to execute. This is a 2-step process:
halt bep | # Restart the BEP in boot-from-uplink mode |
set bootmodifier on | |
run bep | |
wait 1 | |
start 1 uplink 0xa0003000 1000 0 { | # Load code to divert Mongoose::icacheRead |
51 | # The number of address/value pairs to follow |
0x80083f38 0xnnnnnnnn | # 4 instructions to redirect Mongoose::icacheRead |
0x80083f3c 0xnnnnnnnn | # |
0x80083f40 0xnnnnnnnn | # |
0x80083f44 0xnnnnnnnn | # |
0x800c0970 0xnnnnnnnn ... | # 47 instructions to replace Mongoose::icacheRead |
} | |
wait 1 | |
start 1 uplink 0xa0000000 84 0xa0000000 { | # Execute eeprom_patch |
0xnnnnnnnn 0xnnnnnnnn ... | # which is 84 32-bit words long |
} | |
wait 1 | |
set bootmodifier off | # Turn off the boot-via-uplink flag (optional) |
The first start command loads a “patch” table into a region of bulk memory starting at 0xa0003000. The table consists of 51 pairs of 32-bit words, preceded by the count itself. The first 4 pairs will tell eeprom_patch to replace the start of the original Mongoose::icacheRead with instructions to jump to 0x800c0970, the start of a scratch area in I-cache. The following 47 pairs will tell eeprom_patch to copy the Mongoose::icacheRead into the scratch area. Since the length argument of start is larger than the number of words of data, the loader will wait for more input. This will be overwridden by the second start command, which will load all 84 words of eeprom_patch into bulk memory and start executing it.
The eeprom_patch code begins by loading I-cache and D-cache from EEPROM, then looks at the data list in 0xa0003000, copies the instructions to 0x80083f38 and 0x800c0970, and starts the BEP’s operating system at a point after it would have loaded the EEPROM code.
This chapter describes the more important software tools and packages that have been developed to prepare ACIS commands and interpret Chandra telemetry. Many of the same tools are used to interact with the flight instrument, with the Engineering Unit (EU), and with the software simulator (QEMU), although the interfaces are rather different.
The ACIS QEMU simulator runs as nine separate processes – two BEP emulators, six FEP emulators and a pixel generator – seven of which will each use nearly 100% of a modern 2.4 GHz processor.
The major software tools are described by online manuals and collected in the MIT-CSR 36-55001 document listed in Table 1.1 and Table 1.2. Appendix D contains a brief synopsis of the more important commands, grouped by the function they play in CXO operations.
The principal tool for creating ACIS commands is bcmd, whose syntax is described in detail in Appendix D. It accepts only ASCII text, and although the command syntax permits some contents to be read from external files, the intent is that all input should be self-contained so that commands and patches should be controlled and distributed in this “language”. bcmd handles three command types, distinguished by the contents of the first pair of 16-bit integers:
Type | Word_1 | Word_2 | Description
|
Software Serial | 2 | 2 | Word 3 contains the number of 16-bit words, Word_3 included, to send to the input FIFO of the active BEP |
Hardware Serial | 2 | 3 | Sends 16-bit Word_3 to the ACIS DPA |
High-Level Pulse | 0 | n | Sends pulse command to Channel n of the ACIS Power Supply and Mechanism Controller (PSMC). |
When used for preparing commands to the flight unit, the Hardware Serial and High-Level Pulse commands are usually communicated to the FOT in the IP&CL language of Tables A.1 and B.1, while the Software Serial commands have their 4-byte headers removed and the remainder stored in ACIS Tables for use by Chandra flight operations.
When commanding the Engineering Unit or QEMU Simulator, the user executes the acisShim command to set up an interface, and then pipes the output from one or more bcmd commands into the cmdClient command. The telemetry output comes to a network server that was started by acisShim and the telemetry can be read from this server via the filterClient command. Pixel data can be sent into the EU or QEMU through a second network server accessed by the acisImage command. These commands, aside from bcmd, communicate between each other using network sockets, coordinated through parameters stored in the user’s “~/.acisshimrc” file.
The EU and QEMU are most often used for three purposes: to validate routine uplink commands, to verify flight software patch loads, and to develop and test individual patches. Each commands these simulators in rather different ways, which we shall now describe.
The user prepares two files, one containing an ACIS Configuration File “config.dat” that associates each SIMODE with a series of command packets and post-command delays, the other a Command Packet File “table.dat” containing the binary packets. The interface to the simulator (EU or QEMU) need not be started on the host that is physically connected to the EU or executing the QEMU. To start the EU interface, type:
acisShim -h host eu >& shimlog & |
where host is the name of the computer that is connected to the EU and shimlog will contain a list of the connection attempts. To use QEMU, the user must first log into a suitable computer, start the software emulator (acisQEMUrun) with the -s flag which automatically starts acisShim on that same machine:
acisQEMUrun -s >& qemulog & |
The user then starts the run-dat4.pl script with arguments naming one or more SIMODEs to be tested, e.g.,
run-dat4.pl -I -c config.dat -t table.dat simode1 ... simoden |
and the script proceeds to execute each SIMODE in succession, sending the command packets through
bcmd | cmdClient -c |
listening to telemetry from filterServer, and using acisImage to send prepared pixel streams for the FEPs. Once the tests are complete, the user can kill the interface by bringing the acisQEMUrun and/or acisShim jobs into the foreground and hitting CTRL-C.
ACIS patch loads are tested by first checking out the patch tree from the CVS configuration system and building the standard and optional patches:
export CVSROOT=/nfs/acis/h3/acisfs/configcntl |
cvs checkout patches |
cd patches/release |
make standard options |
then starting the EU or QEMU interface using acisShim or acisQEMUrun as shown in Section 6.1.1 above,
and finally testing the patches themselves:
make checkstandard checkoptions |
Before writing formal procedures to build and validate new or updated patches, the simulators can be used to debug existing flight software and problem SIMODEs. This is usually done through the acisCtl interface. To use the Engineering Unit, type:
acisCtl -e |
which calls a built-in interface script (set within acisCtl’s “Parameters...” dialog as an RCTU_CMD of “acisShim eu” to emulate format 2 or “acisShim -1 eu” to emulate the slower format 1) that sends commands to the EU and receives and displays the output telemetry (which is described in Section 6.2).
Running acisCtl on a QEMU simulator is best done in a single step:
acisQEMUrun -c >& qemulog & |
Within acisCtl, the “debug” tool is useful when developing patches since it displays BEP and FEP memory locations and contents in a variety of formats, including decimal, hexadecimal, symbolic (derived from load maps), and as assembler code.
As a quick glance at Appendix C will show, there are quite a lot of software tools dedicated to extracting, reformatting, and displaying ACIS telemetry. These have been gathered into separate functions without a lot of explanation.
Telemetry arrives from the DSN as a stream of SFDUs each consisting of a telemetry minor frame and a header added at the tracking station. These are reformatted and delivered to users as ACIS telemetry packets via a COG interface in one of two ways:
The COG removes the SFDU headers and writes the 1029-byte minor frames to UDP ports pre-assigned to each user. Only “good” frames are written, but the transmission is unreliable since there is no mechanism for the user to request that the COG resend a frame in case one went missing due to network contention, etc. ACIS EGSE reads these UDP records via
While getnrt translates EHS directly to ACIS packets, tlmGet and ehs2mnf output the telemetry as minor frames, which must be further translated to packets via getPackets or getp. These packets are identical to the serial digital output of the ACIS BEP, with three additional packet types called pseudo-packets.
Pseudo-Engineering Packets: These are inserted into a packet stream by getnrt, getPackets, or getp once per major frame (128 minor frames, 32.8 seconds). The pseudoEngineering packet contains the time stamp (VCDU) of the major frame followed by an array of triplets: the minor frame number, byte offset and value of data channels identified in an auxiliary “ttm” file which associates the minor frame and byte offset with engineering channels of interest that are reported in the non-ACIS part of the telemetry.
Pseudo-Science Packets: These are inserted into a packet stream by getnrt, getPackets, or getp once every 8 minor frames (2.05 seconds). They contain the time stamp (VCDU), UTC time field, and the bepSciTime. The latter is the value of the BEP’s 32-bit clock at the start of that minor frame and the UTC time is in 6-byte IRIG-B format: 11 bits of day; 17 bits of seconds; 10 bits of milliseconds; 10 bits of microseconds.
Pseudo-User Packets: These should not appear in flight telemetry. They can be generated by patches running in the ACIS engineering unit in order to debug these and other patches. The content of these pseudoUser packets is entirely up to the programmer.
Once the telemetry has been converted into packets and pseudo-packets, it is practically self-contained and can be fed into other EGSE tools without additional information. For instance, a single pass through psci can convert it into a series of data and log files that separate the output from individual CCD events and FEP bias maps, or multiple memory dumps, while building up files of video, software housekeeping, etc. From there, a set of scripts converts individual data files into ASCII data listings.
Alternatively, the menu-driven acisCtl program can do the work for you. It is started with
acisCtl -f |
When receiving real-time telemetry from the GOT, acisCtl calls tlmGet to read the data, getp or getPackets to convert it to packets and pseudo-packets, and filterServer to parcel it out to modules that display ACIS data on a (preferably wide) screen. One of those modules can use psci to split the packets into data files for further analysis.
filterClient | psci -t table.dat -l dirname∕prefix >& pscilog.txt |
where table.dat is the ACIS command table described in Command (6.3) of Section 6.1.1. psci will sort the telemetry by data type and by CCD, and write the results (see Table 6.1) into directory “dirname”, with each filename beginning with “prefix”.
We have seen in Section 6.1 how the acisShim command can direct bcmd command output to a simulator – either EU or QEMU – and receive telemetry output through filterClient. These functions have been built into the acisCtl and run-dat4.pl procedures, and also in the patch verification scripts described in Section 6.1.2. Small amounts of telemetry can be monitored with ltlm, e.g.,
filterClient | ltlm -v | more |
When working with large quantities of data, the psci program is recommended, as in Section 6.1.1 above.
The formats of the ASCII files are similar to the output of ltlm, as used extensively in the current document where they are colored green. The binary ERV files consist of fixed length 36-byte records:
The binary ERV5 files consist of fixed length 68-byte records in the same format, but with:
Table 6.2 show the header keywords for the 4 types of FITS files written by psci. Fixed values are either coded into psci or haven’t varied over the course of the mission. FILENAME values use the convention in Table 6.1. IRIGTIME values are in seconds from start of year. Row and column values run from 1 through 2024, i.e., are one more than the values in parameter blocks and telemetry pckets.
File Name | Contents | File Name | Contents
|
p.bepReadReply.n.t | BEP memory dump | p.pramReadReplyn.t | PRAM memory dump |
p.command.log | BEP commands | p.pseudo.log | pseudopackets |
p.deahk.log | analog housekeeping | p.s.bias.log | bias packet headers |
p.dumped1dSlots.n.t | 1D window block | p.s.biaserr.log | bias error packets |
p.dumped2dSlots.n.t | 2D window block | p.s.n.bias.fits | bias file (FITS, binary) |
p.dumpedBadCcCol.n.t | Bad CC column lists | p.s.n.erv.t | event data (ERV format) |
p.dumpedBadPix.n.t | Bad pixel lists | p.s.n.erv5.t | event data (ERV 5x5 format) |
p.dumpedBadTeCol.n.t | Bad Te column lists | p.s.n.m.raw.fits | raw image file (FITS, binary) |
p.dumpedCcSlots.n.t | Cc parameter block | p.s.n.TMP.fits | (temporary) raw FITS file |
p.dumpedDeaSlots.n.t | DEA H/K list | p.s.n.x-y.hist.fits | pixel histogram (FITS) |
p.dumpedHuffman.n.t | Huffman tables | p.s.n.x-y.hist.txt | pixel histogram (ASCII) |
p.dumpedPatches.n.t | Patch list | p.s.science.log | science mode packets |
p.dumpedSysConfig.n.t | Configuration table | p.s.time.txt | exposure times (ASCII) |
p.dumpedTeSlots.n.t | TE parameter block | p.sramReadReply.n.t | SRAM memory dump |
p.fepReadReply.n.t | FEP memory dump | p.swhk.log | S/W housekeeping |
p.packet.log | miscellaneous packets | ||
Where the italicized letters in the file names take on the following values:
p | Processing phase from -l option, usually “acisnnn” where “nnn” is decimal. |
s | Science run number within this processing phase |
n | FEP index (0-5) or memory object number (decimal, incrementing) |
m | Exposure number of raw image |
x–y | Exposure range of this histogram file |
t | Either “dat” for (default) binary output, or “txt” for ASCII (-a flag) |
TE Bias Map | CC Bias Map | TE Raw File | CC Raw File
|
SIMPLE = T | SIMPLE = T | SIMPLE = T | SIMPLE = T |
BITPIX = 16 | BITPIX = 16 | BITPIX = 16 | BITPIX = 16 |
NAXIS = 2 | NAXIS = 2 | NAXIS = 2 | NAXIS = 2 |
NAXIS1 = 1024 | NAXIS1 = 1024 | NAXIS1 = 1088 | NAXIS1 = 1088 |
NAXIS2 = 1024 | NAXIS2 = 512 | NAXIS2 = 1024 | NAXIS2 = 512 |
NFEP = n | NFEP = n | NFEP = n | NFEP = n |
NCCD = n | NCCD = n | NCCD = n | NCCD = n |
CCDROW1 = n | ROWSUM = 1 | CCDROW1 = 1 | CCDNCOLS= 1024 |
CCDNROWS= n | COLSUM = 1 | CCDNROWS= 1024 | CCDOCLKS= 16 |
CCDNODES= 4 | ACISMODE= 'CC' | CCDNCOLS= 1024 | CCDNODES= 4 |
QUADMODE= QUAD_FULL | CCDNODES= 4 | CCDOCLKS= 16 | QUADMODE= 'QUAD_FULL' |
ACISMODE= 'TE' | QUADMODE= 'QUAD_FULL' | CCDNODES= 4 | DEAGAIN = 0 |
SUM2X2 = 'NO' | DEAGAIN = 0 | QUADMODE= 'QUAD_FULL' | ROWSUM = 1 |
DEAGAIN = 0 | BIASALGO= n | DEAGAIN = 0 | COLSUM = 1 |
BIASALGO= n | BIASPARM= n | SUM2X2 = 'NO' | EXPOSURE= n |
BIASARG0= n | FILENAME= 'name' | EXPOTIM1= n | FILENAME= 'name' |
BIASARG1= n | DATETIME= 'datetime' | EXPOTIM2= 0 | IRIGTIME= n |
BIASARG2= n | INITOCLA= n | DUTYCYCL= 0 | DATETIME= 'datetime' |
BIASARG3= n | INITOCLB= n | EXPOSURE= n | END |
BIASARG4= n | INITOCLC= n | FILENAME= 'name' | |
FILENAME= 'name' | INITOCLD= n | IRIGTIME= n | |
DATETIME= 'datetime' | END | DATETIME= 'datetime' | |
INITOCLA= n | END | ||
INITOCLB= n | |||
INITOCLC= n | |||
INITOCLD= n | |||
END | |||
The ACIS DPA consists of 8 boards powered by two +5V lines from the PSMC:
DPA-A: powering BEP-A and FEP_0, FEP_1 and FEP_2.
DPA-B: powering BEP-B and FEP_3, FEP_4 and FEP_5.
The two BEP boards are identical. They are distinguished by which slots they occupy in the DPA backplane. The same applies to the FEPs, but while each BEP can access and control each FEP, the BEPs cannot “see” each other.
The status of each BEP’s CPU is described by its Status Register, a 32-bit word at 0xA0180004. The following bits (bit 0 is least significant) describe BEP functions.
Bit | Flag Name | Value | Function | Initial | Command
|
16 |
BOOT_MOD | 0 | When booting, boot from EEPROM |
0 |
1BMODIBM |
1 | When booting, boot from upload commands | ||||
17 |
WARM_BOOT | 0 | When booting, don’t apply patches |
0 |
1WRMBTSB |
1 | When booting, apply patches | ||||
18 |
RAD_MON | 0 | Resume science processing |
0 |
1RMONIRM |
1 | Halt science processing | ||||
19 |
WDOGRST | 0 | Last reset wasn’t from the watchdog timer |
0 |
Set by DPA hardware |
1 | Last reset was from the watchdog timer | ||||
20 |
CMDRST | 0 | BEP’s CPU is not in reset status |
0 |
1RSETIRT |
1 | BEP’s CPU is held in reset status | ||||
21 |
BEP_ID | 0 | This board is BEP-A |
0 or 1 |
Set by DPA hardware |
1 | This board is BEP-B | ||||
22 |
BEPSEL | 0 | BEP-A is the active BEP |
0 |
1BSELICL |
1 | BEP-B is the active BEP | ||||
Each BEP maintains these flags independently. When a BEP is first powered up, its flags are set to the values in the “Initial” column. BEP_ID is hard-wired according to which backplane slot that BEP occupies.
A BEP CPU will only run if its CMDRST bit is zero and if the value of its BEP_ID matches that of its BEPSEL. Hence, when it is powered up, BEP-A will start to boot but BEP-B won’t. Subsequently, a BEP will reboot whenever its BEPSEL matches its BEP_ID and its CMDRST changes from 1 to 0.
Five of the flags can be set via ground command, whose names are shown in the “Command” column. Each command sets the corresponding status flag of each powered-up BEP to 0 or 1, e.g., in SSC script format:
IP&CL syntax | bcmd syntax | Command Description |
1RSETIRT (v=1) | halt bep | Halt the active BEP |
which sets to 1 the CMDRST flag of each BEP that is currently powered-up.
When a BEP boots, it first examines BOOT_MOD to see whether to load a program via startUpload and continueUpload commands. If not, it loads its operating system from EEPROM and, if WARM_BOOT is set but WDOGRST isn’t, it loads patches. If the loads succeed, the BEP starts executing; otherwise, it reboots.
Assuming that both DPA-A and DPA-B are powered, the first step is to command the active BEP, i.e., BEP-A, to power down the FEPs and video boards so that the BEP will “remember” this configuration if it becomes necessary to switch back to it. Then, assuming that BEP-B isn’t loaded with valid patches, the command sequence proceeds as follows:
IP&CL syntax | bcmd syntax | Command Description
|
WSPOW00000 | N/A | down all FEPs and video boards |
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1BSELICL (v=1) | select bep b | Set BEP-B active |
1BMODIBM (v=0) | set bootmode off | Boot from EEPROM |
1WRMBTSB (v=0) | set warmboot off | Don’t apply patches |
1RSETIRT (v=0) | run bep | Run BEP-B |
BEP-B sends a bepStartupMessage packet to the RCTU and is now ready to be loaded with patches and restarted, e.g., by running the FOT’s command procedure SOP_ACIS_SW_STDGOPTH.
In the previous scenario we left BEP-A powered up, perhaps with patches already applied. We can return to using that BEP without having to reload the patches by the following commands:
IP&CL syntax | bcmd syntax | Command Description
|
WSPOW00000 | N/A | down all FEPs and video boards |
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1BSELICL (v=0) | select bep a | Set BEP-A active |
1BMODIBM (v=0) | set bootmode off | Boot from EEPROM |
1WRMBTSB (v=1) | set warmboot on | pply patches when booting |
1RSETIRT (v=0) | run bep | Run BEP-A |
In this scenario, both DPA-A and DPA-B were powered when DPA-A suddenly lost power. Assuming that there was no other evidence of an anomaly, we would execute the following commands:
IP&CL syntax | bcmd syntax | Command Description
|
1RSETIRT (v=1) | halt bep | Halt the active BEP |
1DPPSAEN | enable dpa a | Enable power to DPA-A |
1DPPSAON | poweron dpa a | Turn DPA-A power on |
1RSETIRT (v=1) | halt bep | Halt BEP-A |
As soon as DPA-A receives power, BEP-A will set its flags to zero, which will cause it to execute a “power-on” reboot and send a bepStartupMessage packet to the RCTU. BEP-A or BEP-B can then be selected, booted, patched, and rebooted as usual.
Never let the instrument be put into this state.
But if it does happen, no serious damage will occur: the bi-level and science output channels will be garbled because both BEPs will be trying to control them, but nothing will actually melt. The condition would arise if, for instance, BEP-B was activated and set running using Scenario 1, then DPA-A powered down (anomalously) and was then powered up by ground command, or perhaps automatically if DPA-A power was only interrupted for a short time. BEP-A would then reboot automatically, as it is designed to do, but BEP-B would still be running. To prevent this happening, it is best to issue a 1RSETIRT (v=1) command (to set CMDRST to 1) before powering up DPA-A in case BEP-B is running, as shown in A.2.3, above.
This section summarizes some definitions of ACIS commands and telemetry structures. For details, consult the documentation listed in Table 1.
Table 6.1 lists the various data arrays within the BEPs and FEPs that can be accessed via uplink command. For instance, the bcmd syntax to copy the continuous clocking bad column map to downlink telemetry is
dump n cc badColumn |
where n is an integer between 0 and 65535 that will be assigned to the sequenceNumber field of the commandEcho packet that reports the execution of this command. The “bcmd” commands that supply values to these structures must terminate in one of two ways: either the pathname of a file containing the data in binary format, or an opening brace, “{”, followed by a newline character, then one or more lines containing the binary or hexadecimal values of the 32-bit data words, followed by a closing brace, “}”, and newline.
Structure Name | bcmd Commands | Object
|
Bad pixel map | add, | badPixel {...} |
|
dump, reset | badPixel |
Bad continuous clocking column map | add | cc badColumn {...} |
|
dump, reset | cc badColumn |
Bad timed exposure column map | add | te badColumn {...} |
|
dump, reset | te badColumn |
BEP memory | read | addr length |
| write | addr {...} |
Continuous clocking parameter block | dump | cc |
| load | cc slotId {...} |
|
start | cc bias slotId |
|
stop | science |
DEA housekeeping block | dump, start, stop | dea slotId |
| load | dea slotId {...} |
BEP memory | read | addr length |
| write | addr {...} |
Huffman compression table | dump | huffman |
Patch table | add, remove | patch patchId {...} |
| dump | patchList |
PRAM memory | read | pram ccdId addr length |
| write | pram ccdId addr {...} |
SRAM memory | read | sram ccdId addr length |
| write | sram ccdId addr {...} |
System configuration table | change | systemConfig {...} |
| dump | systemConfig |
Timed exposure parameter block | dump | te |
| load | te slotId {...} |
| start | te bias slotId |
| stop | science |
1D window block | dump | window1D |
| load | window1D slotId {...} |
2D window block | dump | window2D |
| load | window2D slotId {...} |
The ACIS instrument accepts three kinds of “Hardware command”, those directed to the DPA to control the active BEP (Table B.2), those sent to the PSMC to control the power supplies and heaters (Table B.3), and the remainder, also sent to the PSMC to control the mechanical components (Table B.4). The latter should not be sent to the flight instrument without careful forethought.
IP&CL | bcmd Command | Description
|
1RSETIRT (v=0) | run bep | Take the BEP processor out of ”reset” state, i.e., start it. |
1RSETIRT (v=1) | halt bep | Put the active BEP processor into ”reset” state. |
1BSELICL (v=0) | select bep a | Make BEP-A the active end processor. |
1BSELICL (v=1) | select bep b | Make BEP-B the active back-end processor. |
1BMODIBM (v=0) | set bootmodifier off | Clear the bootModifier flag, instructing the active BEP to interpret its serial digital input channel as a series of multi-word command packets to be parsed and executed by the BEP’s command task. |
1BMODIBM (v=1) | set bootmodifier on | Set the bootModifier flag, instructing the active BEP to interpret its serial digital input channel as a series of load and continue commands that cause the BEP to reboot, write instructions and data to various locations within BEP memory, and then execute them. |
1RMONIRM (v=0) | set radiationmonitor low | Clear the hardware radiation flag, causing a BEP hardware interrupt and letting it resume any science run that had been suspended as a result of a previous radiation interrupt. |
1RMONIRM (v=1) | set radiationmonitor high | Set the hardware radiation flag, causing a BEP hardware interrupt and letting it suspend any currently running science task. |
1WRMBTSB (v=0) | set warmboot off | Clears the BEP’s ”warm boot” flag, instructing it not to load patches on the next occasion that it is commanded out of ”reset” state (see ”run bep” above). |
1WRMBTSB (v=1) | set warmboot on | Sets the BEP’s ”warm boot” flag, instructing it to load its patch list on the next occasion that it is commanded out of ”reset” state (see ”run bep” above). |
Several hardware commands (1E*) relating to the BEP’s EEPROM programmer have been omitted from Table B.2 because they were deactivated before launch and will be ignored by the flight instrument.
The power and heater commands are in groups of 4, viz., enable, activate, deactivate, and disable. Each acts on one of two redundant components named “A” and “B”. In each case, a component must first be enabled before it can be activated, whereas a deactivated component is also automatically disabled. The telemetry tell-tales for these commands are listed in Table B.3.
IP&CL | bcmd Command | Description
|
1HBO[AB]DS | disable daBake [ab] | Disable commands to bake-out heater [ab] |
1HHTR[AB]DS | disable daHeater [ab] | Disable commands to housing heater [ab] |
1DEPS[AB]DS | disable dea [ab] | Disable commands to DEA power supply [ab] |
1DPPS[AB]DS | disable dpa [ab] | Disable commands to DPA power supply [ab] |
1PRES[AB]OF | disable pressure [ab] | Disable commands to pressure sensor [ab] |
1HBO[AB]EN | enable daBake [ab] | Enable commands to bake-out heater [ab] |
1HHTR[AB]EN | enable daHeater [ab] | Enable commands to housing heater [ab] [ab] |
1DEPS[AB]EN | enable dea [ab] | Enable commands to DEA power supply [ab] |
1DPPS[AB]EN | enable dpa [ab] | Enable commands to DPA power supply [ab] |
1PRES[AB]ON | enable pressure [ab] | Enable commands to pressure sensor [ab] |
1HBO[AB]OF | poweroff dabake [ab] | Power off bake-out heater [ab] |
1HHTR[AB]OF | poweroff daheater [ab] | Power off housing heater [ab] |
1DEPS[AB]OF | poweroff dea [ab] | Power off DEA power supply [ab] |
1DPPS[AB]OF | poweroff dpa [ab] | Power off DPA power supply [ab] |
1HBO[AB]ON | poweron dabake [ab] | Power on bake-out heater [ab] |
1HHTR[AB]ON | poweron daheater [ab] | Power on housing heater [ab] |
1DEPS[AB]ON | poweron dea [ab] | Power on DEA power supply [ab] |
1DPPS[AB]ON | poweron dpa [ab] | Power on DPA power supply [ab] |
Aside from the above commands that may be exercised throughout the Chandra mission, there are a set of PSMC commands that were only intended to be used once: to configure ACIS once it had arrived on orbit and before it observed its first x-rays in the HRMA focal plane. Although these IP&CL commands have been given bcmd versions, the version of bcmd distributed with the EGSE telemetry will flag them as “illegal” and refuse to include them in its output. They are described in Table B.4 below. Once the flight instrument arrived in space and its small and large vent valves were opened, the only “critical” commands refer to the ACIS door mechanism, and are highlighted in the table.
IP&CL | bcmd Command | Description
|
1LVC[AB]DS | disable relief [ab] | Disable commands to vent subsystem small valve [ab] |
1LVC[AB]EN | enable relief [ab] | Enable commands to vent subsystem small valve [ab] |
1LVCO[AB]ON | open relief [ab] | Open vent subsystem small valve [ab] |
20!//
1MCDR[AB]OF | closeabort door [ab] | Abort the closing of instrument door [ab] |
1MCDR[AB]ON | close door [ab] | Close instrument door [ab] |
1LVCC[AB]ON | close relief [ab] | Close vent subsystem small valve [ab] |
1MCMD[AB]DS | disable door [ab] | Disable commands to door mechanism [ab] |
1MCMD[AB]EN | enable door [ab] | Enable commands to door mechanism [ab] |
1MODR[AB]OF | openabort door [ab] | Abort the opening of instrument door [ab] |
1MODR[AB]ON | open door [ab] | Open instrument door [ab] |
1VVC[AB]DS | disable vent [ab] | Disable commands to vent subsystem valve [ab] |
1VVC[AB]EN | enable vent [ab] | Enable commands to vent subsystem valve [ab] |
1VVCC[AB]OF | closeabort vent [ab] | Abort the closing of vent subsystem valve [ab] |
1VVCC[AB]ON | close vent [ab] | close vent subsystem valve [ab] |
1VVCO[AB]OF | openabort vent [ab] | Abort the opening of vent subsystem valve [ab] |
1VVCO[AB]ON | open vent [ab] | Open vent subsystem valve [ab] |
In addition to the ACIS Bi-levels and Science telemetry output from the DPA, a number of ACIS-related engineering channels are sensed and transmitted through the payload RCTU and inserted at fixed locations in most spacecraft telemetry formats.
Mnemonic | Signal Name | Remarks
|
1CBAT | Camera Body Temp. A | +Z face of aluminum camera body. Part Number MF-118. |
1CBBT | Camera Body Temp. B | -Z face of aluminum camera body. Part Number MF-118. |
1CRAT | Cold Radiator Temp. A | Cold radiator +Y cold strap attach point. Part Number MF-118. |
1CRBT | Cold Radiator Temp. B | Cold radiator -Y cold strap attach point. Part Number MF-118. |
1DACTAT | DA Collimator Temp. A | +Z Mounting foot of titanium collimator. Part Number MF-118. |
1DACTBT | DA Collimator Temp. B | +Y Mounting foot of titanium collimator. Part Number MF-118. |
1DAHACU | DA Heater Current A | The current supplied to the DA heater A elements |
1DAHAT | DA Housing Temp. A Offset | DA Housing Temperature Controller A error amplifier output. It is proportional to the difference of the set-point temperature and actual temperature. This is located near the heater elements. |
1DAHAVO | DA Heater Voltage A | The voltage output to the DA heater A elements |
1DAHBCU | DA Heater Current B | The current supplied to the DA heater B elements |
1DAHBT | DA Housing Temp. B Offset | DA Housing Temperature Controller B error amplifier output. It is proportional to the difference of the set-point temperature and actual temperature. This is located near the heater elements. |
1DAHBVO | DA Heater Voltage B | The voltage output to the DA heater B elements |
1DAHHAVO | DA Housing Heater Input Voltage A | DA Housing Temperature Controller A input voltage |
1DAHHBVO | DA Housing Heater Input Voltage B | DA Housing Temperature Controller B input voltage |
1DE28AVO | DEA Input Voltage A | The voltage supplied to the DEA +28V Input, Side A |
1DE28BVO | DEA Input Voltage B | The voltage supplied to the DEA +28V Input, Side B |
1DEAMZT | DEA -Z Panel Temp | DEA -Z Panel Temp. Part Number 311P18-02S7R6. |
1DEICACU | DEA Input Current A | The current supplied to the DEA +28V Input, Side A |
1DEICBCU | DEA Input Current B | The current supplied to the DEA +28V Input, Side B |
1DEN0AVO | DEA -6V Voltage A | The voltage supplied to the DEA -6V Input, Side A |
1DEN0BVO | DEA -6V Voltage B | The voltage supplied to the DEA -6V Input, Side B |
1DEN1AVO | DEA -15V Voltage A | The voltage supplied to the DEA -15V Input, Side A |
1DEN1BVO | DEA -15V Voltage B | The voltage supplied to the DEA -15V Input, Side B |
1DEP0AVO | DEA +6V Voltage A | The voltage supplied to the DEA +6V Input, Side A |
1DEP0BVO | DEA +6V Voltage B | The voltage supplied to the DEA +6V Input, Side B |
1DEP1AVO | DEA +15V Voltage A | The voltage supplied to the DEA +15V Input, Side A |
1DEP1BVO | DEA +15V Voltage B | The voltage supplied to the DEA +15V Input, Side B |
1DEP2AVO | DEA +24V Voltage A | The voltage supplied to the DEA +24V Input, Side A |
1DEP2BVO | DEA +24V Voltage B | The voltage supplied to the DEA +24V Input, Side B |
1DEP3AVO | DEA +28V Voltage A | The voltage supplied to the DEA +28V Input, Side A |
1DEP3BVO | DEA +28V Voltage B | The voltage supplied to the DEA +28V Input, Side B |
1DP28AVO | DPA Input Voltage A | The voltage supplied to the DPA +28V Input, Side A |
1DP28BVO | DPA Input Voltage B | The voltage supplied to the DPA +28V Input, Side B |
1DPAMYT | DPA -Y Panel Temp | DPA -Y Panel Temp. Part Number 311P18-02S7R6. |
1DPAMZT | DPA -Z Panel Temp | DPA -Z Panel Temp. Part Number 311P18-02S7R6. |
1DPICACU | DPA Input Current A | The current supplied to the DPA +28V Input, Side A |
1DPICBCU | DPA Input Current B | The current supplied to the DPA +28V Input, Side B |
1DPP0AVO | DPA +5V Voltage A | The voltage supplied to the DPA +5V Input, Side A |
1DPP0BVO | DPA +5V Voltage B | The voltage supplied to the DPA +5V Input, Side B |
1HOPRAPR | Differential Housing Pressure A | Voltage proportional to the Differential Housing Pressure A |
1HOPRBPR | Differential Housing Pressure B | Voltage proportional to the Differential Housing Pressure B |
1MAHCAT | Door Close Actuator Temperature A | Voltage proportional the temperature on the Close Door Mechanism Actuator A |
1MAHCBT | Door Close Actuator Temperature B | Voltage proportional the temperature on the Close Door Mechanism Actuator B |
1MAHOAT | Door Open Actuator Temperature A | Voltage proportional the temperature on the Open Door Mechanism Actuator A |
1MAHOBT | Door Open Actuator Temperature B | Voltage proportional the temperature on the Open Door Mechanism Actuator B |
1OAHAT | Actuator Housing Temp. A | open actuator housing. Part Number MF-118. |
1OAHBT | Actuator Housing Temp. B | open actuator housing. Part Number MF-118. |
1PDEAAT | PSMC DEA PS A Temp | PSMC DEA Power Supply A Temp. Part Number MF-118. |
1PDEABT | PSMC DEA PS B Temp | PSMC DEA Power Supply B Temp. Part Number MF-118. |
1PIN1AT | PSMC Temp | PSMC Temp. |
1SSMYT | Support Structure -Y Panel Temp | Support Structure -Y Panel Temp. Part Number 311P18-02S7R6. |
1SSPYT | Support Structure +Y Panel Temp | Support Structure +Y Panel Temp. Part Number 311P18-02S7R6. |
1TSERXT | Software Serial Data | Serial Data that comes from the active Backend Processor of the DPA. This data stream is packetized and contains science data, software command verifiers and science housekeeping data. Only available in telemetry formats 1 and 2. |
1VAHCAT | Vent Valve Close Actuator Temperature A | A voltage proportional the temperature on the Close Vent Valve Actuator A |
1VAHCBT | Vent Valve Close Actuator Temperature B | A voltage proportional the temperature on the Close Vent Valve Actuator B |
1VAHOAT | Vent Valve Open Actuator Temperature A | A voltage proportional the temperature on the Open Vent Valve Actuator A |
1VAHOBT | Vent Valve Open Actuator Temperature B | A voltage proportional the temperature on the Open Vent Valve Actuator B |
1WRAT | Warm Radiator Temp. A | Warm radiator +Y warm strap attach point. Part Number MF-118. |
1WRBT | Warm Radiator Temp. B | Warm radiator -Y warm strap attach point. Part Number MF-118. |
The following table lists temperature readout channels from the SIM that are useful when evaluating the ACIS thermal status.
Mnemonic | Description
|
3FLCABPT | FLCA Baseplate (+X) Temp |
3RCTUBPT | RCTU Baseplate (+X), Abort Heater TSC2 Temp |
3TSMXCET | -X turtle shell, NR HRC CEA Temp |
3TSMXSPT | -X turtle shell, NR ACIS SS Temp |
3TSMYDPT | -Y turtle shell, NR ACIS DPA Temp |
3TSPYFET | +Y turtle shell, NR HRC FEA Temp |
3TSPZDET | +Z turtle shell, NR ACIS DEA Temp |
3TSPZSPT | +Z turtle shell, NR ACIS SS Temp |
3TTACS1T | ACIS attach #1, abort Heater TSC1 Temp |
3TTACS2T | ACIS attach #2, abort Heater TSC1 Temp |
3TTACS3T | ACIS attach #3, abort Heater TSC1 Temp |
3TTBRGBT | Bearing B, abort Heater TSC4 Temp |
3TTHATT | Top hat interior, abort Heater TSC7 Temp |
3TTHRC1T | HRC bipod attach #1, abort Heater TSC2 Temp |
3TTHRC2T | HRC bipod attach #2, abort Heater TSC2 Temp |
3TTHRC3T | HRC bipod attach #3 & ACIS #4 Temp |
3TTRALAT | Rail A, abort Heater TSC3 Temp |
3TTRALCT | Rail C, abort Heater TSC5 Temp |
3TTVALVT | Vent valve, abort Heater TSC7 Temp |
The following table lists the algorithms that convert the 8-bit channels to engineering units:
| Constants | ||||
Mnemonic |
Description |
Algorithm | a | b |
Units |
1CB[AB]T | Camera Body Temperature | RTD | C | ||
1CR[AB]T | Cold Radiator Temperature | RTD | C | ||
1DACT[AB]T | Collimator Temperature | RTD | C | ||
1DAHH[AB]VO | DA Heater Bus Voltage | Linear | 0.156 | 0 | V |
1DAH[AB]CU | DA Heater Output Current | Linear | 0.0200 | 0 | V |
1DAH[AB]T | DA Heater Control Status | Discrete | |||
1DAH[AB]VO | DA Heater Output Voltage | Linear | 0.1198 | 0 | V |
1DE28[AB]VO | DEA Input Voltage | Linear | 0.138 | 0 | V |
1DEAMZT | DEA -Z Temperature | ACIS thermistor | C | ||
1DEIC[AB]CU | DEA Input Current | Linear† | -0.0704 | 18.09 | A |
1DEN0[AB]VO | DEA -6v Out | Linear | -0.0301 | 0 | V |
1DEN1[AB]VO | DEA -15v Out | Linear | -0.0769 | 0 | V |
1DEP0[AB]VO | DEA +6v Out | Linear | 0.0300 | 0 | V |
1DEP1[AB]VO | DEA +15v Out | Linear | 0.0781 | 0 | V |
1DEP2[AB]VO | DEA +24v Out | Linear | 0.120 | 0 | V |
1DEP3[AB]VO | DEA +28v Out | Linear | 0.150 | 0 | V |
1DP28[AB]VO | DPA Input Voltage | Linear | 0.138 | 0 | V |
1DPAMYT | DPA -Y Temperature | ACIS thermistor | C | ||
1DPAMZT | DPA -Z Temperature | ACIS thermistor | C | ||
1DPIC[AB]CU | DPA Input Current | Linear | 0.0101 | 0 | A |
1DPP0[AB]VO | DPA +5v Out | Linear | 0.022 | 0 | V |
1HOPRAPR | Differential Pressure | Linear | 0.284 | -21.13 | torr |
1HOPRBPR | Differential Pressure | Linear | 0.284 | -19.10 | torr |
1MAHC[AB]T | Door Close Actuator Temperature | PSMC thermistor | C | ||
1MAHO[AB]T | Door Open Actuator Temperature | PSMC thermistor | C | ||
1OAH[AB]T | Starsys Housing Temperature | RTD | C | ||
1PDEA[AB]T | PSMC DEA Pwb Temperature | RTD | C | ||
1PIN1AT | PSMC Lid Temperature | RTD* | C | ||
1SSMYT | SS -Y (DPA) Temperature | ACIS thermistor | C | ||
1SSPYT | SS +Y (DEA) Temperature | ACIS thermistor | C | ||
1VAHC[AB]T | Vent Close Actuator Temperature | PSMC thermistor | C | ||
1VAHO[AB]T | Vent Open Actuator Temperature | PSMC thermistor | C | ||
1WR[AB]T | Warm Radiator Temperature | RTD | C | ||
3FLCABPT | FLCA Baseplate (+X) Temp | ISIM | C | ||
3RCTUBPT | RCTU Baseplate (+X) Heater TSC2 Temp | ISIM | C | ||
3TSMXCET | -X turtle shell, NR HRC CEA Temp | Linear | 2.494186 | -249.281 | C |
3TSMXSPT | -X turtle shell, NR ACIS SS Temp | Linear | 2.494186 | -249.281 | C |
3TSMYDPT | -Y turtle shell, NR ACIS DPA Temp | Linear | 2.494186 | -249.281 | C |
3TSPYFET | +Y turtle shell, NR HRC FEA Temp | Linear | 2.494186 | -249.281 | C |
3TSPZDET | +Z turtle shell, NR ACIS DEA Temp | Linear | 2.494186 | -249.281 | C |
3TSPZSPT | +Z turtle shell, NR ACIS SS Temp | Linear | 2.494186 | -249.281 | C |
3TTACS1T | ACIS attach #1, abort Heater TSC1 Temp | ISIM | C | ||
3TTACS2T | ACIS attach #2, abort Heater TSC1 Temp | ISIM | C | ||
3TTACS3T | ACIS attach #3, abort Heater TSC1 Temp | ISIM | C | ||
3TTRALAT | Rail A, abort Heater TSC3 Temp | ISIM | C | ||
3TTRALCT | Rail C, abort Heater TSC5 Temp | ISIM | C | ||
3TTVALVT | Vent valve, abort Heater TSC7 Temp | ISIM | C | ||
* Divide DN by 1.99 before converting.
† If 1DEP3[AB]VO ≤ 10, set EU = 0.
The conversion algorithms are as follows:
∙ ACIS Thermistor in parallel with 5.05KΩ
∙ Discrete
∙ ISIM Thermistor
∙ Linear volts, current, temperature, or pressure
∙ PSMC Thermistor
∙ RTD at 2KΩ nominal
Finally, Table B.8 lists the 1-bit serial digital channels that report the status of the PSMC and the DPA software and hardware.
Mnemonic | Signal Name | Remarks
|
1DABOAEN | DA Bake Out Enable A | 0=Disabled, 1=Enabled |
1DABOAON | DA Bake Out On/Off A | 0=Off, 1=On |
1DABOBEN | DA Bake Out Enable B | 0=Disabled, 1=Enabled |
1DABOBON | DA Bake Out On/Off B | 0=Off, 1=On |
1DAHTAEN | DA Heater Enable/Disable A | 0=Disabled, 1=Enabled |
1DAHTAON | DA Heater On/Off A | 0=Off, 1=On |
1DAHTBEN | DA Heater Enable/Disable B | 0=Disabled, 1=Enabled |
1DAHTBON | DA Heater On/Off B | 0=Off, 1=On |
1DE28AOC | DEA Power Supply +28V Over-Current Protection A | DEA Power Supply Over-Current Protection A +28V output. 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DE28BOC | DEA Power Supply +28V Over-Current Protection B | DEA Power Supply Over-Current Protection B +28V output. 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DEDBAON | DEA Power Supply 28V ON A | 0=Buss has no power, 1=Buss has power |
1DEDBBON | DEA Power Supply 28V ON B | 0=Buss has no power, 1=Buss has power |
1DEMVAOC | DEA Power Supply Multi-V Over-Current Protection A | DEA Power Supply Over-Current Protection A combined for all PS outputs. 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DEMVBOC | DEA Power Supply Multi-V Over-Current Protection B | DEA Power Supply Over-Current Protection B combined for all PS outputs. 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DEPSA | DEA Power Supply On/Off A | 0=Off, 1=On |
1DEPSAX | DEA Power Supply Enable/Disable A | 0=Disabled, 1=Enabled |
1DEPSB | DEA Power Supply On/Off B | 0=Off, 1=On |
1DEPSBX | DEA Power Supply Enable/Disable B | 0=Disabled, 1=Enabled |
1DPCPAOC | DPA Power Supply Over-Current Protection A | 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DPCPBOC | DPA Power Supply Over-Current Protection B | 0=NO Overcurrent condition detected, 1=Overcurrent condition detected, OCP engaged, power converter shut off. |
1DPDBAON | DPA Power Supply 28 V On A | 0=Buss has no power, 1=Buss has power |
1DPDBBON | DPA Power Supply 28 V On B | 0=Buss has no power, 1=Buss has power |
1DPPSA | DPA Power Supply On/Off A | 0=Off, 1=On |
1DPPSAX | DPA Power Supply Enable/Disable A | 0=Disabled, 1=Enabled |
1DPPSB | DPA Power Supply On/Off B | 0=Off, 1=On |
1DPPSBX | DPA Power Supply Enable/Disable B | 0=Disabled, 1=Enabled |
1LVDBAON | L. V. Enabled A | 0=Buss has no power, 1=Buss has power |
1LVDBBON | L. V. Enabled B | 0=Buss has no power, 1=Buss has power |
1MCATATR | Door Actuator Transition A | 0=Door Mechanism NOT in transition, 1=Door Mechanism in transition. |
1MCATBTR | Door Actuator Transition B | 0=Door Mechanism NOT in transition, 1=Door Mechanism in transition. |
1MCDRACL | Door Close Drive A | Door Mechanism Close Drive A. 0=Off, 1=On |
1MCDRBCL | Door Close Drive B | Door Mechanism Close Drive B. 0=Off, 1=On |
1MDBUAON | Door Enable A | 0=Buss has no power, 1=Buss has power |
1MDBUBON | Door Enable B | 0=Buss has no power, 1=Buss has power |
1MECLACL | Door Close A | 0=Not Closed, 1=Closed |
1MECLBCL | Door Close B | 0=Not Closed, 1=Closed |
1MEOPAOP | Door Open A | 0=Not Open, 1=Open |
1MEOPBOP | Door Open B | 0=Not Open, 1=Open |
1MIPWAON | Door Input PWR On A | Door Mechanism Input PWR On A. 0=Off, 1=On |
1MIPWBON | Door Input PWR On B | Door Mechanism Input PWR On B. 0=Off, 1=On |
1MODRAOP | Door Open Drive A | Door Mechanism Open Drive A. 0=Off, 1=On |
1MODRBOP | Door Open Drive B | Door Mechanism Open Drive B. 0=Off, 1=On |
1PRDBAON | Pressure Transducer On A | 0=Buss has no power, 1=Buss has power |
1PRDBBON | Pressure Transducer On B | 0=Buss has no power, 1=Buss has power |
1STAT0ST | SW Bi-level Telemetry Bit 0 | BEP CR2: S/W Toggle 0/1 |
1STAT1ST | SW Bi-level Telemetry Bit 1 | BEP CR3: CPU 0=Running, 1=Idle |
1STAT2ST | SW Bi-level Telemetry Bit 2 | BEP CR4: Startup 0=Watchdog, 1=Normal |
1STAT3ST | SW Bi-level Telemetry Bit 3 | BEP CR5: State: 0=Running, 1=Loading |
1STAT4ST | SW Bi-level Telemetry Bit 4 | ID of Active BEP: 0=A, 1=B |
1STAT5ST | SW Bi-level Telemetry Bit 5 | BEP CPU State: 0=Halted, 1=Running |
1STAT6ST | SW Bi-level Telemetry Bit 6 | BEP FIFO: 0=Full, 1=Not Full |
1STAT7ST | SW Bi-level Telemetry Bit 7 | BEP FIFO: 0=Empty, 1=Not Empty |
1VVATATR | V.V. Actuator Transition A | 0=Vent Valve NOT in transition, 1=Vent Valve in transition. |
1VVATBTR | V.V. Actuator Transition B | 0=Vent Valve NOT in transition, 1=Vent Valve in transition. |
1VVCDACL | V. V. Close Drive A | 0=Off, 1=On |
1VVCDBCL | V. V. Close Drive B | 0=Off, 1=On |
1VVCLACL | V. V. Close A | 0=Not Closed, 1=Closed |
1VVCLBCL | V. V. Close B | 0=Not Closed, 1=Closed |
1VVDBAON | V. V. Enable A | 0=Buss has no power, 1=Buss has power |
1VVDBBON | V. V. Enable B | 0=Buss has no power, 1=Buss has power |
1VVODAOP | V. V. Open Drive A | 0=Off, 1=On |
1VVODBOP | V. V. Open Drive B | 0=Off, 1=On |
1VVOPAOP | V. V. Open A | 0=Not Open, 1=Open |
1VVOPBOP | V. V. Open B | 0=Not Open, 1=Open |
Errors in the BEP-to-DEA interface are reported in software housekeeping packets with an swStatisticId value of 53 (SWSTAT_DEABOARD_ERROR) and a value of n = (boardId << 16) — deaErr, where boardId is the physical slot (not the ccdId) assigned to the DEA video board that most recently reported the error (see Table 3.7), and deaErr is the error code itself, as described by the following table:
Value | DEA Error Code | Description
|
0 | DEAERR_OK | No error. No housekeeping report to be expected. |
1 | DEAERR_LOCK_TIMEOUT | Timeout while waiting for access to DEA |
2 | DEAERR_CMDPORT_TIMEOUT | Timeout while waiting for DEA command reply |
3 | DEAERR_STATUS_TIMEOUT | Timeout which waiting for DEA status |
4 | DEAERR_NO_POWER | Video board in slotId is unpowered |
5 | DEAERR_READBACK_ERROR | Bad or missing data received from video board |
6 | DEAERR_SEQUENCER_ACTIVE | Cannot access video board while sequencer clocks active |
7 | DEAERR_LOAD_INVALID | Internal command error |
The ACIS Configuration Table controls many BEP functions. On a cold or power-on reboot, it is copied from EEPROM into I-CACHE. The BEP maintains two copies of the table: the current state and the desired state. It is the job of the systemConfiguration task to compare the two copies and perform whatever functions are required to change “desired” to “current”, e.g., if the “DEA Power” entries differ, the task will try to power DEA video boards on or off to meet the “desired” state. The entries in the “desired” table can be changed by a “change n systemConfig” command, and the “current” table can be written into a betReadReply telemetry packet by the “dump n systemConfig” command and the resulting data displayed by UNIX commands bcmd and lconfig in the format shown in Table C.1, which shows the field values from original EEPROM version.
bepDumpSysConfig[0] = { | ||
synch | = 0x736f4166 | |
telemetryLength | = 165 | |
formatTag | = 34 # TTAG_DUMP_SYS_CONFIG | |
sequenceNumber | = n | |
commandId | = n | |
bepTickCounter | = n | |
requestedAddress | = 0x800c09ec | |
requestedWordCount | = 158 | |
readAddress | = 0x800c09ec | |
sysConfigBlock = { | ||
# —– Power Settings —–
| ||
0, | # 0 SYSSET_DEA_POWER | // Dea Power |
0, | # 1 SYSSET_FEP_POWER | // Fep Power |
# —– DEA Interface Settings —–
| ||
0, | # 2 SYSSET_CNTL_MASTER_CLK | // Master Clock Disable during Science |
128, | # 3 SYSSET_CNTL_FOCAL_TEMP | // Focal Plane Temp. |
106, | # 4 SYSSET_CNTL_BAKE_TEMP | // Bakeout Temp. |
0, | # 5 SYSSET_CNTL_BAKE_ENABLE | // Bakeout Enable |
0, | # 6 SYSSET_CNTL_LED_ENABLE | // LED Enable |
0, | # 7 SYSSET_CNTL_HOUSE_HOLD | // Hold Housekeeping Addr. |
0, | # 8 SYSSET_CNTL_SIGNAL_PATH | // Signal Path Select |
1, | # 9 SYSSET_CNTL_CMDCLOCK_DISABLE | // Command Clock Disable |
1, | # 10 SYSSET_CNTL_CMDDATA_DISABLE | // Data Clock Disable |
0, | # 11 SYSSET_CNTL_RELAY_SET_0 | // Relay Set 0 |
0, | # 12 SYSSET_CNTL_RELAY_SET_1 | // Relay Set 1 |
0, | # 13 SYSSET_CNTL_RELAY_SET_2 | // Relay Set 2 |
0, | # 14 SYSSET_CNTL_RELAY_SET_3 | // Relay Set 3 |
0, | # 15 SYSSET_CNTL_RELAY_SET_4 | // Relay Set 4 |
# —– CCD I0 Settings —–
| ||
0, | # 16 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 17 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 18 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 19 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 20 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 21 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 22 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 25 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 28 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 30 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 33 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 34 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 36 SYSSET_DAC_RD | // Reset Diode |
130, 130, 130, 130, | # 37 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
87, 86, 76, 89, | # 41 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 45 | // Spare |
# —– CCD I1 Settings —–
| ||
0, | # 46 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 47 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 48 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 49 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 50 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 51 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 52 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 55 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 58 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 60 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 63 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 64 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 66 SYSSET_DAC_RD | // Reset Diode |
130, 110, 130, 110, | # 67 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
83, 69, 79, 83, | # 71 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 75 | // Spare |
# —– CCD I2 Settings —–
| ||
0, | # 76 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 77 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 78 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 79 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 80 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 81 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 82 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 85 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 88 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 90 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 93 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 94 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 96 SYSSET_DAC_RD | // Reset Diode |
120, 120, 120, 120, | # 97 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
86, 65, 82, 89, | # 101 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 105 | // Spare |
# —– CCD I3 Settings —–
| ||
0, | # 106 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 107 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 108 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 109 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 110 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 111 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 112 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 115 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 118 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 120 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 123 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 124 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 126 SYSSET_DAC_RD | // Reset Diode |
120, 120, 120, 120, | # 127 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
76, 68, 79, 80, | # 131 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 135 | // Spare |
# —– CCD S0 Settings —–
| ||
0, | # 136 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 137 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 138 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 139 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 140 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 141 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 142 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 145 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 148 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 150 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 153 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 154 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 156 SYSSET_DAC_RD | // Reset Diode |
130, 120, 100, 90, | # 157 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
73, 75, 73, 83, | # 161 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 165 | // Spare |
# —– CCD S1 Settings —–
| ||
0, | # 166 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 167 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 168 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 169 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 170 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 171 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
90, 0, 100, | # 172 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
90, 0, 100, | # 175 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 178 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 180 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 183 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 184 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 186 SYSSET_DAC_RD | // Reset Diode |
140, 140, 130, 140, | # 187 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
79, 99, 76, 95, | # 191 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 195 | // Spare |
# —– CCD S2 Settings —–
| ||
0, | # 196 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 197 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 198 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 199 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 200 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 201 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 202 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 205 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 208 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 210 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 213 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 214 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 216 SYSSET_DAC_RD | // Reset Diode |
130, 130, 130, 130, | # 217 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
90, 86, 79, 94, | # 221 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 225 | // Spare |
# —– CCD S3 Settings —–
| ||
0, | # 226 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 227 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 228 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 229 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 230 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 231 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
90, 0, 100, | # 232 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
90, 0, 100, | # 235 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 238 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 240 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 243 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 244 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 246 SYSSET_DAC_RD | // Reset Diode |
130, 130, 130, 130, | # 247 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
79, 79, 79, 77, | # 251 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 255 | // Spare |
# —– CCD S4 Settings —–
| ||
0, | # 256 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 257 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 258 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 259 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 260 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 261 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 262 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
220, 40, 0, | # 265 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 268 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 270 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 273 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 274 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 276 SYSSET_DAC_RD | // Reset Diode |
120, 120, 120, 120, | # 277 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
72, 72, 78, 71, | # 281 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 285 | // Spare |
# —– CCD S5 Settings —–
| ||
0, | # 286 SYSSET_CCD_SEQ_OFFSET | // Sequencer Offset |
55, | # 287 SYSSET_CCD_ADC_OFFSET | // Video ADC Offset |
0, | # 288 SYSSET_CCD_VIDEO_ENABLE | // Video Channel Enable Mask |
0, | # 289 SYSSET_CCD_HOLD_HOUSE | // Hold Housekeeping Address |
0, | # 290 SYSSET_CCD_BJD | // Back-Junction Diode Enable |
0, | # 291 SYSSET_CCD_HIGH_SPEED_TAP | // High-speed tap disable |
220, 40, 0, | # 292 SYSSET_DAC_PIA_[P/PM/M] | // Parallel Image Array +/±/– |
150, 0, 0, | # 295 SYSSET_DAC_PFS_[P/PM/M] | // Parallel Framestore +/±/– |
140, 60, | # 298 SYSSET_DAC_S_[PM] | // Serial Registers +/– |
180, 80, 0, | # 300 SYSSET_DAC_R_[P/PM/M] | // Reset Gate +/±/– |
241, | # 303 SYSSET_DAC_SCP | // Scupper |
20, 0, | # 304 SYSSET_DAC_OG_[P/M] | // Output Gate +/– |
220, | # 306 SYSSET_DAC_RD | // Reset Diode |
120, 120, 120, 120, | # 307 SYSSET_DAC_DR[0/1/2/3] | // Drain Output A/B/C/D |
81, 87, 80, 82, | # 311 SYSSET_DAC_[A/B/C/D]_OFF | // DAC Offsets A/B/C/D |
0, | # 315 | // Spare |
} | ||
} | ||
The following executable commands are configured under cvs at “/nfs/acis/h3/acisfs/configcntl”. Italicized commands have no online manuals. The commands are grouped according to function. Only the first section titled “Downlink Real-Time Monitoring” is currently used at the CXO OCC to support ACIS operations. “Routine Telemetry Monitoring” includes capture and display of real-time telemetry for remote display and processing of a mixture of real-time and on-board recorded telemetry at MIT.
Program | Description
|
|
|
| |
Realtime Operations
| |
acisCtl | TCL/TK interface to realtime telemetry |
comp-eeprom.sh | Compare an ACIS EEPROM dump against a library copy |
filterClient | Receive ACIS telemetry from a filterServer socket |
filterServer | Distribute ACIS telemetry to TCP clients |
getp | Translate SFDU frames to ACIS packets and pseudopackets |
getPackets | Read CXO telemetry frames and extract ACIS-related information |
psci | Dump an ACIS telemetry packet stream by data type |
tlmGet | Listen for a TCP connection and write incoming data to stdout |
|
|
| |
Routine Telemetry Monitoring
| |
catnrt-remote.sh | Get realtime data from remote UDP, run pmon to update an HTML file |
cpix | Display ACIS events by energy or corner pixel average |
drift | Display overclock and corner pixel drift in psci event files |
ehs2eng | Extract ACIS engineering data from EHS telemetry blocks |
ehs2mnf | Read EHS dump files, write minor frames to stdout |
find-bias-bit.pl | Locate and repair one or two bit errors in ACIS bias packets |
getnrt | Translate EHS telemetry stream to ACIS packets and pseudopackets |
lclk | Translate Chandra clock fencepost files to ASCII |
leng | Print contents of ACIS engineering file |
ltlm | List contents of ACIS telemetry stream |
make-adot.pl | Annotate the Chandra DOT using TLR and additional FOT files |
make-events.pl | Create an ACIS event list from various sources |
mnf2dwell | Extract dwell-mode data in comma-delimited format |
oaceng | Extract ACIS engineering channels from minor frames |
pkt2dea | Convert DEA housekeeping channels in ACIS packets to ASCII |
pkt2eng | Convert engineering channels in ACIS packets to ASCII |
pmon | Display ACIS telemetry packets with ncurses and/or write to HTML |
show-start.pl | Check tabulated ACIS run start times |
|
|
| |
Uplink Command Preparation
| |
acpxd | Lists contents of ACIS command packets in hexadecimal |
bcmd | Translate ACIS commands to binary |
lcmd | List contents of ACIS command stream, e.g., from bcmd |
list-clds.pl | List all payload commands in CLD files |
lrts | Translate ACIS CLD files to ASCII |
pchk | Validate PRAM+SRAM microcode for a Video Board |
run-dat4.pl | Execute simodes on the ACIS engineering unit |
run-dat5.pl | Test ACIS simodes in software |
|
|
| |
Engineering Unit Software
| |
acisCtl | TCL/TK interface to realtime telemetry |
cclient | Send ACIS commands to an INET socket |
cserver | Read data from INET socket and write it to stdout |
dapkts | Copies binary packets at variable rate |
ltp2mnf | Translate L-RCTU output to minor frames |
ltpxd | Display L-RCTU telemetry in hexadecimal |
rctu2b.38400 | Interface to L-RCTU at 24K baud (format 2) |
rctu2b.9600 | Interface to L-RCTU at 500 baud (format 1) |
sendCmds | Convert the output of bcmd to 24-bit for shim |
shim | Common interface for both CTUE and LRCTU |
|
|
| |
Image Loader Software
| |
genObjectImage | Generate an ACIS pixel image from an ASCII script |
genPixelImages | Generate an ACIS pixel stream from an ASCII script |
loadFitsImage | Converts FITS image to image loader format |
writeblock | Write to and execute a program in the Image Loader |
|
|
|
|
ACIS Telemetry Packet Handlers
| |
atpfilter | Filter bad packets out of an ACIS telemetry packet stream |
atpgroom | Repair corrupt ACIS packet headers |
fpkt | Filter ACIS telemetry packets by type and/or sequence number |
lpkt | Display contents of ACIS command packets or configurations |
pktCpy | Copy ACIS packets, optionally saving the data to one or more log files |
pthrottle | Copy minor frames or ACIS packets at a measured rate |
|
|
|
|
Software to Display psci Output Files
| |
atpxd | Lists contents of ACIS telemetry packets in hexadecimal |
fits2pnm | Convert a psci FITS image to pnm format |
lbadcol | Display contents of binary dumpedBadCol data files |
lbadpix | Display contents of binary dumpedBadPix data files |
lbthief | Display contents of biasThief object |
lconfig | Display contents of binary ACIS system configuration table |
lerv | Display contents of binary ERV event data files |
lerv5 | Display contents of binary ERV 5x5 event data files |
lhktrip | Display contents of deahkTrip object |
lhuff | Display contents of binary Huffman table block |
lpatch | Display contents of binary dumpedPatch data file |
ltxings | Display contents of binary txings patch dump blocks |
|
|
|
|
Engineering Telemetry Formatters
| |
atmgen | Generate a telemetry address-to-mnemonic file |
odb2ttm | Convert Chandra ODB database files to ttm format |
ttmgen | Generate a telemetry-to-mnemonic ttm file |
|
|
|
|
MIPS Software Simulator (obsolete)
| |
acisBepUnix | Simulate the ACIS Back End Processor on Ultrix MIPS OS |
acisFepUnix | Simulate the ACIS Front End Processor on Ultrix MIPS OS |
dumpring | Translate ACIS FEP ring buffer records to ASCII |
fepCtlTest | Simulate the ACIS front end processor |
fepImage2 | Load an image into a Unix FEP Simulation on Ultrix MIPS OS |
tlmsim | Simulate an ACIS telemetry packet stream |
|
|
|
|
Miscellaneous Utilities
| |
ACISshell | Interface to the ACIS CTUE (obsolete) |
cmd2bcmd | Transform binary ACIS commands to bcmd input format |
diff-ocat.pl | Compare two OCAT TSV download files |
ehscut | Split an EHS file and/or remove data blocks |
levt0 | Translate an ACIS Level 0 EVT file to ASCII |
levt1 | Translate an ACIS Level 1 EVT1 file to ASCII |
levt1 | Use outlier pixels to adjust bias in ACIS Level 1 EVT1 files |
lexr0 | Translate an ACIS Level 0 EXR file to ASCII |
mnfxd | Display contents of CXO minor frames in hexadecimal |
rts2bcmd | Transform binary ACIS commands to bcmd input format |
test-patch-load.pl | Compare patch dump vs CVS repository and SOT and FOT commands |
writeCCB | Package the output of sendCmds into CTUE command blocks |
|
|
The following table lists the power consumed by ACIS due to its various components. This table was derived from information gathered by Bob Goeke from the results of a series of Short Form and Long Form tests performed at Lincoln Laboratory (NOTE: This is taken from a note dated 19 May 1997, with some corrections from Ellen Sen on Sept. 9, 97). All the numbers shown include losses in the PSMC (order of 20% total):
State | Side-A | Side-B | A or B | Summary
|
PSMC Overhead | 3w | 3w | Total Overhead := 6w | |
BEP On and Running | 14w | 10w | Total BEP := 24w |
|
2 FEPs On | - | - | 16w |
|
3 FEPs + 3 FEPs On | 25w | 25w | Total FEP := 50w |
|
All BEPs and FEPs On (idle) | Total Static DPA := 74w |
|||
DEA 11th Board On | 24w |
| ||
DEA 12th Board On | 18w | |||
2 Video Boards On (idle) | 7w |
|
||
6 Video Boards On (idle) | 21w |
|
||
DEA 11th or 12th and 6 Video Boards On (idle) | Total Static DEA := 45w |
|||
Additional power with 3 + 3 FEPs processing images | 1w | 1w |
|
|
Additional power with 6 Video Boards Clocking | 8w |
|
||
Total Additional Power while clocking 6 CCDs | Extra for clocks := 10w |
|||
15w |
||||
2w/6w peak |
||||
52w peak |
||||
8w/72w peak |
||||
72w peak |
||||
145w |
||||
90w |
||||
54w |
||||
20w |
||||
168w |
||||
128w |
||||
276w |
||||
The following table indicates the total current draw by ACIS, from the perspective of the service from the spacecraft:
Note that 10.8A is the maximum one could draw from one service, A or B.
Table B.9 lists the patches active at the time this document was last updated when the GHI patch load was running on the flight instrument. The standard patches consist of bug fixes and systems changes that are needed for the smooth operation of the instrument. The developers strongly recommend that the standard patches are always loaded into the flight instrument during normal science operations. Refer to the latest release of MIT 36-58010 for a list and description of these patches.
New features and modes are provided in the suite of optional patch loads. Each of these loads is verified in combination with the latest standard patch load, and some of the engineering patches needed to access the test hardware. By default, the optional patches are NOT tested in combination. Refer to the latest version of MIT 36-58020 for a list and description of the set of available optional patches.
In order to manage testing of combinations of optional patches, separate verification tests are run on requested combinations of optional patches (always with the standard patch load in place). These combinations are provided distinct part numbers. The development team has not officially tested unlisted combinations of optional patches.
In order to support testing, debugging, and prototypes of future patch concepts, there are also a collection of engineering/prototype patches. These patches are not intended for normal operations, but must be small enough to be loaded into the ACIS engineering unit along with a flight patch load in order to test and verify the latter for release.
ID | Patch Name | Rev | Bytes | Part Number | ECO | Problem Reports
|
i | corruptblock | A | 16 | 36-58030.01 | 994 | |
ii | digestbiaserror | A | 64 | 36-58030.02 | 995 | |
iii | histogramvar | A | 16 | 36-58030.03 | 999 | |
iv | rquad | A | 16 | 36-58030.14 | 1000 | |
v | histogrammean | A | 156 | 36-58030.15 | 996 | |
vi | zap1expo | A | 64 | 36-58030.16 | 997 | |
vii | condoclk | A | 640 | 36-58030.17 | 1012 | |
viii | fepbiasparity2 | A | 504 | 36-58030.19 | 1015 | |
ix | cornermean | A | 32 | 36-58030.21 | 1017 | |
x | tlmbusy | A | 344 | 36-58030.29 | 1033 | |
xi | buscrash | B | 440 | 36-58030.30 | 1051 | |
xii | badpix | A | 60 | 36-58030.31 | 1037 | |
xiii | buscrash2 | C | 1576 | 36-58030.32 | 1047 | |
1 | smtimedlookup | A | 3712 | 36-58030.24 | 1025 | N/A |
2 | eventhist | B | 5908 | 36-58030.05 | 1025 | N/A |
3 | cc3x3 | B | 4636 | 36-58030.06 | 1018 | |
4 | ctireport1 | A | 5452 | 36-58030.25 | 1026 | N/A |
5 | ctireport2 | A | 2784 | 36-58030.26 | 1026 | N/A |
6 | compressall | A | 2368 | 36-58030.27 | 1027 | |
7 | reportgrade1 | A | 816 | 36-58030.22 | 1021 | |
8 | txings | A | 3128 | 36-58030.33 | 1044 | N/A |
9 | deahktrip | A | 1940 | 36-58030.34 | 1052 | N/A |
leaf | teignore | A | 36 | 36-58030.09 | 1003 | N/A |
leaf | ccignore | A | 36 | 36-58030.10 | 1004 | N/A |
12 | fepbiasparity1 | 2 | N/A | 36-58030.18 | 1014 | N/A |
13 | hybrid | 3 | 6104 | 36-58030.13 | 1010 | N/A |
14 | squeegy | 6 | 4412 | 36-58030.23 | 1023 | N/A |
15 | forcebiastrickle | 1 | N/A | 36-58030.29 | 1024 | |
10 | tlmio | 2 | 10312 | 36-58030.07 | 1010 | N/A |
11 | printswhouse | 1 | 7240 | 36-58030.08 | 986 | N/A |
leaf | deaeng | 2 | 2604 | 36-58030.11 | 1010 | N/A |
leaf | dearepl | 2 | 556 | 36-58030.12 | 1010 | N/A |
Table E.1 lists the patches that have run on the flight instrument. The “Ver” column shows the version number reported in software housekeeping packets after the change of patch load, where a version of 11 indicates that the instrument executed a cold boot, either by ground command or as a result of an anomalous BEP reboot.
Phase | Ver | Date | Rev | Sequence | CAP | Comments
| |
1 | oac1 | 11 | 1999-07-23T23:51:12 | First byte! |
|||
2 | oac1 | 26 | 1999-07-27T22:22:52 | AAA | sw_stdpatch | Adds corruptblock, digestbiaserror, histogramvar, biastiming, rquad, histogrammean & zap1expo |
|
3 | oac1 | 27 | 1999-07-29T08:53:53 | AAB | sw_evhcc3x3 | Adds eventhist & cc3x3 |
|
4 | oac1 | 11 | 1999-08-02T14:16:14 | Planned coldboot |
|||
5 | oac1 | 27 | 1999-08-02T21:24:15 | AAB | sw_evhcc3x3 | Reload | |
6 | oac2b | 11 | 1999-09-10T23:02:53 | 397 | Power-cycle test |
||
7 | oac2b | 27 | 1999-09-10T23:24:19 | AAB | sw_evhcc3x3 | 397 | Reload |
8 | oac2b | 11 | 1999-09-11T15:29:56 | 421 | Belt entry test |
||
9 | oac2b | 27 | 1999-09-11T15:44:56 | AAB | sw_evhcc3x3 | 410 | Reload |
10 | oac2b | 11 | 1999-09-19T10:45:47 | 441a | Planned coldboot |
||
11 | oac2b | 27 | 1999-09-19T11:01:05 | AAB | sw_evhcc3x3 | 441a | Reload |
12 | acis1d | 30 | 2000-01-08T18:59:56 | BBC | sw_evhcc3x3b | 540 |
Adds condoclk, fepbiasparity2 & cornermean |
13 | acis5b | 11 | 2000-09-13T19:17:39 | FEP_BUS_ERROR during SCS107 |
|||
14 | acis5b | 30 | 2000-09-14T16:46:45 | BBC | sw_evhcc3x3b | 654 | Reload |
15 | acis5d | 11 | 2000-10-26T19:16:20 |
DPA-A shutdown |
|||
16 | acis5d | 30 | 2000-10-26T21:19:34 | BBC | sw_evhcc3x3b | 754 | Reload |
17 | acis16c | 11 | 2002-12-20T06:20:02 |
DPA-A shutdown |
|||
18 | acis16c | 30 | 2002-12-20T06:35:08 | BBC | sw_evhcc3x3b | 818 | Reload |
19 | acis21a | 11 | 2003-11-02T20:41:03 |
FEP_BUS_ERROR during SCS107 |
|||
20 | acis21a | 30 | 2003-11-03T20:09:04 | BBC | sw_evhcc3x3b | 894 | Reload |
21 | acis24b | 31 | 2004-06-03T14:41:54 | BCC | sw_evhcc3x3_catl | 917 |
Adds smtimedlookup and compressall |
22 | acis39a | 11 | 2006-12-13T22:46:38 | FEP_BUS_ERROR during SCS107 |
|||
23 | acis39a | 31 | 2006-12-14T22:14:01 | BCC | sw_evhcc3x3_catl | 923 | Reload |
24 | acis45b | 11 | 2007-12-13T18:25:19 | DPA-B shutdown |
|||
25 | acis45b | 31 | 2007-12-14T03:15:09 | BCC | sw_evhcc3x3_catl | 1055 | Reload |
26 | acis49d | 11 | 2008-08-12T12:14:27 | FEP_BUS_ERROR during SCS107 |
|||
27 | acis49d | 31 | 2008-08-13T02:23:44 | BCC | sw_evhcc3x3_catl | 1067b | Reload |
28 | acis50c | 44 | 2008-10-01T19:49:50 | CCD | sw_stdcoptc | 1080 | Adds tlmbusy & buscrash |
29 | acis50c | 11 | 2008-10-05T01:49:09 | BEP crash |
|||
30 | acis50c | 44 | 2008-10-05T10:07:47 | CCD | sw_stdcoptc | 1080 | Reload |
31 | acis50c | 31 | 2008-10-06T03:42:22 | BCC | sw_evhcc3x3_catl | 1082 | Reverts due to fear that C-C-D caused BEP crash |
32 | acis52a | 44 | 2009-01-15T20:28:25 | CCD | sw_stdcoptc | 1105 | Reload |
33 | acis58e | 11 | 2010-01-25T09:12:11 | BEP power-on reboot |
|||
34 | acis58e | 44 | 2010-01-26T00:15:49 | CCD | sw_stdcoptc | 1145b | Reload |
35 | acis60a | 11 | 2010-04-07T11:49:55 | 1150 | Planned coldboot |
||
36 | acis60a | 48 | 2010-04-07T12:11:57 | EEF | sw_stdeopte | 1150 | Adds buscrash2 |
37 | acis69e | 50 | 2011-11-07T23:23:28 | EFG | sw_stdeoptf | 1217 | Adds txings |
38 | acis82a | 53 | 2014-06-11T15:23:54 | FGH | sw_stdfoptg | 1319 | Removes biastiming, updates buscrash2 |
39 | acis84d | 11 | 2015-01-12T21:18:24 | DPA-A shutdown |
|||
40 | acis84d | 53 | 2015-01-12T21:47:26 | FGH | sw_stdfoptg | 1342 | Reload |
41 | acis93d | 11 | 2016-12-09T22:27:00 | DPA-A shutdown |
|||
42 | acis93d | 53 | 2016-12-09T22:55:00 | FGH | sw_stdfoptg | 1407 | Reload |
43 | acis109d | 56 | 2020-01-23T17:58:42 | GHI | sw_stdgopth | 1503 | Updates buscrash, adds deahktrip |
These patch loads were uplinked by the command procedures listed in Table F.3.
Procedure | Name | Description
|
SOP_61083 | sw_evhcc3x3b | Flight S/W Standard Patch B, Optional Patch B |
SOP_ACIS_SW_EVHCC3X3_CATL | sw_evhcc3x3_catl | Flight S/W Standard Patch B, Optional Patch C |
SOP_ACIS_SW_STDCOPTC | sw_stdcoptc | Flight S/W Standard Patch C, Optional Patch C |
SOP_ACIS_SW_STDEOPTE | sw_stdeopte | Flight S/W Standard Patch E, Optional Patch E |
SOP_ACIS_SW_STDEOPTE_FIFO | sw_stdeopte_fifo | Flight S/W Standard Patch E, Optional Patch E + FIFO contingency |
SOP_ACIS_SW_STDEOPTF | sw_stdeoptf | Flight S/W Standard Patch E, Optional Patch F |
SOP_ACIS_SW_STDFOPTG | sw_stdfoptg | Flight S/W Standard Patch F, Optional Patch G |
SOP_ACIS_SW_STDGOPTH | sw_stdgopth | Flight S/W Standard Patch G, Optional Patch H |
The following elaborates some of the details behind “Jitter DAC”.
During ACIS testing, the team discovered the startup time (number of clocked frames) required to effectively clear charge accumulated by unclocked CCDs was large, over an hour. Analysis of the electronics design and lab experiments determined that clocking the CCDs using a select set of parallel clock voltages prior to starting an observation reduced that time to clear charge from the CCDs to just over eleven (11) seconds.
Accordingly, the ACIS software design changed to clock the CCDs for at least 11 seconds, prior to a bias map computation or main observation, but not both, using the following parallel clock voltages:
Settings | Affected CCDs | Jitter DEC Values
|
Nominal
Frontside
CCD
Image
Array
and
Frame
Store
Parallel
Clocking
Voltages | I0,
I1,
I2,
I3,
S0,
S2,
and
S5 | SYSSET_DAC_PIA_P := 90 (typically 220) |
|
| SYSSET_DAC_PIA_MP := 0 (typically 40) |
|
| SYSSET_DAC_PFS_M := 100 (typically 0) |
|
| SYSSET_DAC_PIA_P := 90 (typically 150) |
|
| SYSSET_DAC_PFS_MP := 0 (typically 0) |
|
| SYSSET_DAC_PFS_M := 100 (typically 0) |
Backside
CCD
Image
Array
and
Frame
Store
Parallel
Clocking
Voltages | S1,
S3 | SYSSET_DAC_PIA_P := 25 (typically 90) |
|
| SYSSET_DAC_PIA_MP := 0 (typically 0) |
|
| SYSSET_DAC_PIA_M := 80 (typically 100) |
|
| SYSSET_DAC_PFS_P := 25 (typically 90) |
|
| SYSSET_DAC_PFS_MP := 0 (typically 0) |
|
| SYSSET_DAC_PFS_M := 80 (typically 100) |
Off-nominal
Frontside
CCD
Image
Array
and
Parallel
Clocking
Voltages | S4 | SYSSET_DAC_PIA_P := 25 (typically 220) |
|
| SYSSET_DAC_PIA_MP := 0 (typically 40) |
|
| SYSSET_DAC_PIA_M := 80 (typically 0) |
|
| SYSSET_DAC_PFS_P := 25 (typically 220) |
|
| SYSSET_DAC_PFS_MP := 0 (typically 40) |
|
| SYSSET_DAC_PFS_M := 80 (typically 0) |
|
||
Figure H.1 illustrates a graphical representation of a single CCD. The figure on the left of the illustration presents a simplified picture of the main CCD components, and the figure on the right illustrates the pixel dimensions of each of the components.
Pixels in the 1024-column × 1026-row Image Array are exposed to X-rays (but only the top 1024 rows are used for data acquisition), after which the resulting charge is quickly moved into the shielded Frame Store of the same size, moved again, one row at a time, through Output Registers to Output Nodes, and through the video board’s preamplifiers and A/D converters, arriving at a FEP. The process is controlled by instructions executing in the video board’s program memory (PRAM). Those that move charge from row to row are termed “parallel”, while those that move it from column to column are called “serial”. The CCD is constructed so that charges in the Image Array and Frame Store can only move in the parallel direction and charges in the Output Registers can only move serially.
Each PRAM instruction does three things simultaneously:
adjusts the voltages across the CCD, causing charges to move in lock-step,
tells the FEPs what to do with the digitized charges it receives,
determines how many times the instruction should be repeated, and what to do after that.
In the following examples, the instructions are written in the form of subroutine calls:
Charges are moved within the CCD by varying 12 separate voltage levels in precisely choreographed sequences that are installed in the video board’s sequencer memory (SRAM) from a library maintained by the BEP. Each 128-byte entry defines 10 μsec of action: serial transfers use one entry, parallel transfers use four, one after the other. Since launch, all science observations and most calibration runs have used only the following four sequences. (The numbers in parentheses refer to their locations in the SRAM library.)
Parallel_Full (0–3)
transfer each row of charges in the combined Image Array and Frame Store by one row in the direction of the output registers. The charges in the bottom row of the Image Array move into the top row of the Frame Store, and the charges in the bottom row of the Frame Store move into the output registers. This action takes 40 μsec.
Parallel_Continuous (4–7)
an identical result to Parallel_Full but optimized for continuous clocking mode. This action also takes 40 μsec.
Parallel_Frame (8–11)
same as Parallel_Full except it only moves the charges in the Frame Store; those in the Image Array are unaffected. This action also takes 40 μsec.
Serial_Readout (20)
shift all the charges in the Output Registers by one pixel in the direction of their nearest Output Node. Once a charge has been moved through the additional set of 4 dummy pixels, it arrives at one of the 4 Output Nodes, from which it is amplified, digitized, and sent to the FEP. This action takes 10 μsec.
When passing a pixel to a FEP, the video board tags it with one of the following identifiers:
DATA | The pixel contains valid data that came from the Image Array |
OCLK | The pixel contains overclock data (i.e., zero charge, useful for calibration) |
VSYNC | Ignore this pixel, but data from the next exposure is about to arrive |
HSYNC | Ignore this pixel, but the end of a row has been reached |
IDLE | Ignore this pixel entirely |
The simplest timed exposure PRAM would contain the following:
Summing the instruction times together – 40 μsec for parallel and 10 μsec for serial – this exposure cycle repeats every 2.75995 seconds: 0.04104 sec of “Streak Time” while charge is being moved out of the Image Store, followed by 2.71891 seconds of “Static Exposure Time” while charges in the Image Store are held stationary and charges from the previous exposure are being read out of the Frame Store. In practice, PRAM programs are slightly more complicated, for several reasons:
Here is a the PRAM that the BEP generates from a parameter block that calls for 3.0 second timed exposures using 2 CCDs and 16 overclocks per row per node:
Note that the Parallel_Full and first pair of Parallel_Frame instructions are staggered in time so that the two CCDs don’t execute them simultaneously, but the other parallel actions are not, since they are separated by long periods of Serial_Readouts. The VSYNCs are not at the start of the static exposure period for that CCD, which begins at the end of the Parallel_Full instructions because (a) all FEPs can receive the VSYNC at the same time, and (b) it arrives at the last possible moment to give them time to finish processing data and overclocks from the previous frame. It is the task of subsequent ground processing to calculate the precise start-of-exposure time if full accuracy is desired.
The only change to PRAM to achieve sub-array readout is to increase the number of consecutive Parallel_Frame instructions by the number of rows to be ignored, and to stagger these transfers if more than one CCD is being clocked. In the following example, 2 CCDs are clocking a 300-row sub-array, starting at row 200. The exposure time is 1.0 second, which is the shortest possible time without resorting to a pre-flush (see below).
As we saw in Section H.4, the shortest time to read all 1024 rows from a single CCD with adequate overclocks is 3.0 seconds. To achieve shorter times without using sub-arrays or pixel summation (see H.9), we must make a short static exposure, move the charge into the Frame Store, read it out as usual, and then flush again, i.e., remove the charge that has accumulated in the Image Store. The only difference between the PRAM of a 3.0 second timed exposure, similar to the example in H.5, and a 0.1 second exposure with pre-flush is
at the start or end of the repeat forever loop. Of course, the price of this pre-flush is to reduce the static observing efficiency from 98.65% (3.0 secs out of 3.04104) to 3.22% (0.1 secs out of 3.10576). With multiple CCDs, the situation is more complicated because the extra flushes must also be staggered, which also limits the shortest possible exposure times even with pre-flushing, to 0.2 seconds with 4 or 5 CCDs, and 0.3 seconds with 6.
All continuous clocking science observations have been made with just two CCD Actions: Parallel_Continuous instructions are separated by long periods of Serial_Readouts, so they need not be staggered for multiple CCDs. The PRAM is as follows:
Each “frame” consists of 512 rows, allowing the FEP’s firmware to read the current frame while its CPU locates event candidates in the prior frame. In contrast to timed exposures, when the FEP must read and process each frame simultaneously, it is most unusual for FEPs to drop continuously clocked frames, even for high data-rate targets.
This Appendix has described the PRAM actions used for all 20+ years of on-orbit science observations and most of the calibration runs, omitting mention of the other CCD Actions stored in the BEP’s library of sequencer microcode (SRAM). Here are some of the exotic ones: the serial actions taking 10 μsec and the parallels 40 μsec.
Serial_Two_Pixel (21)
similar to the Serial_Readout but moves two pixels at a time from the Output Registers into the Output Nodes, summing the charges and halving the readout time at the cost of greater pileup and larger pixel size. The BEP uses it in timed exposure PRAM when onChip2x2Summing=1 in the parameter block, and in continuous clocking PRAM when columnSum=1.
Serial_Reverse (22)
similar to the Serial_Readout action but the charges in the Output Registers are moved backwards, i.e., away from their nearest Output Nodes. The BEP uses it in PRAM based on the value of outputRegisterMode in the parameter block:
Serial_Lower_Gain (23)
similar to Serial_Readout but the sampling period in the Output Nodes is shortened. This loses a factor of 4 in sensitivity but extends the dynamic range of the A/D output. The BEP uses it in PRAM when an element of ccdVideoResponse is 1 in the parameter block.
Parallel_Full_Reverse (40–43)
similar to Parallel_Full but the charges in each row of the Image Array and Frame Store are moved backwards, piling up in the topmost row of the Image Array.
Parallel_Frame_Reverse (36–39)
similar to Parallel_Frame but the charges in each row are moved backwards, piling up in the topmost row of the Frame Store.
Parallel_Frame_Special (12–15)
similar to Parallel_Frame, but the BEP uses it in conjunction with Serial_Reverse when outputRegisterMode is 1 or 3 in a timed exposure parameter block.
Parallel_Continuous_Special (16–19)
similar to Parallel_Continuous, but the BEP uses it in conjunction with Serial_Reverse when outputRegisterMode is 1 or 3 in a continuous clocking parameter block.
The detailed format of PRAM instructions is defined in Appendix A of the “DPA/DEA Interface Control Document” referenced in Table 1. Several ACIS EGSE commands have been written to help design and display PRAM loads. The buildPram command, which can be run in interactive or batch modes, creates PRAM from the parameters in timed exposure or continuous clocking parameter blocks. It is also compatible with the optional squeegee patch. The ASCII output consists of “write addr val” statements where “addr” is the index of a 16-bit “val” instruction, followed by “#” and comments describing the instruction.
Before the BEP allows a video board to execute its PRAM, it first tests it to determine whether the board is likely to draw sufficient current to damage the hardware. This test may also be made on the ground via the “pchk” command, which reads the buildPram output and runs through a complete PRAM cycle before deciding whether overheating is likely.
Finally, PRAM can be tested in the lab through the QEMU software ACIS emulator. The binary PRAM instructions must be written to a file whose name is included in the command file supplied by the -p option of the pramrun command, which sends pixels to the FEP emulators. Appropriate data and overclock values can be supplied.
The following table describes the contents of the parameter blocks recorded in a BEP’s EEPROM and copied to I-cache memory when the BEP is cold-booted or when the checksum is found to be corrupt.
Type | blockId | ccdIds | Contents
|
0 | I0-3, S2,3 | ||
1 | S0-5 | ||
2 | I0-3, S2,3 | ||
3 | S0-5 | ||
4 | I0-3, S2,3 | ||
0 | I0-3, S2,3 | ||
1 | S0-5 | ||
2 | I0-3, S2,3 | ||
3 | S0-5 | ||
4 | S0-5 | ||
0 | I0-3, S2,3 | ||
1 | S0-5 | ||
2 | I0-3 | ||
3 | S3 | ||
4 | I0-3, S0-5 | ||
0 | I0-3, S2,3 | ||
1 | I0-3, S0-5 | ||
2 | I0-3, S0-5 | ||
3 | S0-5 | ||
4 | S0-5 | ||
0 | - | ||
1 | - | ||
2 | - | ||
3 | - | ||
4 | - | ||
* The intention had been to exclude all but the S3 aimpoint region, but this parameter block accepts all columns of S3.
The following table compares the values of the individual fields in each of the 5 default timed exposure parameter blocks.
Parameter | Slot 0 | Slot 1 | Slot 2 | Slot 3 | Slot 4
|
parameterBlockId | 0x80000000 | 0x80000001 | 0x80000002 | 0x80000003 | 0x80000004 |
fepCcdSelect | 7 0 1 2 3 6 | 7 5 4 8 9 6 | 7 0 1 2 3 6 | 7 5 4 8 9 6 | 7 0 1 2 3 6 |
fepMode | 2 | 2 | 2 | 2 | 2 |
bepPackingMode | 0 | 0 | 2 | 1 | 2 |
onChip2x2Summing | 0 | 0 | 0 | 0 | 0 |
ignoreBadPixelMap | 0 | 0 | 0 | 0 | 0 |
ignoreBadColumnMap | 0 | 0 | 0 | 0 | 0 |
recomputeBias | 1 | 1 | 1 | 1 | 1 |
trickleBias | 1 | 1 | 1 | 0 | 1 |
subarrayStartRow | 0 | 0 | 0 | 0 | 0 |
subarrayRowCount | 1023 | 1023 | 1023 | 1023 | 1023 |
overclockPairsPerNode | 8 | 8 | 8 | 8 | 8 |
outputRegisterMode | 0 | 0 | 0 | 0 | 0 |
ccdVideoResponse | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 |
primaryExposure | 33 | 33 | 33 | 3 | 3 |
secondaryExposure | 0 | 0 | 0 | 33 | 0 |
dutyCycle | 0 | 0 | 0 | 15 | 0 |
fep0EventThreshold | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 |
fep1EventThreshold | 38 38 38 38 | 20 20 20 20 | 38 38 38 38 | 20 20 20 20 | 38 38 38 38 |
fep2EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep3EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep4EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep5EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep0SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep1SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep2SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep3SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep4SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep5SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
lowerEventAmplitude | 0 | 0 | 0 | 0 | 0 |
eventAmplitudeRange | 65535 | 65535 | 65535 | 65535 | 65535 |
gradeSelections | Accept all | Accept all | Accept all | Accept all | Accept all |
windowSlotIndex | 65535 | 65535 | 65535 | 65535 | 65535 |
histogramCount | 0 | 0 | 0 | 0 | 0 |
biasCompressionSlotIndex | 3 1 1 1 1 1 | 3 3 1 1 1 1 | 3 1 1 1 1 1 | 3 3 1 1 1 1 | 3 1 1 1 1 1 |
rawCompressionSlotIndex | 0 | 0 | 0 | 0 | 0 |
ignoreInitialFrames | 100 | 100 | 100 | 100 | 100 |
biasAlgorithmId | 1 1 1 1 1 1 | 1 1 1 1 1 1 | 1 1 1 1 1 1 | 1 1 1 1 1 1 | 1 1 1 1 1 1 |
biasArg0 | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 |
biasArg1 | 16 16 16 16 16 16 | 16 16 16 16 16 16 | 16 16 16 16 16 16 | 16 16 16 16 16 16 | 16 16 16 16 16 16 |
biasArg2 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 |
biasArg3 | 26 50 50 50 50 50 | 26 26 50 50 50 50 | 26 50 50 50 50 50 | 26 26 50 50 50 50 | 26 50 50 50 50 50 |
biasArg4 | 20 20 20 20 20 20 | 20 20 20 20 20 20 | 20 20 20 20 20 20 | 20 20 20 20 20 20 | 20 20 20 20 20 20 |
fep0VideoOffset | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 |
fep1VideoOffset | 87 86 76 89 | 79 99 76 95 | 87 86 76 89 | 79 99 76 95 | 87 86 76 89 |
fep2VideoOffset | 83 69 79 83 | 73 75 73 83 | 83 69 79 83 | 73 75 73 83 | 83 69 79 83 |
fep3VideoOffset | 86 65 82 89 | 72 72 78 71 | 86 65 82 89 | 72 72 78 71 | 86 65 82 89 |
fep4VideoOffset | 76 68 79 80 | 81 87 80 82 | 76 68 79 80 | 81 87 80 82 | 76 68 79 80 |
fep5VideoOffset | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 |
deaLoadOverride | 0 | 0 | 0 | 0 | 0 |
fepLoadOverride | 0 | 0 | 0 | 0 | 0 |
Default Timed Exposure Slot #0
commandLength | = 150 | |
commandIdentifier | = 65535 | |
commandOpcode | = 9 | # CMDOP_LOAD_TE |
teBlockSlotIndex | = 0 | |
checksum | = 13030 | |
parameterBlockId | = 0x80000000 | |
fepCcdSelect | = 7 0 1 2 3 6 | |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 0 | # BEP_TE_MODE_FAINT |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 0 | |
subarrayRowCount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 33 | |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 38 38 38 38 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
gradeSelections | = 0xffffffff 0xffffffff 0xffffffff 0xffffffff \
| |
0xffffffff 0xffffffff 0xffffffff 0xffffffff
| ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 3 1 1 1 1 1 | |
rawCompressionSlotIndex | = 0 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | |
biasArg0 | = 5 5 5 5 5 5 | |
biasArg1 | = 16 16 16 16 16 16 | |
biasArg2 | = 0 0 0 0 0 0 | |
biasArg3 | = 26 50 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 87 86 76 89 | |
fep2VideoOffset | = 83 69 79 83 | |
fep3VideoOffset | = 86 65 82 89 | |
fep4VideoOffset | = 76 68 79 80 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0x00000000 | |
fepLoadOverride | = 0x00000000 | |
Default Timed Exposure Slot #1
commandLength | = 150 | |
commandIdentifier | = 65535 | |
commandOpcode | = 9 | # CMDOP_LOAD_TE |
teBlockSlotIndex | = 1 | |
checksum | = 38314 | |
parameterBlockId | = 0x80000001 | |
fepCcdSelect | = 7 5 4 8 9 6 | |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 0 | # BEP_TE_MODE_FAINT |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 0 | |
subarrayRowCount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 33 | |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
gradeSelections | = 0xffffffff 0xffffffff 0xffffffff 0xffffffff \
| |
0xffffffff 0xffffffff 0xffffffff 0xffffffff | ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 3 3 1 1 1 1 | |
rawCompressionSlotIndex | = 0 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | |
biasArg0 | = 5 5 5 5 5 5 | |
biasArg1 | = 16 16 16 16 16 16 | |
biasArg2 | = 0 0 0 0 0 0 | |
biasArg3 | = 26 26 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 79 99 76 95 | |
fep2VideoOffset | = 73 75 73 83 | |
fep3VideoOffset | = 72 72 78 71 | |
fep4VideoOffset | = 81 87 80 82 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0x00000000 | |
fepLoadOverride | = 0x00000000 | |
Default Timed Exposure Slot #2
commandLength | = 150 | |
commandIdentifier | = 65535 | |
commandOpcode | = 9 | # CMDOP_LOAD_TE |
teBlockSlotIndex | = 2 | |
checksum | = 4836 | |
parameterBlockId | = 0x80000002 | |
fepCcdSelect | = 7 0 1 2 3 6 | |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 2 | # BEP_TE_MODE_GRADED |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 0 | |
subarrayRowCount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 33 | |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 38 38 38 38 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
gradeSelections | = 0xffffffff 0xffffffff 0xffffffff 0xffffffff \
| |
0xffffffff 0xffffffff 0xffffffff 0xffffffff | ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 3 1 1 1 1 1 | |
rawCompressionSlotIndex | = 0 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | |
biasArg0 | = 5 5 5 5 5 5 | |
biasArg1 | = 16 16 16 16 16 16 | |
biasArg2 | = 0 0 0 0 0 0 | |
biasArg3 | = 26 50 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 87 86 76 89 | |
fep2VideoOffset | = 83 69 79 83 | |
fep3VideoOffset | = 86 65 82 89 | |
fep4VideoOffset | = 76 68 79 80 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0x00000000 | |
fepLoadOverride | = 0x00000000 | |
Default Timed Exposure Slot #3
commandLength | = 150 | |
commandIdentifier | = 65535 | |
commandOpcode | = 9 | # CMDOP_LOAD_TE |
teBlockSlotIndex | = 3 | |
checksum | = 34228 | |
parameterBlockId | = 0x80000003 | |
fepCcdSelect | = 7 5 4 8 9 6 | |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 1 | # BEP_TE_MODE_FAINTBIAS |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 0 | |
subarrayStartRow | = 0 | |
subarrayRowCount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 3 | |
secondaryExposure | = 33 | |
dutyCycle | = 15 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
gradeSelections | = 0xffffffff 0xffffffff 0xffffffff 0xffffffff \
| |
0xffffffff 0xffffffff 0xffffffff 0xffffffff | ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 3 3 1 1 1 1 | |
rawCompressionSlotIndex | = 0 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | |
biasArg0 | = 5 5 5 5 5 5 | |
biasArg1 | = 16 16 16 16 16 16 | |
biasArg2 | = 0 0 0 0 0 0 | |
biasArg3 | = 26 26 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 79 99 76 95 | |
fep2VideoOffset | = 73 75 73 83 | |
fep3VideoOffset | = 72 72 78 71 | |
fep4VideoOffset | = 81 87 80 82 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0x00000000 | |
fepLoadOverride | = 0x00000000 | |
Default Timed Exposure Slot #4
commandLength | = 150 | |
commandIdentifier | = 65535 | |
commandOpcode | = 9 | # CMDOP_LOAD_TE |
teBlockSlotIndex | = 4 | |
checksum | = 4800 | |
parameterBlockId | = 0x80000004 | |
fepCcdSelect | = 7 0 1 2 3 6 | |
fepMode | = 2 | # FEP_TE_MODE_EV3x3 |
bepPackingMode | = 2 | # BEP_TE_MODE_GRADED |
onChip2x2Summing | = 0 | |
ignoreBadPixelMap | = 0 | |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
subarrayStartRow | = 0 | |
subarrayRowCount | = 1023 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
primaryExposure | = 3 | |
secondaryExposure | = 0 | |
dutyCycle | = 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 38 38 38 38 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
gradeSelections | = 0xffffffff 0xffffffff 0xffffffff 0xffffffff \
| |
0xffffffff 0xffffffff 0xffffffff 0xffffffff | ||
windowSlotIndex | = 65535 | |
histogramCount | = 0 | |
biasCompressionSlotIndex | = 3 1 1 1 1 1 | |
rawCompressionSlotIndex | = 0 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 1 1 1 1 1 1 | |
biasArg0 | = 5 5 5 5 5 5 | |
biasArg1 | = 16 16 16 16 16 16 | |
biasArg2 | = 0 0 0 0 0 0 | |
biasArg3 | = 26 50 50 50 50 50 | |
biasArg4 | = 20 20 20 20 20 20 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 87 86 76 89 | |
fep2VideoOffset | = 83 69 79 83 | |
fep3VideoOffset | = 86 65 82 89 | |
fep4VideoOffset | = 76 68 79 80 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0x00000000 | |
fepLoadOverride | = 0x00000000 | |
The following table compares the values of the individual fields in each of the 5 default continuous clocking parameter blocks.
Parameter | Slot 0 | Slot 1 | Slot 2 | Slot 3 | Slot 4
|
parameterBlockId | 0x90000000 | 0x90000001 | 0x90000002 | 0x90000003 | 0x90000004 |
fepCcdSelect | 7 0 1 2 3 6 | 7 5 4 8 9 6 | 7 0 1 2 3 6 | 7 5 4 8 9 6 | 7 5 4 8 9 6 |
fepMode | 1 | 1 | 1 | 1 | 1 |
bepPackingMode | 0 | 0 | 0 | 0 | 1 |
ignoreBadColumnMap | 0 | 0 | 0 | 0 | 0 |
recomputeBias | 1 | 1 | 1 | 1 | 1 |
trickleBias | 1 | 1 | 1 | 1 | 1 |
rowSum | 0 | 0 | 1 | 1 | 0 |
columnSum | 0 | 0 | 0 | 0 | 0 |
overclockPairsPerNode | 8 | 8 | 8 | 8 | 8 |
outputRegisterMode | 0 | 0 | 0 | 0 | 0 |
ccdVideoResponse | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 |
fep0EventThreshold | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 | 20 20 20 20 |
fep1EventThreshold | 38 38 38 38 | 20 20 20 20 | 38 38 38 38 | 20 20 20 20 | 20 20 20 20 |
fep2EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep3EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep4EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep5EventThreshold | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 | 38 38 38 38 |
fep0SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep1SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep2SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep3SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep4SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
fep5SplitThreshold | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 | 13 13 13 13 |
lowerEventAmplitude | 0 | 0 | 0 | 0 | 0 |
eventAmplitudeRange | 24570 | 24570 | 24570 | 24570 | 24570 |
gradeSelections | 15 | 15 | 15 | 15 | 15 |
windowSlotIndex | 65535 | 65535 | 65535 | 65535 | 65535 |
rawCompressionSlotIndex | 255 | 255 | 255 | 255 | 255 |
ignoreInitialFrames | 100 | 100 | 100 | 100 | 100 |
biasAlgorithmId | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 | 0 0 0 0 0 0 |
biasRejection | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 | 5 5 5 5 5 5 |
fep0VideoOffset | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 | 79 79 79 77 |
fep1VideoOffset | 87 86 76 89 | 79 99 76 95 | 87 86 76 89 | 79 99 76 95 | 79 99 76 95 |
fep2VideoOffset | 83 69 79 83 | 73 75 73 83 | 83 69 79 83 | 73 75 73 83 | 73 75 73 83 |
fep3VideoOffset | 86 65 82 89 | 72 72 78 71 | 86 65 82 89 | 72 72 78 71 | 72 72 78 71 |
fep4VideoOffset | 76 68 79 80 | 81 87 80 82 | 76 68 79 80 | 81 87 80 82 | 81 87 80 82 |
fep5VideoOffset | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 | 90 86 79 94 |
deaLoadOverride | 0 | 0 | 0 | 0 | 0 |
fepLoadOverride | 0 | 0 | 0 | 0 | 0 |
Default Continuous Clocking Slot #0
commandLength | = 102 | |
commandIdentifier | = 65535 | |
commandOpcode | = 10 | # CMDOP_LOAD_CC |
ccBlockSlotIndex | = 0 | |
checksum | = 20729 | |
parameterBlockId | = 0x90000000 | |
fepCcdSelect | = 7 0 1 2 3 6 | |
fepMode | = 1 | # FEP_CC_MODE_EV1x3 |
bepPackingMode | = 0 | # BEP_CC_MODE_FAINT |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 0 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 38 38 38 38 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
gradeSelections | = 0x000f | |
windowSlotIndex | = 65535 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 0 0 0 0 0 0 | |
biasRejection | = 5 5 5 5 5 5 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 87 86 76 89 | |
fep2VideoOffset | = 83 69 79 83 | |
fep3VideoOffset | = 86 65 82 89 | |
fep4VideoOffset | = 76 68 79 80 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
Default Continuous Clocking Slot #1
commandLength | = 102 | |
commandIdentifier | = 65535 | |
commandOpcode | = 10 | # CMDOP_LOAD_CC |
ccBlockSlotIndex | = 1 | |
checksum | = 62877 | |
parameterBlockId | = 0x90000001 | |
fepCcdSelect | = 7 5 4 8 9 6 | |
fepMode | = 1 | # FEP_CC_MODE_EV1x3 |
bepPackingMode | = 0 | # BEP_CC_MODE_FAINT |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 0 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
gradeSelections | = 0x000f | |
windowSlotIndex | = 65535 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 0 0 0 0 0 0 | |
biasRejection | = 5 5 5 5 5 5 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 79 99 76 95 | |
fep2VideoOffset | = 73 75 73 83 | |
fep3VideoOffset | = 72 72 78 71 | |
fep4VideoOffset | = 81 87 80 82 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
Default Continuous Clocking Slot #2
commandLength | = 102 | |
commandIdentifier | = 65535 | |
commandOpcode | = 10 | # CMDOP_LOAD_CC |
ccBlockSlotIndex | = 2 | |
checksum | = 20723 | |
parameterBlockId | = 0x90000002 | |
fepCcdSelect | = 7 0 1 2 3 6 | |
fepMode | = 1 | # FEP_CC_MODE_EV1x3 |
bepPackingMode | = 0 | # BEP_CC_MODE_FAINT |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 1 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 38 38 38 38 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
gradeSelections | = 0x000f | |
windowSlotIndex | = 65535 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 0 0 0 0 0 0 | |
biasRejection | = 5 5 5 5 5 5 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 87 86 76 89 | |
fep2VideoOffset | = 83 69 79 83 | |
fep3VideoOffset | = 86 65 82 89 | |
fep4VideoOffset | = 76 68 79 80 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
Default Continuous Clocking Slot #3
commandLength | = 102 | |
commandIdentifier | = 65535 | |
commandOpcode | = 10 | # CMDOP_LOAD_CC |
ccBlockSlotIndex | = 3 | |
checksum | = 62871 | |
parameterBlockId | = 0x90000003 | |
fepCcdSelect | = 7 5 4 8 9 6 | |
fepMode | = 1 | # FEP_CC_MODE_EV1x3 |
bepPackingMode | = 0 | # BEP_CC_MODE_FAINT |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 1 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
gradeSelections | = 0x000f | |
windowSlotIndex | = 65535 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 0 0 0 0 0 0 | |
biasRejection | = 5 5 5 5 5 5 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 79 99 76 95 | |
fep2VideoOffset | = 73 75 73 83 | |
fep3VideoOffset | = 72 72 78 71 | |
fep4VideoOffset | = 81 87 80 82 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
Default Continuous Clocking Slot #4
commandLength | = 102 | |
commandIdentifier | = 65535 | |
commandOpcode | = 10 | # CMDOP_LOAD_CC |
ccBlockSlotIndex | = 4 | |
checksum | = 58776 | |
parameterBlockId | = 0x90000004 | |
fepCcdSelect | = 7 5 4 8 9 6 | |
fepMode | = 1 | # FEP_CC_MODE_EV1x3 |
bepPackingMode | = 1 | # BEP_CC_MODE_GRADED |
ignoreBadColumnMap | = 0 | |
recomputeBias | = 1 | |
trickleBias | = 1 | |
rowSum | = 0 | |
columnSum | = 0 | |
overclockPairsPerNode | = 8 | |
outputRegisterMode | = 0 | # QUAD_FULL |
ccdVideoResponse | = 0 0 0 0 0 0 | |
fep0EventThreshold | = 20 20 20 20 | |
fep1EventThreshold | = 20 20 20 20 | |
fep2EventThreshold | = 38 38 38 38 | |
fep3EventThreshold | = 38 38 38 38 | |
fep4EventThreshold | = 38 38 38 38 | |
fep5EventThreshold | = 38 38 38 38 | |
fep0SplitThreshold | = 13 13 13 13 | |
fep1SplitThreshold | = 13 13 13 13 | |
fep2SplitThreshold | = 13 13 13 13 | |
fep3SplitThreshold | = 13 13 13 13 | |
fep4SplitThreshold | = 13 13 13 13 | |
fep5SplitThreshold | = 13 13 13 13 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
gradeSelections | = 0x000f | |
windowSlotIndex | = 65535 | |
rawCompressionSlotIndex | = 255 | |
ignoreInitialFrames | = 100 | |
biasAlgorithmId | = 0 0 0 0 0 0 | |
biasRejection | = 5 5 5 5 5 5 | |
fep0VideoOffset | = 79 79 79 77 | |
fep1VideoOffset | = 79 99 76 95 | |
fep2VideoOffset | = 73 75 73 83 | |
fep3VideoOffset | = 72 72 78 71 | |
fep4VideoOffset | = 81 87 80 82 | |
fep5VideoOffset | = 90 86 79 94 | |
deaLoadOverride | = 0 | |
fepLoadOverride | = 0 | |
Default 2-Dimensional Window Slot #0
commandLength | = 57 | |
commandIdentifier | = 65535 | |
commandOpcode | = 11 | # CMDOP_LOAD_2D |
windowSlotIndex | = 0 | |
checksum | = 8227 | |
windowBlockId | = 0xa0000000 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdRow | = 938 | |
ccdColumn | = 813 | |
width | = 210 | |
height | = 85 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[1] = { | ||
ccdId | = 0 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[2] = { | ||
ccdId | = 1 | |
ccdRow | = 810 | |
ccdColumn | = 0 | |
width | = 210 | |
height | = 213 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[3] = { | ||
ccdId | = 1 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[4] = { | ||
ccdId | = 2 | |
ccdRow | = 938 | |
ccdColumn | = 0 | |
width | = 88 | |
height | = 85 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[5] = { | ||
ccdId | = 2 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[6] = { | ||
ccdId | = 3 | |
ccdRow | = 810 | |
ccdColumn | = 935 | |
width | = 88 | |
height | = 213 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[7] = { | ||
ccdId | = 3 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[8] = { | ||
ccdId | = 6 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[9] = { | ||
ccdId | = 7 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
Default 2-Dimensional Window Slot #1
commandLength | = 42 | |
commandIdentifier | = 65535 | |
commandOpcode | = 11 | # CMDOP_LOAD_2D |
windowSlotIndex | = 1 | |
checksum | = 14060 | |
windowBlockId | = 0xa0000001 | |
windows[0] = { | ||
ccdId | = 4 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[1] = { | ||
ccdId | = 5 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[2] = { | ||
ccdId | = 6 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[3] = { | ||
ccdId | = 7 | |
ccdRow | = 362 | |
ccdColumn | = 101 | |
width | = 299 | |
height | = 299 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[4] = { | ||
ccdId | = 7 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[5] = { | ||
ccdId | = 8 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[6] = { | ||
ccdId | = 9 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
Default 2-Dimensional Window Slot #2
commandLength | = 27 | |
commandIdentifier | = 65535 | |
commandOpcode | = 11 | # CMDOP_LOAD_2D |
windowSlotIndex | = 2 | |
checksum | = 8224 | |
windowBlockId | = 0xa0000002 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdRow | = 938 | |
ccdColumn | = 813 | |
width | = 210 | |
height | = 85 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[1] = { | ||
ccdId | = 1 | |
ccdRow | = 810 | |
ccdColumn | = 0 | |
width | = 210 | |
height | = 213 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[2] = { | ||
ccdId | = 2 | |
ccdRow | = 938 | |
ccdColumn | = 0 | |
width | = 88 | |
height | = 85 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[3] = { | ||
ccdId | = 3 | |
ccdRow | = 810 | |
ccdColumn | = 935 | |
width | = 88 | |
height | = 213 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
Default 2-Dimensional Window Slot #3
commandLength | = 12 | |
commandIdentifier | = 65535 | |
commandOpcode | = 11 | # CMDOP_LOAD_2D |
windowSlotIndex | = 3 | |
checksum | = 9967 | |
windowBlockId | = 0xa0000003 | |
windows[0] = { | ||
ccdId | = 7 | |
ccdRow | = 362 | |
ccdColumn | = 101 | |
width | = 299 | |
height | = 299 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
Default 2-Dimensional Window Slot #4
commandLength | = 57 | |
commandIdentifier | = 65535 | |
commandOpcode | = 11 | # CMDOP_LOAD_2D |
windowSlotIndex | = 4 | |
checksum | = 45061 | |
windowBlockId | = 0xa0000004 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[1] = { | ||
ccdId | = 1 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[2] = { | ||
ccdId | = 2 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[3] = { | ||
ccdId | = 3 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[4] = { | ||
ccdId | = 4 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[5] = { | ||
ccdId | = 5 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[6] = { | ||
ccdId | = 6 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[7] = { | ||
ccdId | = 7 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[8] = { | ||
ccdId | = 8 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
windows[9] = { | ||
ccdId | = 9 | |
ccdRow | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
height | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 65535 | |
} | ||
Default 1-Dimensional Window Slot #0
commandLength | = 45 | |
commandIdentifier | = 65535 | |
commandOpcode | = 12 | # CMDOP_LOAD_1D |
windowSlotIndex | = 0 | |
checksum | = 24892 | |
windowBlockId | = 0xb0000000 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdColumn | = 813 | |
width | = 210 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[1] = { | ||
ccdId | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[2] = { | ||
ccdId | = 1 | |
ccdColumn | = 0 | |
width | = 210 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[3] = { | ||
ccdId | = 1 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[4] = { | ||
ccdId | = 2 | |
ccdColumn | = 0 | |
width | = 88 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[5] = { | ||
ccdId | = 2 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[6] = { | ||
ccdId | = 3 | |
ccdColumn | = 935 | |
width | = 88 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[7] = { | ||
ccdId | = 3 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[8] = { | ||
ccdId | = 6 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[9] = { | ||
ccdId | = 7 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
Default 1-Dimensional Window Slot #1
commandLength | = 45 | |
commandIdentifier | = 65535 | |
commandOpcode | = 12 | # CMDOP_LOAD_1D |
windowSlotIndex | = 1 | |
checksum | = 5917 | |
windowBlockId | = 0xb0000001 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[1] = { | ||
ccdId | = 1 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[2] = { | ||
ccdId | = 2 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[3] = { | ||
ccdId | = 3 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[4] = { | ||
ccdId | = 4 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[5] = { | ||
ccdId | = 5 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[6] = { | ||
ccdId | = 6 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[7] = { | ||
ccdId | = 7 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[8] = { | ||
ccdId | = 8 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[9] = { | ||
ccdId | = 9 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
Default 1-Dimensional Window Slot #2
commandLength | = 45 | |
commandIdentifier | = 65535 | |
commandOpcode | = 12 | # CMDOP_LOAD_1D |
windowSlotIndex | = 2 | |
checksum | = 5919 | |
windowBlockId | = 0xb0000002 | |
windows[0] = { | ||
ccdId | = 0 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[1] = { | ||
ccdId | = 1 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[2] = { | ||
ccdId | = 2 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[3] = { | ||
ccdId | = 3 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[4] = { | ||
ccdId | = 4 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[5] = { | ||
ccdId | = 5 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[6] = { | ||
ccdId | = 6 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[7] = { | ||
ccdId | = 7 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[8] = { | ||
ccdId | = 8 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[9] = { | ||
ccdId | = 9 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
Default 1-Dimensional Window Slot #3
commandLength | = 30 | |
commandIdentifier | = 65535 | |
commandOpcode | = 12 | # CMDOP_LOAD_1D |
windowSlotIndex | = 3 | |
checksum | = 22604 | |
windowBlockId | = 0xb0000003 | |
windows[0] = { | ||
ccdId | = 4 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[1] = { | ||
ccdId | = 5 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[2] = { | ||
ccdId | = 6 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[3] = { | ||
ccdId | = 7 | |
ccdColumn | = 101 | |
width | = 299 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[4] = { | ||
ccdId | = 8 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[5] = { | ||
ccdId | = 9 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
Default 1-Dimensional Window Slot #4
commandLength | = 30 | |
commandIdentifier | = 65535 | |
commandOpcode | = 12 | # CMDOP_LOAD_1D |
windowSlotIndex | = 4 | |
checksum | = 18506 | |
windowBlockId | = 0xb0000004 | |
windows[0] = { | ||
ccdId | = 4 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[1] = { | ||
ccdId | = 5 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[2] = { | ||
ccdId | = 6 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[3] = { | ||
ccdId | = 7 | |
ccdColumn | = 101 | |
width | = 299 | |
sampleCycle | = 0 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[4] = { | ||
ccdId | = 8 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
windows[5] = { | ||
ccdId | = 9 | |
ccdColumn | = 0 | |
width | = 1023 | |
sampleCycle | = 1 | |
lowerEventAmplitude | = 0 | |
eventAmplitudeRange | = 24570 | |
} | ||
Default DEA Housekeeping Slot #0
commandLength | = 42 | |
commandIdentifier | = 65535 | |
commandOpcode | = 13 | # CMDOP_LOAD_DEA |
deaBlockSlotIndex | = 0 | |
checksum | = 59200 | |
deaBlockId | = 0xc0000000 | |
sampleRate | = 64 | |
queries[0] = { | ||
ccdId | = 10 | |
queryId | = 1 | # DEAHOUSE_CNTL_ADC_TMP_BEP_PCB |
} | ||
queries[1] = { | ||
ccdId | = 10 | |
queryId | = 2 | # DEAHOUSE_CNTL_ADC_TMP_BEP_OSC |
} | ||
queries[2] = { | ||
ccdId | = 10 | |
queryId | = 3 | # DEAHOUSE_CNTL_ADC_TMP_FEP0_MONG |
} | ||
queries[3] = { | ||
ccdId | = 10 | |
queryId | = 4 | # DEAHOUSE_CNTL_ADC_TMP_FEP0_PCB |
} | ||
queries[4] = { | ||
ccdId | = 10 | |
queryId | = 5 | # DEAHOUSE_CNTL_ADC_TMP_FEP0_ACTEL |
} | ||
queries[5] = { | ||
ccdId | = 10 | |
queryId | = 6 | # DEAHOUSE_CNTL_ADC_TMP_FEP0_RAM |
} | ||
queries[6] = { | ||
ccdId | = 10 | |
queryId | = 7 | # DEAHOUSE_CNTL_ADC_TMP_FEP0_FB |
} | ||
queries[7] = { | ||
ccdId | = 10 | |
queryId | = 8 | # DEAHOUSE_CNTL_ADC_TMP_FEP1_MONG |
} | ||
queries[8] = { | ||
ccdId | = 10 | |
queryId | = 9 | # DEAHOUSE_CNTL_ADC_TMP_FEP1_PCB |
} | ||
queries[9] = { | ||
ccdId | = 10 | |
queryId | = 10 | # DEAHOUSE_CNTL_ADC_TMP_FEP1_ACTEL |
} | ||
queries[10] = { | ||
ccdId | = 10 | |
queryId | = 11 | # DEAHOUSE_CNTL_ADC_TMP_FEP1_RAM |
} | ||
queries[11] = { | ||
ccdId | = 10 | |
queryId | = 12 | # DEAHOUSE_CNTL_ADC_TMP_FEP1_FB |
} | ||
queries[12] = { | ||
ccdId | = 10 | |
queryId | = 15 | # DEAHOUSE_CNTL_ADC_FPTEMP_12 |
} | ||
queries[13] = { | ||
ccdId | = 10 | |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries[14] = { | ||
ccdId | = 10 | |
queryId | = 17 | # DEAHOUSE_CNTL_ADC_DPAGNDREF1 |
} | ||
queries[15] = { | ||
ccdId | = 10 | |
queryId | = 18 | # DEAHOUSE_CNTL_ADC_DPA5VHKA |
} | ||
queries[16] = { | ||
ccdId | = 10 | |
queryId | = 19 | # DEAHOUSE_CNTL_ADC_DPAGNDREF2 |
} | ||
queries[17] = { | ||
ccdId | = 10 | |
queryId | = 20 | # DEAHOUSE_CNTL_ADC_DPA5VHKB |
} | ||
queries[18] = { | ||
ccdId | = 10 | |
queryId | = 25 | # DEAHOUSE_CNTL_ADC_DEA28VDCA |
} | ||
queries[19] = { | ||
ccdId | = 10 | |
queryId | = 26 | # DEAHOUSE_CNTL_ADC_DEA24VDCA |
} | ||
queries[20] = { | ||
ccdId | = 10 | |
queryId | = 27 | # DEAHOUSE_CNTL_ADC_DEAM15VDCA |
} | ||
queries[21] = { | ||
ccdId | = 10 | |
queryId | = 28 | # DEAHOUSE_CNTL_ADC_DEAP15VDCA |
} | ||
queries[22] = { | ||
ccdId | = 10 | |
queryId | = 29 | # DEAHOUSE_CNTL_ADC_DEAM6VDCA |
} | ||
queries[23] = { | ||
ccdId | = 10 | |
queryId | = 30 | # DEAHOUSE_CNTL_ADC_DEAP6VDCA |
} | ||
queries[24] = { | ||
ccdId | = 10 | |
queryId | = 31 | # DEAHOUSE_CNTL_ADC_RAD_PCB_A |
} | ||
queries[25] = { | ||
ccdId | = 10 | |
queryId | = 32 | # DEAHOUSE_CNTL_ADC_GND_1 |
} | ||
queries[26] = { | ||
ccdId | = 10 | |
queryId | = 33 | # DEAHOUSE_CNTL_ADC_DEA28VDCB |
} | ||
queries[27] = { | ||
ccdId | = 10 | |
queryId | = 34 | # DEAHOUSE_CNTL_ADC_DEA24VDCB |
} | ||
queries[28] = { | ||
ccdId | = 10 | |
queryId | = 35 | # DEAHOUSE_CNTL_ADC_DEAM15VDCB |
} | ||
queries[29] = { | ||
ccdId | = 10 | |
queryId | = 36 | # DEAHOUSE_CNTL_ADC_DEAP15VDCB |
} | ||
queries[30] = { | ||
ccdId | = 10 | |
queryId | = 37 | # DEAHOUSE_CNTL_ADC_DEAM6VDCB |
} | ||
queries[31] = { | ||
ccdId | = 10 | |
queryId | = 38 | # DEAHOUSE_CNTL_ADC_DEAP6VDCB |
} | ||
queries[32] = { | ||
ccdId | = 10 | |
queryId | = 39 | # DEAHOUSE_CNTL_ADC_RAD_PCB_B |
} | ||
queries[33] = { | ||
ccdId | = 10 | |
queryId | = 40 | # DEAHOUSE_CNTL_ADC_GND_2 |
} | ||
Default DEA Housekeeping Slot #1
commandLength | = 10 | |
commandIdentifier | = 65535 | |
commandOpcode | = 13 | # CMDOP_LOAD_DEA |
deaBlockSlotIndex | = 1 | |
checksum | = 49473 | |
deaBlockId | = 0xc0000001 | |
sampleRate | = 64 | |
queries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries[1] = { | ||
ccdId | = 10 | |
queryId | = 17 | # DEAHOUSE_CNTL_ADC_DPAGNDREF1 |
} | ||
Default DEA Housekeeping Slot #2
commandLength | = 10 | |
commandIdentifier | = 65535 | |
commandOpcode | = 13 | # CMDOP_LOAD_DEA |
deaBlockSlotIndex | = 2 | |
checksum | = 49474 | |
deaBlockId | = 0xc0000002 | |
sampleRate | = 64 | |
queries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries[1] = { | ||
ccdId | = 10 | |
queryId | = 17 | # DEAHOUSE_CNTL_ADC_DPAGNDREF1 |
} | ||
Default DEA Housekeeping Slot #3
commandLength | = 10 | |
commandIdentifier | = 65535 | |
commandOpcode | = 13 | # CMDOP_LOAD_DEA |
deaBlockSlotIndex | = 3 | |
checksum | = 49475 | |
deaBlockId | = 0xc0000003 | |
sampleRate | = 64 | |
queries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries[1] = { | ||
ccdId | = 10 | |
queryId | = 17 | # DEAHOUSE_CNTL_ADC_DPAGNDREF1 |
} | ||
Default DEA Housekeeping Slot #4
commandLength | = 10 | |
commandIdentifier | = 65535 | |
commandOpcode | = 13 | # CMDOP_LOAD_DEA |
deaBlockSlotIndex | = 4 | |
checksum | = 49476 | |
deaBlockId | = 0xc0000004 | |
sampleRate | = 64 | |
queries[0] = { | ||
ccdId | = 10 | |
queryId | = 16 | # DEAHOUSE_CNTL_ADC_FPTEMP_11 |
} | ||
queries[1] = { | ||
ccdId | = 10 | |
queryId | = 17 | # DEAHOUSE_CNTL_ADC_DPAGNDREF1 |
} | ||
This appendix describes event grade codes. These codes summarize the distribution of a candidate X-ray event’s charge split between neighboring pixels on the CCD by identifying pixels whose pulse heights exceed a configurable threshold, the fep[0-5]SplitThreshold, and setting bits in the grade code corresponding to those pixels.
In Timed Exposure Mode, the instrument initially identifies candidate X-ray events by finding pixels whose values exceed a configurable threshold, the fep[0-5]EventThreshold. Once it finds a candidate event, it examines the adjacent pixels surrounding that pixel (see Figure J.1, where the center pixel is in black, the edge pixels are shaded with diagonal lines, and the corner pixels are grey). Given pixels in a 3x3 grid surrounding a center pixel, the software assigns a bit number in the grade code to that pixel, a total of 8-bits (excluding the center pixel). If the corrected pulse height value of a pixel exceeds the fep[0-5]SplitThreshold, it sets the corresponding bit in that code to a logical ‘1’. Conversely, if the pixel is below the fep[0-5]SplitThreshold, it sets the bit to a logical ‘0’.
The software calculates the corrected pixel pulse height as follows:
corrected_pixel = pixel_pulse_height - (pixel_bias + delta_overclock) |
The overall event pulse height is the sum of the center pixel’s corrected pulse height, the edge pixel corrected pulse heights above the split threshold and their adjacent corner pixel corrected pulse heights above the split threshold. Corner pixels that are not adjacent to an edge pixel whose value exceeds the split threshold are not added to the overall event pulse height. For example, if pixel B (edge), C (corner) and H (corner) have corrected pulse heights above the split threshold, only values from pixels B and C are added to the total; H isn’t adjacent to an edge pixel above the split threshold. The system uses a 3x3 grid for grading for both 3x3 and 5x5 events.
Note that there are patches impacting grade code determination and pulse height calculations. These patches address implementation errors in the as-launched version of the instrument flight software and do not affect the overall algorithm.
In Continuous Clocking Mode, just as in Timed Exposure Mode, the instrument initially identifies candidate X-ray events by finding pixels whose values exceed a configurable threshold, the fep[0-5]EventThreshold. Once it finds a candidate event, it examines the adjacent pixels surrounding that pixel (see Figure 6, where the center pixel is in black, and the edge pixels are shaded with diagonal lines). Given pixels in a 1x3 array surrounding a center pixel, the software assigns a bit number in the grade code to that pixel, a total of 2-bits (excluding the center pixel). If the corrected pulse height value of a pixel exceeds the fep[0-5]SplitThreshold, it sets the corresponding bit in that code to a logical ‘1’. Conversely, if the pixel is below the fep[0-5]SplitThreshold, it sets the bit to a logical ‘0’.
The software calculates the corrected pixel pulse height calculation is the same as in Timed Exposure mode:
corrected_pixel = pixel_pulse_height - (pixel_bias + delta_overclock) |
The overall event pulse height is the sum of the center pixel’s corrected pulse height and adjacent pixel corrected pulse heights above the split threshold.
When the cc3x3 patch is active and a 3x3 mode is selected, the event candidates are 3x3 pixel arrays and are graded in the same manner as in Timed Exposure mode (see Appendix J.1). The gradeSelections value in the Continuous Clocking parameter block can only be given one of 16 values to represent 256 possible grade codes, so the patch interprets gradeSelections as an index into a table of 16 sets of codes, as shown in Table E.2.
Each index points to an array of 8 32-bit unsigned integers, shown in hexadecimal notation. The least significant byte is on the right of the integer and the least significant integer is on the left, so when gradeSelections = 1, index 1 of the grade code array consists of 256 bits, where the least significant bit (representing grade 0) is 1, and grades 1–255 are zero. The resulting grade filter will reject all events with grades other than 0.
0 | Reject all grades |
0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
1 | Reject ASCA grades 1,2,3,4,5,6,7 |
0x00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
2 | Reject ASCA grades 1,5,6,7 |
0x00031105 00030004 00000033 00000000 00001104 00000004 00000000 00000000 | |
3 | Reject ASCA grades 1,5,7 |
0x00471d05 00470004 00031133 00001100 00001d04 00000004 00030000 00000000 | |
4 | Undefined |
0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
5 | Undefined |
0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
6 | Undefined |
0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 | |
7 | Reject ACIS flight grades 24,66,107,127,214,223,248,251,254,255 |
0xfeffffff ffffffff fffffffb 7ffff7ff ffffffff ffffffff efbfffff 36ffffff | |
8 | Reject ACIS flight grades 24,107,127,214,223,248,251,254,255 |
0xfeffffff ffffffff ffffffff 7ffff7ff ffffffff ffffffff efbfffff 36ffffff | |
9 | Reject ACIS flight grades 24,66,107,214,248,255 |
0xfeffffff ffffffff fffffffb fffff7ff ffffffff ffffffff ffbfffff 7effffff | |
10 | Reject ACIS flight grades 24,66,107,214,255 |
0xfeffffff ffffffff fffffffb fffff7ff ffffffff ffffffff ffbfffff 7fffffff | |
11 | Reject ACIS flight grades 24,107,214,248,255 |
0xfeffffff ffffffff ffffffff fffff7ff ffffffff ffffffff ffbfffff 7effffff | |
12 | Reject ACIS flight grades 24,107,214,255 |
0xfeffffff ffffffff ffffffff fffff7ff ffffffff ffffffff ffbfffff 7fffffff | |
13 | Reject ASCA grade 7 |
0x00773f7f 0077117f 00031133 00001133 00033f7f 0003117f 00030033 00000000 | |
14 | Reject ACIS flight grade 255 |
0xffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 7fffffff | |
15 | Accept all grades |
0xffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff | |
Timed timed exposure modes support spatial event 2-dimensional (2D) spatial filtering. The 2D window filter parameter set consists of an ordered series of selection spatial filters (see Section 4.1.4.2). Each filter consists of a spatial selection window (ccdId, ccdRow, ccdColumn, width, and height), an acceptable event pulse height range (lowerEventAmplitude and eventAmplitudeRange), and a subsample count (sampleCycle).
During event processing, the software compares the position of each Timed Exposure event to the series of windows and selects the first window in the series that encloses the event’s row and column position in the CCD image. Once it finds a matching window for the event, it ignores the remaining windows in the series for that event. If the event’s position does not intersect any window, the window filter accepts the event by default.
The software then applies the selected window’s event pulse height range (the lower bound is lowerEventAmplitude and upper bound is lowerEventAmplitude+eventAmplitudeRange) and sampleCycle to determine how to process the event. If the event’s pulse height is outside the window’s acceptable range or if sampleCycle is zero, the software discards the event. if the sampleCycle is not zero and the event’s pulse height is within the window’s acceptable range, the system accepts every Nth event within the window (see algorithm below), where “N” is sampleCycle (i.e. if sampleCycle is “1”, the system accepts every event within that window with an acceptable pulse height; if “2”; it accepts ever other event; “3” every third event; and so on).
The above pseudocode, copied from the “ACIS Filtering Report” (see Table 1.2), is executed for each candidate x-ray event and terminates immediately when it decides either to accept or reject the event based on the fields in the run’s parameter block (pBlock) and window block (wBlock).
For example, consider the following window definitions:
windows[0] { | # First window | |
ccdId | = 0 | # For events from CCD I0 |
ccdRow | = 10 | # Bottom row of window |
ccdColumn | = 0 | # Leftmost column of window |
width | = 511 | # Width of window - 1 |
height | = 501 | # Height of window - 1 |
sampleCycle | = 0 | # Reject every event in this region |
lowerEventAmplitude | = 200 | # Minimum event PHA amplitude |
eventAmplitudeRange | = 1000 | # Maximum amplitude above minimum |
} | ||
windows[1] { | # Second window | |
ccdId | = 0 | # For events from CCD I0 |
ccdRow | = 490 | # Bottom row of window |
ccdColumn | = 256 | # Leftmost column of window |
width | = 767 | # Width of window - 1 |
height | = 523 | # Height of window - 1 |
sampleCycle | = 3 | # Accept every 3rd event in this region |
lowerEventAmplitude | = 200 | # Minimum event pha amplitude |
eventAmplitudeRange | = 1000 | # Maximum amplitude above minimum |
} | ||
windows[2] { | # Third window | |
ccdId | = 7 | # For events from CCD S3 |
ccdRow | = 512 | # Bottom row of window |
ccdColumn | = 512 | # Leftmost column of window |
width | = 501 | # Width of window - 1 |
height | = 511 | # Height of window - 1 |
sampleCycle | = 1 | # Accept every event in this region |
lowerEventAmplitude | = 0 | # Minimum possible amplitude |
eventAmplitudeRange | = 65535 | # Maximum possible range |
} | ||
windows[3] { | # Fourth window | |
ccdId | = 7 | # For events from CCD S3 |
ccdRow | = 0 | # Bottom row of window |
ccdColumn | = 0 | # Leftmost column of window |
width | = 1023 | # Width of window - 1 |
height | = 1023 | # Height of window - 1 |
sampleCycle | = 0 | # Reject every event in this region |
lowerEventAmplitude | = 0 | # Minimum possible amplitude |
eventAmplitudeRange | = 65535 | # Maximum possible range |
} | ||
in words,
Graphically, the windows listed above have the following approximate effect:
Timed Exposure raw pixel processing also supports 2D window filtering. The 2D window filter parameters for raw pixels are the same as those used for event processing, an ordered series of selection spatial filters (see section 4.1.4.2). Each window filter consists of a spatial selection window (ccdId, ccdRow, ccdColumn, width, and height), an event pulse height range (lowerEventAmplitude and eventAmplitudeRange), and a sub-sample count (sampleCycle). Unlike event processing, however, raw image processing ignores the lowerEventAmplitude and eventAmplitudeRange parameters, and uses a simplified interpretation of the sampleCycle parameter.
As raw frames arrive, the software processes each window in order. If a window’s sampleCycle is zero, the software marks areas of the image as rejected within a given window that are not already marked by an earlier window in the list. If sampleCycle is not zero, it marks those areas as accepted.
Graphically, using the example window definitions listed in Appendix K.1, the resulting effect resembles the following:
Unlike Timed Exposure events, Continuous Clocking events do not have a specific row position within the CCD. As a result, the 1D Window Parameter list omits the row position and height parameters provided with the 2D Window parameters. The 1D Window Filter parameter set consists of an ordered series of selection span filters (see Section 4.1.4.4). Each filter consists of a span selection window (ccdId, ccdColumn, and width), an acceptable event pulse height range (lowerEventAmplitude and eventAmplitudeRange), and a subsample count (sampleCycle).
During event processing (see the algorithm on page 386), the software first determines whether the event meets the pha and grade criteria, then compares the column position of each Continuous Clocking event to the series of windows and selects the first window in the series that encloses the event’s column position in the CCD. Once it finds a matching window for the event, it ignores the remaining windows in the series for that event. If the event’s column position does not intersect any window span, the window filter accepts the event by default.
The software then applies the selected window’s event pulse height range (the lower bound is lowerEventAmplitude and upper bound is lowerEventAmplitude+eventAmplitudeRange) and sampleCycle to determine how to process the event. If the event’s pulse height is outside the window’s acceptable range or if sampleCycle is zero, the software discards the event. If the sampleCycle is not zero and the event’s pulse height is within the window’s acceptable range, the system accepts every Nth event within the window (see algorithm in Appendix K.1), where “N” is sampleCycle (i.e. if sampleCycle is “1”, the system accepts every event within that window with an acceptable pulse height; if “2”; it accepts ever other event; “3” every third event; and so on).
For example, consider the following window definitions:
windows[0] { | # First window | |
ccdId | = 0 | # For events from CCD I0 |
ccdColumn | = 0 | # Leftmost column of window |
width | = 511 | # Width of window - 1 |
sampleCycle | = 0 | # Reject every event in this region |
lowerEventAmplitude | = 200 | # Minimum event PHA amplitude |
eventAmplitudeRange | = 1000 | # Maximum amplitude above minimum |
} | ||
windows[1] { | # Second window | |
ccdId | = 0 | # For events from CCD I0 |
ccdColumn | = 256 | # Leftmost column of window |
width | = 757 | # Width of window - 1 |
sampleCycle | = 3 | # Accept every 3rd event in this region |
lowerEventAmplitude | = 200 | # Minimum event PHA amplitude |
eventAmplitudeRange | = 1000 | # Maximum amplitude above minimum |
} | ||
windows[2] { | # Third window | |
ccdId | = 7 | # For events from CCD S3 |
ccdColumn | = 512 | # Leftmost column of window |
width | = 501 | # Width of window - 1 |
sampleCycle | = 1 | # Accept every event in this region |
lowerEventAmplitude | = 0 | # Minimum possible amplitude |
eventAmplitudeRange | = 65535 | # Maximum possible range |
} | ||
windows[3] { | # Fourth window | |
ccdId | = 7 | # For events from CCD S3 |
ccdColumn | = 0 | # Leftmost column of window |
width | = 1023 | # Width of window - 1 |
sampleCycle | = 0 | # Reject every event in this region |
lowerEventAmplitude | = 0 | # Minimum possible amplitude |
eventAmplitudeRange | = 65535 | # Maximum possible range |
} | ||
In words,
Continuous Clocking raw pixel processing also supports 1D window filtering. The 1D window filter parameters for raw pixels are the same as those used for event processing, an ordered series of selection spatial span filters (see Section 4.1.4.2). Each filter consists of a span selection window (ccdId, ccdColumn, and width), an event pulse height range (lowerEventAmplitude and eventAmplitudeRange), and a subsample count (sampleCycle). Unlike event processing, however, raw image processing ignores the lowerEventAmplitude and eventAmplitudeRange parameters, and uses a simplified interpretation of the sampleCycle parameter.
As raw columns arrive, the software processes each window in order. If a window’s sampleCycle is zero, the software marks the corresponding columns as rejected within a given window that are not already marked by an earlier window in the list. If sampleCycle is not zero, it marks those columns as accepted.
Graphically, using the example window definitions listed in Appendix J.3, the resulting effect resembles the following:
The following source code “eeprom_patch.c” compiles into the boot-from-uplink program described in Section 5.9.2.
The program is compiled and converted to bcmd format as follows:
ACIS | AXAF CCD Imaging Spectrometer |
ACTEL | Manufacturer of Field-Programmable Gate Arrays used in ACIS |
ADC | Analog-to-Digital Converter |
ADU | Analog-to-Digital Units (of charge per ACIS pixel) |
ASCA | Advanced Satellite for Cosmology and Astrophysics, formerly ASTRO-D |
AXAF | Advanced X-Ray Astronomy Facility, renamed Chandra |
BEP | Back-End Processor |
Backside | CCD that reads its pixels from the opposite side to that which they were exposed |
Bakeout | Process that heats the ACIS focal plane to drive out contaminants |
Bi-Level | 8 bits of ACIS instrument status inserted into downlink telemetry |
Bias | Array of values corresponding to those of the imaging pixels without charge |
BiasThief | BEP task that copies bias maps into downlink telemetry |
Block | Parameter blocks (5 each) controlling science runs, windows and DEA H/K |
Board | ACIS circuit boards: BEP (x2), FEP (x6), Video (x10) or DEA Interface (x2) |
Boot | Process whereby the ACIS BEP’s CPU restarts |
CC | Continuous Clocking mode: rows move and are digitized in lock-step |
CCD | Charge-Coupled Device |
CLD | Chandra online system Command LoaD file |
CMDRST | Command Reset Signal to DPA |
CPU | Central Processing Unit: in ACIS, the R3000 Mongoose |
CTU | (Chandra) Command and Telemetry unit |
CTUE | Command and Telemetry Unit Emulator |
CVS | Concurrent Versions System – version control software |
CXO | Chandra X-Ray Observatory |
Cache | BEP and FEP high-speed radiation-hardened memory |
Channel | Engineering sensor whose output is inserted into downlink telemetry |
Collimator | Radiation shield surrounding the ACIS focal plane |
Command | Uplink command to ACIS (serial to DPA and pulse to PSMC) |
Compression | In ACIS, Huffman first-difference compression to raw images and bias maps |
Configuration | BEP table controlling FEP and Video board power, CCD clocking parameters |
Continuous Clocking | Mode for observing point-like x-ray sources at high time resolution |
D-cache | Radiation hardened data memory for R3000 CPUs in BEPs and FEPs |
DAC | Digital-to-Analog Converter |
DEA | Detector Electronics Assembly |
DEARST | Command reset signal to DEA |
DIAG | Diagnostic CCD readout mode whereby output nodes are read in reverse |
DMA | Direct Memory Access |
DPA | Digital Processor Assembly |
DTC | DMA Transfer Chip |
DeaHousekeeper | BEP task that reports selected DEA housekeeping channel values |
Drain | Region within CCD that is electrically biased in order to extract electrons |
Dump | Copy a named block of BEP memory to downlink telemetry |
ECO | Engineering Change Order |
EEPROM | Electrically Erasable Programmable Read-Only Memory |
EGSE | Electrical Ground Support Equipment |
EHS | Enhanced HOSC System – data format for recorded Chandra telemetry |
EPHIN | Electron Proton Helium Instrument |
EU | Engineering Unit (ACIS hardware flight simulator) |
EVT | ACIS standard product file describing x-ray events |
Event | A group of neighboring CCD pixels that may result from a single x-ray |
Exposure | The CCD events reported during a single dwell-and-readout period |
FEP | Front-End Processor |
FIFO | First In, First Out |
FITS | Flexible Image Transport System |
FOT | Flight Operations Team |
Faint | X-ray event comprising 3x3 pixel values |
FaintBias | X-ray event comprising 3x3 pixel values and corresponding bias map values |
Filtering | BEP process that rejects events based on grade, energy or window (location) |
Focal-Plane | Array of ACIS CCDs and their optical blocking filters and coolers |
Frame | The area of a CCD whose pixel values are sampled |
Framestore | Shielded area within a CCD holding pixels while they are being read out |
Frontside | CCD that reads its pixels from the same side as that which they were exposed |
Grade | The pattern of charge deposition in a 3x3 or 3x1 pixel event |
Graded | Events reported by total energy and grade, rather than by individual pixels |
Heater | Electrical heater to warm the ACIS focal plane, detector housing, or panels |
Histogram | Mode in which pixel charge or event energy is accumulated in histograms |
HOSC | Huntsville Operations Support Center |
Housekeeping | Hardware values (DEA) or software events (S/W) reported by ACIS |
HRC | High-Resolution Camera |
HRMA | Chandra High-Resolution Mirror Assembly |
Huffman | Algorithm used to compress bias maps and raw CCD images |
I-cache | Radiation hardened instruction memory for R3000 CPUs in BEPs and FEPs |
IP&CL | Instrumentation Program and Command List |
IRIG-B | Inter-Range Instrumentation Group B – timecode structure |
Jitter | Method to clear electric charge rapidly out of CCDs at start of run |
L-RCTU | Littlefield RCTU Emulator |
LED | Light Emitting Diode – status transmitted to telemetry through bi-levels |
LSB | Least Significant Bit |
Latchup | Anomalous status of semiconductor junction, e.g., from background radiation |
Load-from-Uplink | Mode in which BEP reads & execs instructions & data from input commands |
Mailbox | Interface in shared memory used for FEP-BEP communications |
Mnemonic | Name assigned in IP&CL to individual commands and telemetry channels |
Mongoose | Name given to radiation-hardened R3000 microprocessor |
MSB | Most Significant Bit |
Node | One of 4 output nodes (A,B,C,D) from each ACIS CCD |
Nucleus | Multi-tasking operating system controlling the BEP |
OCAT | Chandra Observation Catalog |
OCC | Observatory Control Center |
ODB | Observatory DataBase |
Over-Current | PSMC disables a DPA or DEA power supply drawing too much current |
Overclock | Pixel values read from CCD after all valid charge has been extracted |
PRAM | Program Random Access Memory storing a CCD clocking program |
PSMC | Power Supply and Mechanism Controller |
Packet | Multi-word serial digital output from the active BEP |
Patch | Updates in instruction text and data to apply to the BEP when warm booting |
Pblock | Parameters used to control the setup and execution of a science run |
Pixel | A single measurement of charge accumulated within an ACIS CCD |
Power-Cycle | The act of powering down an ACIS board, and powering it up again |
R3000 | The name given to the architecture of the BEP and FEP microprocessors |
RCTU | Remote Command and Telemetry Unit |
RISC | Reduced Instruction Set Computer, e.g., the R3000 |
Relay | Mechanical switch, in the ACIS DEA user to switch power between A and B |
Row | A set of ACIS pixels that are read serially, orthogonal to the column direction |
Run | A sequence of ACIS frames started with a Pblock |
SACGS | SOT/ACIS Command Generation Software |
SCS107 | Stored Command Sequence 107, used to transition payloads to safe mode |
SEU | Single Event Upset |
SFDU | Standard Formatted Data Unit – data format for recorded Chandra telemetry |
SIM | Science Instrument Module comprising ACIS and HRC |
SIMODE | Science Instrument Mode |
SOT | Science Operations Team |
SRAM | Sequencer Random Access Memory storing microcode for PRAM programs |
Sequencer | DEA video board electronics to supply clocking signals to a CCD |
SwHousekeeper | BEP task that reports software events received within 64 second intervals |
TBD | To Be Determined |
TCL/TK | Tool Command Language / graphics extension, scripting language |
TCP | Transmission Control Protocol |
TE | Timed Exposure mode: CCDs absorb x-rays during ”static” interval |
TLR | TimeLine Report – time-sorted list of Chandra uplink commands |
Task | Pre-emptive execution thread controlled by the Nucleus/RTX OS |
Thermistor | Device that uses its changing electrical resistance to report temperature |
Timed-Exposure | CCDs absorb x-rays during ”static” interval, while previous interval is read out |
Timeout | Hardware interrupt caused by timer expiring before it is reset by software |
Timestamp | Instantaneous value of 100 KHz ACIS clock reported in downlink telemetry |
UDP | User Datagram Protocol |
UTC | Coordinated Universal Time (i.e., atomic time, with leap second corrections) |
Ultrix | UNIX operating system tailor for the R3000 architecture |
VCDU | Virtual Channel Data Unit (24-bit Chandra Spacecraft Clock) |
Veryfaint | X-ray event comprising 5x5 pixel values |
Warmboot | BEP restarts and, if no anomalies are detected, applies available patches |
Watchdog | BEP countdown timer expiring after 429.5 seconds unless reset before then |
Wblock | Parameter used in conjunction with a Pblock to supply window filtering |
Window | Filtering region of CCD with corresponding grade codes and energy limits |
XRCF | X-Ray Calibration Facility at Marshall Space Flight Center, Huntsville, AL |