PIC

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







Table of Contents

1 Introduction
 1.1 Purpose
 1.2 Scope
 1.3 References
2 Overview
 2.1 Instrument Hardware Overview
 2.2 Instrument Software Overview
 2.3 Commands and Telemetry
3 Instrument Maintenance Activities
 3.1 Starting the Software
  3.1.1 Back End Processor Power-On
  3.1.2 Selecting which BEP is active
  3.1.3 Loading from EEPROM
   3.1.3.1 Power-On Boot
   3.1.3.2 Cold Boot
   3.1.3.3 Warm Boot
   3.1.3.4 Watchdog Reset
  3.1.4 Loading from Uplink
   3.1.4.1 Boot Duration
 3.2 Halting the software
  3.2.1 BEP Power-Off
  3.2.2 Halting the active BEP
 3.3 Changing the System Configuration
  3.3.1 System Configuration Table
  3.3.2 Controlling FEP Power
  3.3.3 Powering the DEA Interface and Video Boards
  3.3.4 Controlling the DEA Video Board Settings
  3.3.5 CCD Voltage Setting Limits
  3.3.6 Controlling the Focal Plane Temperature
  3.3.7 Controlling other DEA Settings
 3.4 Monitoring the Instrument
  3.4.1 Engineering Housekeeping
  3.4.2 System Startup Message
  3.4.3 Software Housekeeping
   3.4.3.1 Bi-Level Telemetry
   3.4.3.2 Software Housekeeping Statistics
  3.4.4 Command Echoes
  3.4.5 Fatal Error Messages
  3.4.6 DEA Housekeeping Runs
   3.4.6.1 Loading DEA Housekeeping Parameter Block
   3.4.6.2 Starting DEA Housekeeping
   3.4.6.3 Stopping DEA Housekeeping
   3.4.6.4 DEA Interface Board Housekeeping
   3.4.6.5 Video Board Housekeeping (all boards must be powered)
   3.4.6.6 Standard DEA Housekeeping at Start of Science Run
 3.5 Managing the Bad Pixel and Column Maps
  3.5.1 Adding Bad Pixels and Columns
  3.5.2 Resetting the on-board maps
 3.6 Memory Dumps
  3.6.1 General Memory Reads
   3.6.1.1 BEP Memory Read
   3.6.1.2 EEPROM Memory Read
   3.6.1.3 FEP Memory Read
   3.6.1.4 DEA Video Board Memory Read
  3.6.2 Memory Reads Tagged by Context
   3.6.2.1 Bad Pixel and Column Maps
   3.6.2.2 Parameter Block Slots
   3.6.2.3 Huffman Table
   3.6.2.4 Patch List
   3.6.2.5 System Configuration Table
 3.7 Memory Loads
  3.7.1 Patching the software
   3.7.1.1 Loading the Patches
   3.7.1.2 Installing the Patches (Warm Boot)
   3.7.1.3 Removing Patches
   3.7.1.4 Dumping the Patch List
  3.7.2 Writing to BEP Memory
  3.7.3 Writing to FEP Memory
  3.7.4 Writing to DEA Sequencer Memory
 3.8 Calling Subroutines
  3.8.1 Calling BEP subroutines
  3.8.2 Call FEP subroutines
 3.9 Radiation Monitor Triggers
4 Instrument Science Activities
 4.1 Performing a Science Run
  4.1.1 Estimating Minimum Integration Times
   4.1.1.1 Continuous Clocking Mode
   4.1.1.2 Timed Exposure Mode
  4.1.2 Estimating Setup Time
  4.1.3 Estimating Telemetry Utilization
  4.1.4 Parameter and Window Blocks
   4.1.4.1 Timed Exposure Parameter Blocks
   4.1.4.2 2-D Window Parameter Blocks
   4.1.4.3 Continuous Clocking Parameter Blocks
   4.1.4.4 1-D Window Parameter Blocks
  4.1.5 Starting a Science Run
  4.1.6 Stopping a Science Run
 4.2 Performing a Bias-Only Science Run
  4.2.1 Estimating Bias Computation Time
   4.2.1.1 Continuous Clocking Mode
   4.2.1.2 Timed Exposure Mode
  4.2.2 Estimating Bias Transmission Time
  4.2.3 Loading a Parameter Block
  4.2.4 Starting the Bias-Only Run
5 Example Scenarios
 5.1 On-Orbit Checkout
 5.2 Instrument Restart after a Power-Off
  5.2.1 Normal - DPA-A and -B powered, BEP-A Selected
  5.2.2 Contingency/Test - DPA-A and -B powered, BEP-B Selected
  5.2.3 Contingency/Test - Only DPA-A powered
  5.2.4 Contingency/Test - Only DPA-B powered
 5.3 Warm Instrument Re-start
 5.4 Timed Exposure Science Run with Imaging CCDs
  5.4.1 Parameter Block Setup
   5.4.1.1 Parameter Block Id
   5.4.1.2 CCD Selection
   5.4.1.3 Mode Selection
   5.4.1.4 Clocking Parameters
   5.4.1.5 Video ADC Offsets
   5.4.1.6 Bias Parameters
   5.4.1.7 Event Selection Parameters
  5.4.2 Initial Instrument State
  5.4.3 Switch Video Board Power
  5.4.4 Load Parameter Block
  5.4.5 Start Run
  5.4.6 Setup Time
  5.4.7 Bias Calculation
  5.4.8 Bias Telemetry
  5.4.9 Data Processing
  5.4.10 Output Event Data
  5.4.11 Stop Run
  5.4.12 Draining Telemetry
  5.4.13 Run Complete
 5.5 Timed Exposure Science Run with a Sub-Array
  5.5.1 Parameter Block Setup
   5.5.1.1 Parameter Block Id
   5.5.1.2 CCD Selection
   5.5.1.3 Mode Selection
   5.5.1.4 Clocking Parameters
   5.5.1.5 Video ADC Offsets
   5.5.1.6 Bias Parameters
   5.5.1.7 Event Selection Parameters
  5.5.2 Execution
  5.5.3 Load Parameter Block
  5.5.4 Start Run
  5.5.5 Output Event Data
  5.5.6 Stop Run
  5.5.7 Run Complete
 5.6 Continuous Clocking Science Run with Spectroscopy CCDs
  5.6.1 Parameter Block Setup
   5.6.1.1 Parameter Block Id
   5.6.1.2 CCD Selection
   5.6.1.3 Mode Selection
   5.6.1.4 Clocking Parameters
   5.6.1.5 Video ADC Offsets
   5.6.1.6 Bias Parameters
   5.6.1.7 Event Selection Parameters
  5.6.2 Initial Instrument State
  5.6.3 Switch Video Board Power
  5.6.4 Load Parameter Block
  5.6.5 Start Run
  5.6.6 Setup Time
  5.6.7 Bias Calculation
  5.6.8 Bias Telemetry
  5.6.9 Data Processing
  5.6.10 Output Data Packets
  5.6.11 Stop Run
  5.6.12 Draining Telemetry
  5.6.13 Run Complete
 5.7 Instrument Calibration
  5.7.1 Raw Mode
  5.7.2 Raw Histogram Mode
  5.7.3 Event Histogram Mode
 5.8 Focal-Plane Bake-Out
  5.8.1 Preparation for Bake-Out
  5.8.2 Heating the Focal Plane
  5.8.3 Heating the Detector Housing
  5.8.4 Cooling the Detector Housing
  5.8.5 Disabling Bake-Out
 5.9 Scatter Load from Uplink
  5.9.1 Example: Dumping Memory to Telemetry
  5.9.2 Example: Patching a Bad I-cache Memory Location
6 Software Tools
 6.1 Command Tools
  6.1.1 Uplink Command Verification
  6.1.2 Patch Load Validation
  6.1.3 Patch Development
 6.2 Telemetry Tools
  6.2.1 Telemetry at the OCC
  6.2.2 Telemetry from the Simulators
  6.2.3 psci Output Formats
A BEP Commands and Status Flags
 A.1 BEP Status Flags
 A.2 Scenarios
  A.2.1 Switching from BEP-A to BEP-B
  A.2.2 Switching back from BEP-B to BEP-A
  A.2.3 Recovering from an anomalous DPA-A power down
  A.2.4 Running both BEPs Simultaneously
B IP&CL References
 B.1 Software Structures
 B.2 Hardware Commands
 B.3 Engineering Telemetry
 B.4 Internal DEA Error Codes
C ACIS Configuration Table
D ACIS EGSE Commands
E ACIS Power Table
F Active Patch List
G Jitter DAC Details
H Video Board PRAM
 H.1 Introduction to PRAM
 H.2 CCD Actions
 H.3 FEP Actions
 H.4 A Simple Example
 H.5 A Realistic Timed Exposure Example
 H.6 Sub-Array Readout
 H.7 Pre-Flushing for Shorter Exposure Times
 H.8 Continuous Clocking
 H.9 More Subtleties
 H.10 Working with PRAM
I Default Parameter Blocks
 I.1 Default Timed Exposure Blocks
 I.2 Default Continuous Clocking Blocks
 I.3 Default 2-Dimensional Window Blocks
 I.4 Default 1-Dimensional Window Blocks
 I.5 Default DEA Housekeeping Blocks
J Event Grade Codes
 J.1 Timed Exposure Grade Codes
 J.2 Continuous Clocking Grade Codes (1x3 faint and graded modes)
 J.3 Continuous Clocking Grade Codes (3x3 faint and graded modes)
K Window Filter Processing
 K.1 Timed Exposure Event 2D Window Filtering
 K.2 Timed Exposure Raw Pixel 2D Window Filtering
 K.3 Continuous Clocking Event 1D Window Filtering
 K.4 Continuous Clocking Raw Pixel 1D Window Filtering
L The eeprom_patch Program
M Glossary

List of Figures

 2.1 Hardware Architecture
 3.1 FEP Power Supplies and Enables
 3.2 Video Board ADC Signal Path
 H.1 Graphical CCD Representation
 J.1 3x3 Grade Code Bit Assignment
 J.2 1x3 Grade Code Bit Assignment

List of Tables

 1.1 Reference Documents
 1.2 ACIS Flight Software Reports
 2.1 BEP Tasks
 3.1 BEP Boot Modes
 3.2 Power On Command Sequence
 3.3 Power On Engineering Telemetry
 3.4 Power On Science Telemetry
 3.5 BEP Selection Commands
 3.6 Selected BEP in Engineering Telemetry
 3.7 Power Off Command Sequence
 3.8 CCD, Video Board and Power Relay Relationships
 3.9 DEA Power Supply Verifiers
 3.10 System Configuration Table Value Limits
 3.11 Focal Plane Temperature Set Values
 3.12 Startup Message Flags to Reset Type
 3.13 Bi-level Telemetry Mnemonics
 3.14 Software Housekeeping Bi-level States
 3.15 Fatal BEP Error Codes
 3.16 Video Board Registers
 3.17 Video Board Registers reported at start of science run
 3.18 BEP Virtual Memory Map
 3.19 BEP Memory Aliasing
 3.20 FEP Virtual Memory Map
 3.21 Contents of Image and Bias words
 3.22 Types of parameter block
 3.23 Content of Patch Dump
 4.1 Telemetry Buffer Allocations
 4.2 Timed Exposure Processing Mode Selection
 4.3 Timed Exposure Bias Parameters
 4.4 Unsupported Timed Exposure Parameter Values
 4.5 Continuous Clocking Processing Mode Selection
 4.6 Continuous Clocking Bias Parameters
 4.7 Unsupported Continuous Clocking Parameter Values
 4.8 Science Run Processing Steps
 4.9 FEP Error codes
 4.10 Science Run Termination Codes
 5.1 Atomic Procedures
 5.2 Contingency Procedures
 5.3 In-Orbit Checkout Procedures
 5.4 Normal Restart after Power Off
 5.5 Restart with BEP-B and 6 FEPs
 5.6 Run BEP-A and 3 FEPs with DPA-A Power
 5.7 Run BEP-B and 3 FEPs with DPA-B Power
 5.8 Warm Restart
 5.9 Maximum Downlinked Event Rates
 5.10 Default Video Offsets
 6.1 Psci Output File Names
 6.2 psci FITS File Headers
 A.1 BEP Status Flags
 B.1 ACIS memory structures and the bcmd commands that access them
 B.2 DPA Hardware Commands
 B.3 PSMC Power and Heater Commands
 B.4 PSMC Mechanism Commands
 B.5 ACIS-related Engineering Telemetry
 B.6 SIM-Related Engineering Telemetry
 B.7 Engineering Telemetry Conversions
 B.8 ACIS 1-Bit PSMC and DPA Verifiers
 B.9 Internal DEA Manager Error Codes
 C.1 ACIS Configuration Table
 D.1 EGSE Commands
 E.1 ACIS Power Table
 E.2 Total ACIS Current Draw
 F.1 Patches Available for Level GHI Loads
 F.2 Flight Unit Patch History
 F.3 Patching Procedures
 I.1 Default Parameter Blocks in EEPROM
 I.2 Default Timed-Exposure Parameter Blocks
 I.3 Default Continuous Clocking Parameter Blocks
 J.1 The Grade Code array used by the cc3x3 patch

Section 1
Introduction

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).

1.1 Purpose

The ACIS Science Instrument Software User’s Guide describes the operation of the key functions of the instrument software.

1.2 Scope

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.

1.3 References

This specification relies on a set of existing documentation. The following table lists these documents.



Table 1.1: Reference Documents




Part Number
Rev
Date
Title




MSFC MM 8075.1

01/22/1991

MSFC Software Management and Development Requirements Manual





MIT-CSR 36-01103

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





MIT-CSR 36-53204.0204

N 03/15/2001

ACIS IP&CL Software Structure Definitions





MIT-CSR 36-02205

C 11/14/1996

DPA/DEA Interface Control Document





MIT-CSR 36-55001

3.1 06/20/1997

ACIS Test Tools





MIT-CSR 36-54002.08

1.5

ACIS Flight Software





MIT-CSR 36-56102

1.1 07/29/1996

Huffman Coding of ACIS Pixel Data





MIT-CSR 36-56101

2.1 07/19/1995

CCD Bias Level Determination Algorithms





ACIS-PSU-SOP-01

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.



Table 1.2: ACIS Flight Software Reports




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





Section 2
Overview

2.1 Instrument Hardware Overview

Figure 2.1 illustrates the overall hardware architecture of ACIS.



Figure 2.1: Hardware Architecture

PIC


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.

2.2 Instrument Software Overview

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.



Table 2.1: BEP Tasks




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.






2.3 Commands and Telemetry

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.

Section 3
Instrument Maintenance Activities

This section describes the various activities used to maintain the ACIS instrument software.

3.1 Starting the 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.



Table 3.1: BEP Boot Modes






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.

3.1.1 Back End Processor Power-On

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.



Table 3.2: Power On Command Sequence



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







Table 3.3: Power On Engineering Telemetry
While the BEPs are off and PSMC disabled
After a pair of PSMC DPA Enable commands have been issued
After a pair of PSMC DPA Power-On commands have been issued




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.



Table 3.4: Power On Science Telemetry

  




Tag Field
Value
Description



After the PSMC DPA Power-On command has been issued



If BEP-B is to be made active, a select command must also be issued (see Section 3.1.2)



TTAG_STARTUP

After the BEP software is initialized, it issues a BEP Startup Message packet.




TTAG_SW_HOUSE

Once running, the flight software emits 1 software housekeeping packet every 64 seconds or so.





Warnings

1.
Power Reset of Tables
A power-on will reset the state of the all hardware within ACIS, and reset all internal software structures. Any code, tables and data loaded into RAM will be lost.
2.
Power Reset of Uplink Flag
If the instrument was in a “load-from-uplink” state prior to being powered-off, the state of “load-from-uplink” flag will be lost. When the instrument is subsequently powered on, it will load code from its EEPROMs and execute the loaded code.
3.
BEP Select Confusion
If BEP-B is powered on and selected while BEP-A is off, and then BEP-A is powered on, both BEPs will be selected and will attempt to drive the telemetry interface. This will not hurt the hardware, but will make software telemetry impossible to understand. A “Select BEP” command to choose either A or B at this point will solve the problem.

3.1.2 Selecting which BEP is active

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.



Table 3.5: BEP Selection Commands

  

Select BEP-A
Select BEP-B




Mnemonic
Command Type
Value
Description








1BSELICL HW Serial Digital v=0

Select BEP-A by issuing the Select BEP command with data bit 0 (v) set to 0.









1BSELICL HW Serial Digital v=1

Select BEP-B by issuing the Select BEP command with data bit 0 (v) set to 1.






Engineering Telemetry

The currently selected BEP is indicated by a bi-level in the engineering telemetry (see Table 3.6).



Table 3.6: Selected BEP in Engineering Telemetry

  

When BEP-A is the selected BEP:
When BEP-B is the selected BEP:




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

1.
BEP already selected
If the BEP is already selected, it will not be re-booted.
2.
BEP not already selected
If the BEP is not currently the selected BEP, it will be held in a reset state. Once selected, the BEP will behave depending on the most recently received “halt bep” or “run bep” command (i.e. the newly selected BEP with either start in a reset state or reboot accordingly).
3.
Both BEP-A and -B are selected
If BEP-A is powered on, or power-cycled while BEP-B is selected and running, BEP-A will assume that it is selected. This will cause contention and confusion on the telemetry interface. To correct the problem, re-issue the most recent select command after powering on BEP-A. To avoid the problem, issue halt bep and select bep a commands prior to powering on BEP-A.
4.
Neither BEP-A nor -B are selected
If BEP-A is powered on while BEP-B is powered off, and is then told that BEP-B is selected, no BEP will be driving the interfaces.
5.
FEPs may be held “on”
The BEP-A and BEP-B can both be commanded to enable and disable power to the FEPs. If both BEPs are powered and the previously selected BEP has left power enabled to some of the FEPs, the currently selected BEP will not be able to power-off those FEPs. This state is not harmful for the hardware, but may lead to confusion in subsequent observations. It will stay this way until either the previous BEP is made active again and commanded to power down those FEPs, or the PSMC is commanded to cycle the power on that BEP and its 3 associated FEPs. Therefore, be very sure to power down all FEPs before switching BEPs. See Section 3.3.2 for more detail.

3.1.3 Loading from EEPROM

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.

3.1.3.1 Power-On Boot

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:

1.
Copies the bulk of code and initialized data from EEPROM into I-cache and D-cache RAM.
2.
Resets the Patch List to “empty”.
3.
Copies Parameter Blocks (Te, Cc, 2d, 1d, Dea) from EEPROM into RAM (see Appendix I).
4.
Copies Bad Pixel and Column Maps from EEPROM into RAM.
5.
Copies Huffman Tables from EEPROM into RAM.
6.
Copies System Configuration Settings from EEPROM into RAM.
7.
Issues a Startup Message telemetry packet.
8.
All DEA Video boards will be powered off (as per the default EEPROM System Configuration Table settings).
9.
All Front End Processors (FEP) will be assumed to be powered off (as per the default EEPROM System Configuration Table settings). Note that after a power anomaly, the operator cannot assume that all FEPs are unpowered and must explicitly power on all FEPs and then command them to their desired states.
10.
Focal Plane temperature will be reset to its default EEPROM System Configuration Table value.

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

1.
Power-On Boot is always a Cold Boot
A power-on boot resets the BEP’s hardware flags, such as the Warmboot flag, and the Load-from-Uplink flag, making it impossible to perform a Warm Boot or Load-from-Uplink Boot using just a power-on command sequence. See Section 3.1.4 for a description of how to perform a Load-from-Uplink Boot, and Section 3.1.3.3 for a description of a Warm Boot.
2.
“As-launched” settings (including temperature control)
All Patches are lost and all Parameter Blocks, System Configuration Settings, and Huffman Compression Tables will be reset to their “as-launched” values (see Appendix I). Note: This affects power-consumption of the instrument, the focal-plane temperature control set point, and sets all 12-bit Analog to Digital Converter (ADC) channels reported in DEA housekeeping to 8-bit (coarse) mode.
3.
Memory Decay
Don’t count on any unused portions of BEP or FEP memory remaining intact. The powered-off static RAM memory will “decay” over time.
4.
See Warnings in Section 3.1.2
5.
“Stuck” Bi-level Values
The initial boot bi-level sequence will change faster than the sample rate of the telemetry system. Unless something goes wrong, don’t expect to see every code in the sequence as the instrument comes up. However, if the bi-level values “stick” to the following values for more than one science telemetry frame, or codes persist that are not listed, there is probably a problem with the instrument or command sequence to the instrument:

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





3.1.3.2 Cold Boot

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:

1.
Copies the bulk of code and initialized data from EEPROM into I-cache and D-cache RAM
2.
Resets the Patch List to “empty”
3.
Copies Parameter Blocks (Te, Cc, 2d, 1d, Dea) from EEPROM into RAM (see Appendix I)
4.
Copies Bad Pixel and Column Maps from EEPROM into RAM
5.
Copies Huffman Tables from EEPROM into RAM
6.
Copies System Configuration Settings from EEPROM into RAM
7.
Issues a Startup Message telemetry packet
8.
All DEA Video boards and Front End Processors will be powered off (as per the default EEPROM System Configuration Table settings)
9.
All Front End Processors (FEP) will be powered off, as per the default EEPROM System Configuration Table settings, unless held on by the other BEP (see Section 3.3.2)
10.
Focal Plane temperature will be reset to its default EEPROM System Configuration Table value

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

1.
A Cold Reboot may occur on receipt of a BEP Select Command
If a BEP is running, i.e., not in the RESET state, and the other BEP is selected, the latter will immediately reboot in the mode determined by the values of its Load-from-Uplink, Watchdog, and Warmboot flags. For this reason, prior to switching BEPs, it is good practice to command the active BEP into the RESET state before selecting the other BEP.
2.
“As-launched” settings (including temperature control)
All Patches, Parameter Blocks, System Configuration Settings, and Huffman Compression Tables will be reset to their “as-launched” values (see Appendix I). Note: This affects power-consumption of the instrument and the focal-plane temperature control set point (see Section 3.3.6 and Appendix E).
3.
DEA Power-Up Issues
See Warnings #4 and #5 to Section 3.1.3.3 and Section 3.3.6.
4.
Preserved Memory
Unused portions of BEP memory will remain intact.
5.
“Stuck” Bi-level Values
The initial boot bi-level sequence will change faster than the sample rate of the telemetry system. Unless something goes wrong, don’t expect to see every code in the sequence as the instrument comes up. However, if the bi-level values “stick” to the following values for more than one science telemetry frame, or codes persist that are not listed, there is probably a problem with the instrument or command sequence to the instrument:

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

3.1.3.3 Warm Boot

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:

1.
Copies the bulk of code and initialized data from EEPROM into I-cache and D-cache RAM.
2.
Installs the patches, overwriting code and data specified by the nodes in the Patch List with the data contained in the Patch List nodes.
3.
Issues a Startup Message telemetry packet, indicating the integrity of the patch list, parameter blocks and system configuration table. NOTE: Since the system configuration table controls the focal-plane temperature and FEP and DEA power settings, if the table has been corrupted, the startup code will restore the default system configuration table from EEPROM into RAM, overwriting the corrupted copy.
4.
The initialization code for the DEA will reset the DEA Interface Controller board. This will have the effect of powering off the video boards. Within a few seconds, however, the System Configuration Task will restore power to those boards indicated in the preserved system configuration table (i.e. those boards that were on prior to the warm boot, will be re-powered, provided the configuration table checksum is valid (see Warning #4, below).
5.
The BEP will also issue a hard reset to the DEA (PULSE_DEARST), which will cause its A-to-D converters to recalibrate and the focal plane temperature controller to reactivate. For details, see Warning #4 of Section 3.3.3.
6.
The hardware reset of the BEP will cause a reset of the Front End Processors (FEP), but won’t reset the FEP power settings. FEPs that were powered prior to the reset will remain powered, but will be held in reset state until a science run is started, or until they are powered off via subsequent cold boots or “Change System Configuration” commands (see Section 3.3.2).

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

1.
Warm Reset via the BEP Select command
If an un-selected BEP is selected, its Load-from-Uplink is de-asserted, but its Warmboot flag is asserted, the BEP will perform a warm boot.
2.
Retained Parameter Blocks
All Patches, Parameter Blocks, and Huffman Compression Tables are retained.
3.
Retained/Corrupted System Configuration
The System Configuration Table will be retained if its checksum is intact. If corrupted, however, the System Configuration Table will be overwritten by the default contained in EEPROM.
4.
Power-cycled DEA Video Boards
If the System Configuration Table is intact, the DEA Video boards that were powered prior to the reboot will be reset. If this is the first reboot since the PSMC last powered-up, the DEA interface board may not have been fully initialized (see Section 3.3.3). A second BEP reboot will ensure that it is.
5.
Cycled Focal Plane Temperature Control
If the System Configuration Table is intact, the DEA focal-plane temperature control set point will be set to 0 (due to the interface board reset), and then to the value it had prior to the reset.
6.
Reset FEPs
If the System Configuration Table is intact, FEP boards that were powered prior to the reset will remain powered, but will be held in a reset state.
7.
Preserved Memory
Unused portions of BEP memory will remain intact.
8.
“Stuck” Bi-level Values
The initial boot bi-level sequence will change faster than the sample rate of the telemetry system. Unless something goes wrong, don’t expect to see every code in the sequence as the instrument comes up. However, if the bi-level values “stick” to the following values for more than one science telemetry frame, or codes persist that are not listed, there is probably a problem with the instrument or command sequence to the instrument:

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.

3.1.3.4 Watchdog Reset

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:

1.
Copies the bulk of code and initialized data from EEPROM into I-cache and D-cache RAM.
2.
Skips the installation of the patches (NOTE: Although the patches aren’t applied to the code and data in RAM, the patch list will remain intact).
3.
Issues a Startup Message telemetry packet, indicating that there was a watchdog reboot, and indicating the integrity of the patch list, parameter blocks and system configuration table. NOTE: Since the system configuration table controls the focal-plane temperature and FEP and DEA power settings, if the table has been corrupted, the startup code will restore the default system configuration table from EEPROM into RAM, overwriting the corrupted copy.
4.
The initialization code for the DEA will reset the DEA Interface Controller board. This will have the effect of powering off the video boards. Within a few seconds, however, the System Configuration Task will restore power to those boards indicated in the preserved system configuration table (i.e. those boards that were on prior to the warm boot, will be re-powered).
5.
The hardware reset of the BEP will cause a reset of the Front End Processors (FEP), but won’t reset the FEP power settings. FEPs that were powered prior to the reset will remain powered, but will be held in reset state until a science run is started, or until they are power-cycled via a pair of “Change System Configuration” commands (see Section 3.3.2).

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

1.
Cold Watchdog Boot
If the Warmboot flag is de-asserted when the watchdog timer expires, the system will perform a cold boot, resetting the patch list, parameter blocks, bad pixel maps, etc. See Warnings in Section 3.1.3.2.
2.
Warm Watchdog Boot with No Patches
If the Warmboot flag is asserted when the watchdog timer expires, the system will perform a warm boot, except the patch list will not be installed. This could possibly raise compatibility issues with the retained tables, if format changes were introduced that relied on the patches being installed, or worse, a hardware problem work-around not being installed. Also, consider Warnings in Section 3.1.3.3.
3.
Power off in-use FEP
The most common causes of Watchdog resets in the lab have been (a) bad patches, and (b) FATAL_INTR_FEP_BUS_ERROR fatal errors due to accessing a FEP when its power is off. This can happen if one powers off a FEP while it is being used in a science run.
4.
Startup Message Info
In the Startup Message of the current version of the instrument software, the lastFatalCode field contains the BEP tick counter of the most recent Fatal Error Message.
5.
Recovery from Watchdog Boot
To recover from a Watchdog reset while preserving loaded patches, assuming the Patch List is not the cause, issue a Halt BEP/Run BEP command sequence to cause a normal Warmboot of the BEP.
6.
No looping Watchdogs
The hardware prevents looping Watchdog resets from locking up the instrument. After an initial Watchdog reset, the hardware prevents subsequent watchdog timer expirations, including those caused by a software Fatal Error, from resetting the BEP. An intervening commanded reset (or power-on reset), is required to reenable watchdog resets.

3.1.4 Loading from Uplink

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

1.
Uses of Load-from-Uplink
Although Load-from-Uplink is a useful diagnostic feature, building loads requires detailed knowledge of the instrument, DPA hardware, and the ACIS software development environment. Transmission of load-from-uplink commands does not require much knowledge beyond that described in this document, but act of building and understanding the effects of programs that use the Load-from-Uplink feature requires knowledge beyond the scope of this document. It is expected that only the ACIS software maintenance team will build programs that use this feature. However, it is possible that this team may request routine uplink loads to perform some types of ACIS maintenance activities.
2.
State of Instrument after a Load-from-Uplink
The state of any on-board stored parameter blocks, tables, etc., is completely up to the loaded program(s). Some programs may corrupt the state of the instrument, whereas others may leave the instrument in the previous state.
3.
Watchdog Timer Maintenance
Once a program is loaded from the uplink channel and begins execution, it has up to 3 seconds to reset the BEP’s watchdog timer. Once running, it is the loaded program’s responsibility to maintain the timer (NOTE: If the watchdog timer expires, it will reset the BEP. It will not reset the BEP a second time until the BEP receives either a commanded reset (Halt BEP/Run BEP) or power-on reset).
3.1.4.1 Boot Duration

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.

3.2 Halting the software

This section describes how the ACIS instrument software is halted.

3.2.1 BEP Power-Off

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.



Table 3.7: Power Off Command Sequence

  




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

1.
Lose all loaded parameters and tables
When a BEP is powered off, it loses all loaded parameter blocks, system configuration values, bad pixel and column maps, patches, Huffman tables and anything else that has been loaded into RAM. When the BEP is re-powered, the default parameter blocks, tables, etc. will be copied from EEPROM into RAM, and have their respective “as-launched” values (NOTE: This affects power-consumption and the state of the focal plane temperature controller).
2.
DEA may still be running
Since the DEA and DPA have separate power supplies, the DEA interface boards and video boards will remain powered when the DPA is powered off. Whatever state the DEA is in at the time the DPA is powered down will persist, specifically, the video board power (and clocking state), and the focal plane temperature control settings (including the focal plane bake-out heater state).
3.
Associated FEPs will be powered off
Powering down DPA-A will power down BEP-A and also FEP_0, FEP_1 and FEP_2; powering down DPA-B will power down BEP-B and also FEP_3, FEP_4 and FEP_5. As noted in warning 5 of Section 3.1.2, before powering down an active BEP, it should be commanded to power down all FEPs.

3.2.2 Halting the active BEP

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

1.
Release of reset causes boot
Refer to Section 3.1.3.2, Section 3.1.3.3, and Section 3.1.4 for descriptions of the types of boot that can occur when the BEP’s reset is released.

3.3 Changing the System Configuration

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.

3.3.1 System Configuration Table

The System Configuration Table, described in Appendix C, consists of a table of various settings. These settings are broken into the following components:

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.

3.3.2 Controlling FEP Power

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.



Figure 3.1: FEP Power Supplies and Enables

PIC


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

1.
Power Levels
Each FEP draws a certain amount of current. The current draw is different when the FEP is held in a reset state, versus when it is fully up and running. Refer to Table E.1 in AppendixE for a table of power levels, given certain configurations.
2.
Fatal Errors
If a FEP is powered off while its memory is being accessed, it will generate an un-handled BEP memory bus exception, resulting in a Fatal Error message and BEP Watchdog reset.
3.
Power-Retries/Telemetry Disruption
If a FEP’s power-supply is off when a command is issued to enable the FEP’s power, the hardware will generate BEP memory bus exceptions, which will interfere with telemetry packet transmission (fill-bytes, 0xb7, in the middle of telemetry packets). The System Configuration task will retry the power enable once per second, which may continue to interfere with telemetry.
4.
FEP Timestamp after Power-On
The FEP science 100KHz timestamp counters are synchronized to the BEP’s 100KHz timestamp counter. They are reset to 0 whenever the BEP counter’s least significant 25 bits are 0. This occurs about once every 7 minutes. After a FEP is powered on, its counter is initially out-of-synch with the BEPs counter, and sometime within 7 minutes of being powered on, the FEP’s counter will be set to 0. From then on, the reset of the FEP counter is synchronous with its rolling-over. This can lead to confusing initial FEP timestamps if a science run starts taking data within 7 minutes of a FEP being powered on.

3.3.3 Powering the DEA Interface and Video Boards

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.



Table 3.8: CCD, Video Board and Power Relay Relationships




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.



Table 3.9: DEA Power Supply Verifiers




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

1.
Don’t turn on both DEA Power Supplies
Although there are protections against damage to the system, the DEA is not designed to operate with both DEA Power Supplies powered.
2.
The relays “remember”
The DEA video relays stay switched to the most recent side across power-cycles. For example, if one powers DEA Side-B, switches the relays over, and then powers off the system, if one later powers DEA Side-A, all of the relays will remain switched to Side-B until a set of Change System Configuration entry commands are issued to switch them to the now active Side-A.
3.
Video Board Power cycles may have to be routine
The Analog-to-Digital converters on the DEA video boards may be subject to radiation-induced latch-up. The current limiter circuits on the video boards protect the boards from any damage, but the ADCs will not recover without intervention. To recover from a latch-up, the user must issue a Change System Configuration command to power off the video boards, wait, and then issue another to re-power the video boards (NOTE: Alternatively, a warm boot of the BEP could be used). Over the first two decades of on-orbit operation, we have not seen a single latch-up, but there can always be a first time.
4.
DEA housekeeping inaccurate after power-on
Certain DEA housekeeping values will be slightly inaccurate after DEA board power-on due to DEA board 11’s Analog to Digital Converter (ADC) calibration occurring before supply voltages have settled on the board. One can correct the situation by following a DEA side power-on reset with a BEP reset (see memo “ACIS - DEA ADC Reset”, D. Gordon, 18-Nov-2005). When the BEP boots (via power-on, hard reset, warm reset or watchdog reset), the BEP software will issue a DEA reset (PULSE_DEARST) to board 11, which initiates a re-calibration of its ADC.

3.3.4 Controlling the DEA Video Board Settings

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

1.
Loaded into DEA upon Science Run
Although the settings are loaded into the instrument with a Change System Configuration command, the Video Board settings aren’t actually loaded into the DEA hardware until a Start Science Run or Start Bias Only Run command is received, and the BEP starts setting up for the run.
2.
Jitter DAC
During X-ray Calibration testing, it was discovered that it is necessary to “jitter” some of the video board voltages prior to starting to take science data. This action causes the CCDs to flush out built-up residual charge more effectively, leading to shorter start-up times. The most recent version of the instrument software now contains code that, when setting up for a science run, sets the necessary video board DACs to their “jitter” value, parallel clocks the CCDs for up to 11 seconds, and then restores the DACs to the values configured in the System Configuration Table. For more detail of Jitter DAC, see Appendix G.
3.
Video ADC Offsets in Science Parameter Block
Although the Video Board ADC Offset parameters are listed in the System Configuration Table, they are overridden by the corresponding parameters in a science run’s parameter block, and as such, the values stored in the System Configuration Table never make it into the DEA.
4.
Clipped to upper limits
Items whose values exceed their respective limits are clipped to the limit value.
5.
See Warnings in Section 3.4.6.5.

3.3.5 CCD Voltage Setting Limits

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:



Table 3.10: System Configuration Table Value Limits



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.

3.3.6 Controlling the Focal Plane Temperature

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.



Table 3.11: Focal Plane Temperature Set Values








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

1.
Instrument Power Draw and Fusing
Since the bake-out heater will draw a peak current of 40W when it is enabled, it is only prudent to have it powered from the side of the PSMC not being used for any other significant purpose. To ensure that this happens, prior to patching or modifying the Bake-Out Enable’s limit value:

Ensure that prior to removing the patch:

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.

2.
Dirt moves to coldest item
Since contaminants tend to migrate to the coldest object, when baking out the focal plane, always heat the focal plane prior to enabling the Detector Housing heater.

3.3.7 Controlling other DEA Settings

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.

3.4 Monitoring the Instrument

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.

3.4.1 Engineering Housekeeping

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.

3.4.2 System Startup Message

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:



Table 3.12: Startup Message Flags to Reset Type




watchdogFlag
warmBootFlag
Reset Type
Reference




0 0 Cold or Power On Boot Sections 3.1.3.1 and 3.1.3.2




0 1 Warm Boot Section 3.1.3.3




1 0 Cold Watchdog Boot Section 3.1.3.4




1 1 Warm Watchdog Boot Section 3.1.3.4





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.

3.4.3 Software Housekeeping

Approximately once every 64 seconds, the Software Housekeeping task issues a “Software Housekeeping” telemetry packet and updates the engineering bi-level values.

3.4.3.1 Bi-Level Telemetry

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.



Table 3.13: Bi-level Telemetry Mnemonics

  




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)







Table 3.14: Software Housekeeping Bi-level States

  




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

1.
After the software boots and is running, the software housekeeper will alternate between pairs of bi-level values every 64 seconds. If the telemetry format samples these values less than this period, it is possible to for the engineering telemetry to miss one or more transitions, temporarily giving operators the erroneous impression that the housekeeping process has stopped. In the pathological case, where the telemetry under sampling is in phase with the housekeeping period, the operator may never see a transition until the system switches to another telemetry format with a different bi-level sampling period.
3.4.3.2 Software Housekeeping Statistics

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.

3.4.4 Command Echoes

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

3.4.5 Fatal Error Messages

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.



Table 3.15: Fatal BEP Error Codes



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





3.4.6 DEA Housekeeping Runs

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.

3.4.6.1 Loading DEA Housekeeping Parameter Block

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

1.
Each DEA sample takes at least 0.2 second
These delays are not included in the sampleRate of the housekeeping parameter block.
2.
Sampling Video Board ADCs takes longer
In order to handle the rise time of the Video Board ADC signal path, the read time of a video board ADC channel (ccdId < 10 & queryId > 127) adds a further 0.5 seconds. Not counting small processor loading and command delays, the actual sample rate is approximately:.
 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.

3.
Video Board ADC read-outs require all installed video boards to have power
See Section 3.4.6.5.
4.
Power-cycle/Cold Boot resets slots
A power-cycle or cold reboot of the instrument will reload the contents of the DEA Housekeeping parameter block slots with those provided in EEPROM.
3.4.6.2 Starting DEA Housekeeping

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

1.
Possible Noise
In order to reduce noise and improve science data quality, science runs disable the video board command clock and command data lines while taking data, but the BEP will enable them again if a housekeeping run requests a DEAHOUSE_CCD_ADC_* value from a powered-up ccdId, and disables them again after each such query.
2.
Video Board Housekeeping limitation
To take accurate housekeeping from video boards, all 10 CCDs must be powered. See Section 3.4.6.5 for details. To avoid blowing fuses, etc., it is not advisable to start a science run with more than 6 CCDs powered up. Ergo, it is either senseless or dangerous or both to take video board housekeeping during a science run. The single video housekeeping packet written at the start of each science run is created before disabling the command clock.
3.
Corrupted Slots
If the selected slot is corrupt but slot 0 is not corrupt, then slot 0 will be selected for the run. If both slots are corrupt, then the run will not be started.
4.
Contention for DEA Interface
When a DEA Housekeeping run is active, and a science run is in the process of setting up, the DEA Housekeeping task and the Science task arbitrate for access to the DEA command and status channels. Some actions of the Science task can cause the DEA Housekeeping task to time-out (but not vice-versa) waiting for the channel. This is reported as an 0xffff value for the affected query or queries.
3.4.6.3 Stopping DEA Housekeeping

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

3.4.6.4 DEA Interface Board Housekeeping

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.

 N := 1.14(adc-2048) 
 IF N <= 10 ; THEN Open Circuit ; 
 ELSE IF N >= 2040 ; THEN Short Circuit; 
 ELSE 
    Q := ln(5230(N)/(2048-N)) ; 
    C := 1.0/(1.074x10-7 Q3 + 2.372x10-4 Q + 1.4733x10-3) - 273.16; 
 END IF

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:

 IF adc <= 10 ; THEN Open Circuit ; 
 ELSE IF adc >= 4096 ; THEN Short Circuit ; 
 ELSE 
    T := (adc-2048)/1.255 
    C := -1.885x10-9 T3 + 1.415x10-5 T2 + 0.1863 T - 246.3 
 END IF

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:

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4085 ; THEN +Error ; 
 ELSE 
    V := 0.00122*adc - 2.5 
    END IF

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:

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4085 ; THEN +Error ; 
 ELSE 
    V := 0.01017*adc - 20.83 
 END IF

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:

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4085 ; THEN +Error ; 
 ELSE 
    V := 0.02044*adc - 41.90 
 END IF

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:

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4085 ; THEN +Error ; 
 ELSE 
    mA := 0.00122*adc-2.5 
 END IF
3.4.6.5 Video Board Housekeeping (all boards must be powered)

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.



Table 3.16: Video Board Registers



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

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4086 ; THEN +Error ; 
 ELSE 
    V := 0.00625*1.14*(adc-2048) 
 END IF

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:

 IF adc < 10 ; THEN -Error ; 
 ELSE IF adc > 4086 ; THEN +Error ; 
 ELSE 
    V := 0.01875*1.14*(adc-2048) 
 END IF

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):

 N := 1.14(adc-2048) 
 IF N <= 10 ; THEN Open Circuit ; 
 ELSE IF N >= 2040 ; THEN Short Circuit; 
 ELSE 
    Q := ln(5230(N)/(2048-N)) ; 
    C := 1.0/(1.074x10-7 Q3 + 2.372x10-4 Q + 1.4733x10-3) - 273.16; 
 END IF

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

1.
Powered off boards drag down ADC read-outs
The following roughly illustrates the architecture of the video board analog housekeeping:


Figure 3.2: Video Board ADC Signal Path

PIC


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.

2.
ADC channels take time to read
Due to the charging time of the video board ADC signal path, the instrument software reads a Video Board ADC channel 5 times, with a 0.1 second delay between each read. This leads to minimum of 0.5 seconds for each read of an ADC video board channel.
3.
Some things should never change
Due to the behavior of the instrument software, certain bits in the Video Board registers should always read the same value. These are:

DEAHOUSE_CCD_REG_2

bit 6

Hold Housekeeping - Always reads as 0

DEAHOUSE_CCD_REG_3

bit 4

Status Enable - Always reads as 1

4.
Video Board Parameters aren’t loaded until Science Run
Since a Science run globally resets the video boards, the video board parameters are not loaded into the boards until the setup stage of a Science Run (see Section 3.3.4), and, therefore, the affected DEA Video Board housekeeping values will not reflect any System Configuration changes until a science run starts.
3.4.6.6 Standard DEA Housekeeping at Start of Science Run

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:



Table 3.17: Video Board Registers reported at start of science run




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

1.
ADC/Temperature readings are just flags unless all installed boards are powered
See Section 3.4.6.5 Warnings
2.
For science runs, deaBlockId is the parameterBlockId
If the user assigns distinct block ids for DEA Housekeeping parameter blocks and Science Parameter blocks, the deaBlockId within housekeeping telemetry packets can be used to discriminate between housekeeping packets produced by a DEA Housekeeping run, v.s. packets produced during the setup for a science run.

3.5 Managing the Bad Pixel and Column Maps

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.

3.5.1 Adding Bad Pixels and Columns

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

1.
Power-Cycle or Cold Boot loads default lists
If the BEP is power-cycled or performs a cold re-boot, all previously loaded bad pixels and columns are removed and overwritten with the default lists contained in EEPROM. See Section 3.5.2 to set the lists to an empty state.
2.
Re-compute bias maps whenever the pixel/column maps change
The implementation of the bad pixel and column filtering uses special codes poked into the FEP bias map to eliminate those pixels from data processing. These codes are written into the maps after the maps have been re-computed. If any pixels or columns have been added since the last bias recomputation, new bias maps must be computed. If any pixels or columns are removed from the lists, the bias maps must be recomputed to produce valid bias values for the corresponding locations in the map.

3.5.2 Resetting the on-board maps

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

1.
Same as Section 3.5.1 Warnings

3.6 Memory Dumps

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.

3.6.1 General Memory Reads

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.



Table 3.18: BEP Virtual Memory Map





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







3.6.1.1 BEP Memory Read

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 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.



Table 3.19: BEP Memory Aliasing




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

1.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a dump of the Huffman Tables, the earlier read will be aborted, possibly causing incomplete information to be telemetered. The new read will then commence.
2.
Ignored if Write-Memory or Execute-Memory being performed
If a Write-Memory command or Execute-Memory command is being executed by the Memory Server task when a read, write, or execute request is received , the new command will NOT be executed.
3.
Fatal Errors due to reads of un-powered FEP shared memory
Attempts to read shared memory regions belonging to FEPs that do not have power will most likely result in a BEP Bus Error exception, Fatal Error Message and BEP re-boot.
3.6.1.2 EEPROM Memory Read

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

1.
See Section 3.6.1.1 Warnings
3.6.1.3 FEP Memory Read

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:

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.



Table 3.20: FEP Virtual Memory Map





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

1.
See Section 3.6.1.1 Warnings
2.
Reads from Powered Off FEPs may reset BEP
Attempts to read FEP memory from FEPs that do not have power may result in a BEP Bus Error exception, Fatal Error Message and BEP re-boot.
3.
Shared Memory Reads are direct
The BEP implements FEP read requests to shared memory regions by just reading the memory directly. This may affect the performance of on-going science by stealing bus cycles away from the FEP.
4.
Non-shared Memory Reads need help from FEP
The BEP implements FEP read requests to non-shared memory regions by issuing requests to the FEP via the BEP-to-FEP software mailbox. This may interfere with the performance of on-going science by actively requesting interactions with the software running on the FEP. These types of reads also require that the FEP software be up-and-running, and will time-out if the FEP software has crashed or if the FEP is held in a reset state.
5.
Bias array values may differ between BEP and FEP
When the BEP reads the image and bias arrays through the memory mapped interface, each 32-bit word contains two 12-bit pixels, as indicated in the Image and BiasBEP columns of Table 3.21. When the same bias words are read by the FEP’s CPU while “event thresholding” is activated, the firmware fills extra bits as shown in the BiasFEP columns to help detect corruption in the bias arrays. Immediately it detects a bias parity error, the FEP software replaces the corrupted 12-bit bias value with 4094 (0xffe).
6.
Don’t read Bias/T-plane/P-plane during a Science Run
The FEP hardware cannot reliably handle science data processing and BEP requests to read bias-memory and threshold or parity plane simultaneously. This may cause writes of the hardware to the threshold plane and parity planes to cease, causing loss of science data from the affected FEP. A reset of the FEP is required to recover from this condition, and FEPs are only routinely reset when they are power-cycled, are re-loaded at the start of a science run after a FEP crash, or when a science run is aborted due to the radiation monitor.



Table 3.21: Contents of Image and Bias words








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










3.6.1.4 DEA Video Board Memory Read

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:

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

1.
See Section 3.6.1.1 Warnings

3.6.2 Memory Reads Tagged by Context

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.

3.6.2.1 Bad Pixel and Column Maps

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

1.
See Section 3.6.1.1 Warnings
2.
Odd number of columns confusing
The number of columns is ambiguous when dumping a table containing an odd number of bad columns and when the last entry in the list has the values (CCD = I0, ccdColumn = 0).
3.6.2.2 Parameter Block Slots

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:



Table 3.22: Types of parameter block
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

1.
See Section 3.6.1.1 Warnings
2.
Each type of parameter block has its own set of slots
A common misconception about ACIS is that any type of parameter block can go into any slot. THIS IS FALSE. Each type of parameter block has its own distinct set of slots. One cannot store a Continuous Clocking Parameter Block (well, not by accident at least) in a Timed Exposure Parameter Block Slot.
3.
Each slot is always 512 bytes in length
The parameter block slots are always 512-bytes in length, although the parameter blocks themselves may be shorter. This leaves gaps between the parameter blocks in the dumped telemetry data filled with random data.
3.6.2.3 Huffman Table

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

1.
See Section 3.6.1.1 Warnings
2.
Huffman tables take 9 packets to dump
A common error when manually commanding ACIS is to not leave enough time for the Huffman table dump to complete prior to issuing the next dump command. At 24 Kbps (format 2), this will take about 13 seconds, and at 500 bps (all other formats), it will take about 10 minutes.
3.6.2.4 Patch List

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:



Table 3.23: Content of Patch Dump
Additional patch nodes are stored at increasingly lower addresses




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.

1.
See Section 3.6.1.1 Warnings
2.
Size of Patchlist Dump will vary
The size of a Patchlist Dump depends on the number of patch nodes (three 32-bit words of header per node) and the amount of data stored in each node.
3.
Entire dump required to interpret
Because the patch nodes are stored in RAM from high-memory to low-memory, the node headers follow their respective data arrays, and the data arrays are variable in length, the end of the patchlist dump must be received to interpret nodes preceding it in memory. It is difficult to interpret nodes prior to any telemetry outages or corruptions in the patchlist dump.
3.6.2.5 System Configuration Table

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

1.
See Section 3.6.1.1 Warnings
2.
Video Boards are only loaded upon start of science run
Because video board parameters are loaded into the DEA upon starting a science run, the video board items in the dumped System Configuration table reflect what is in the table, but not necessarily what is currently loaded into the CCDs video boards.

3.7 Memory Loads

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.

3.7.1 Patching the software

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.

3.7.1.1 Loading the Patches

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

1.
Bad patches can crash the instrument software
Since patches can write anything, anywhere, it is possible that a patch may cause the instrument to crash upon a warm-reboot. If this happens, when the instrument re-boots, it will detect that it was reset due to the watchdog timer and will not reapply the patches to the load copied from EEPROM (see Section 3.1.3.4).
2.
No checks for full patch list
In order to allow the maintainer to work around unforeseen problems, the instrument software does not check to see if an added patch node overwrites any code or tables in the instruction cache. It is the maintainer’s responsibility to predict where the nodes will go, and to ensure that they do not overwrite any existing tables and/or code.
3.
Patches are lost upon power-on boot or cold boot
Upon a power-cycle or cold boot (see Section 3.1.3.1 and Section 3.1.3.2), the on-board patch list is reset to an empty state (NOTE: On a cold boot, there is a “back-door” recovery strategy. If you know the where the end of the patch list is, and what the checksum value is (see note in Section 3.6.2.4), you can “Write BEP” the end-of-list pointer and checksum fields to recover the list. This trick won’t work for the power-cycle case, however, because the memory contents will decay once the power is removed from the BEP).
4.
Adding a patch may hide a corrupted list
The checksum for the patch list is only checked when the instrument is re-booted. Whenever a patch node is added to the instrument, the checksum is re-computed and stored. If the patch list is in a corrupt state prior to adding a new patch to the list, the adding of the patch will hide the corruption by re-computing the checksum and storing it.
5.
Patches are applied in the order they were sent to the BEP
Their patchId fields are used to identify them, but not to define the order in which they will be applied. To replace a patchId, first delete the old one with a “remove n patch” command, which causes the BEP to squeeze out that space in the patch list; then use an “addPatch” command to append the new patch to the end of the list. Note that this may affect the order in which the updates are applied. If this will cause trouble, you must delete all or part of the patch list and add the patches back in the correct order.
3.7.1.2 Installing the Patches (Warm Boot)

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

1.
See Section 3.1.3.3 Warnings
2.
Watchdog re-boots will not re-install the patches
If the instrument watchdog resets, due to a fatal error, or some lockup causing a watchdog time-out, the instrument will perform a Watchdog Reset (see Section 3.1.3.4). This reset will reload code and data from EEPROM, but will not reapply the patch nodes. The patch nodes themselves, however, will remain in RAM, and will be re-applied upon the next commanded warm re-boot.
3.7.1.3 Removing Patches

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

1.
A warm boot is required to remove the effect of a patch
Once patches are removed from the patch list, they will no longer be applied when the instrument performs a warm boot. However, the effect of any patches installed by the last warm boot will remain in RAM until the BEP is reset.
2.
Removing a patch may hide a corrupted list
The checksum for the patch list is only checked when the instrument is re-booted. Whenever a patch node is removed from the instrument, the checksum is re-computed and stored. If the patch list is in a corrupt state prior to removing a patch from the list, the removal of the patch will hide the corruption by re-computing the checksum and storing it.
3.7.1.4 Dumping the Patch List

See Section 3.6.2.4.

3.7.2 Writing to BEP Memory

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 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

1.
Writes of the wrong data to the wrong locations can crash the software
It is assumed that the maintainers know what they’re writing and why.
2.
BEP hardware is memory mapped
Write BEP commands can write to BEP hardware registers.
3.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a dump of the Huffman tables, the earlier read will be aborted, possibly causing incomplete information to be telemetered. The write will then commence.
4.
Written data may be lost upon next re-boot
Unless the writes are being used to modify the patch list, any data written to areas overwritten by the EEPROM load, or initialized and used by the running software, will be lost upon the next re-boot of the instrument.
5.
Fatal Errors due to writes to un-powered FEP shared memory
Attempts to write to shared memory regions belonging to FEPs that do not have power will result in a BEP Bus Error exception, Fatal Error Message and BEP re-boot.

3.7.3 Writing to FEP Memory

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:

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

1.
Writes of the wrong data to the wrong locations can crash the FEP software
It is assumed that the maintainers know what they’re writing and why.
2.
FEP hardware is memory mapped
Write FEP commands can write to FEP hardware registers.
3.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a dump of the Huffman tables, the earlier read will be aborted, possibly causing incomplete information to be telemetered. The write will then commence. comment[id=PF]Check that earlier memory read will be aborted
4.
Written data may be lost upon next re-boot of the FEP
Any data written to areas overwritten by the FEP program load, or initialized and used by the running software, will be lost upon the next re-boot of the FEP.
5.
Fatal Errors due to writes to un-powered FEP shared memory
Attempts to write to shared memory regions belonging to FEPs that do not have power may result in a BEP Bus Error exception, Fatal Error Message and BEP re-boot.
6.
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 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.

3.7.4 Writing to DEA Sequencer Memory

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:

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

1.
Don’t use this to load science sequencer code
The ACIS science software is designed to re-load the SRAM and PRAM for each video board at the start of each science run. If a literal load of SRAM or PRAM is required for a run, the science parameter blocks provide a mechanism to reference the content of these loads (see ACIS IP&CL Software Structure Definitions, MIT-CSR 36-53204.0204, the deaLoadOverride field of the loadTeBlock and loadCcBlock definitions described on pages 150 and 164, respectively).
2.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a dump of the Huffman tables, the earlier read will be aborted, possibly causing incomplete information to be telemetered. The write will then commence.
3.
Written data may be lost upon the setup for the next science run
During the setup stage for each science run, the ACIS software resets all of the video boards and re-loads their SRAM and PRAM with the code to use for the run. This may overwrite areas written to by earlier Write SRAM and Write PRAM commands.
4.
Written data may be lost upon next power-cycle of the video board
Any data written into the video boards will be lost when power is removed from the board.
5.
DEA power must remain on
The ACIS software recognizes that a video board has power if it successfully sends the command to power the board. If the DEA is off when the command is issued, the resulting error will prevent the software from flagging the video board as powered. If, however, the DEA is powered off after successfully powering on video boards, the ACIS software continues to think that the video boards have power. Under these conditions, ACIS will accept and acknowledge the request to write to the video board with a 1 (CMDRESULT_OK), but will subsequently encounter an error when attempts to execute the write. This error will be indicated in Software Housekeeping as a SWSTAT_DEABOARD_ERROR report.

3.8 Calling Subroutines

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.

3.8.1 Calling BEP subroutines

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:

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

1.
Calls to the wrong locations or with the wrong arguments can crash the software
It is assumed that the maintainers know what they are calling, and why.
2.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a “dump” of the Huffman tables, the earlier “read” will be aborted, possibly causing incomplete information to be telemetered. The execute will then commence.
3.
Routines must return within 7 minutes or manage task monitor requests
Within the ACIS software, there is a Task Monitor task that issues an event to each task in sequence. The target task must then respond to the Task Monitor. Once the targeted task responds, the Task Monitor “touches” the hardware watchdog timer, sleeps, for about 1 second, and then moves on to the next task. If a task does not respond within about 8 minutes, the hardware watchdog timer will expire and reset the BEP. Since subroutines invoked by the “Execute BEP” command run under the Memory Server task, they must either return to the calling Memory Server code within about 7 minutes, so the Memory Server code can respond to the Task Monitor, or must themselves respond to the Task Monitor queries. If not, the called routine will starve the watchdog timer, and cause the BEP to reset.

3.8.2 Call FEP subroutines

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:

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

1.
Calls to the wrong locations or with the wrong arguments can crash the FEP
It is assumed that the maintainers know what they are calling, and why.
2.
Aborts earlier read
If, when the command is received, the Memory Server task is executing an earlier read command, such as a “dump” of the Huffman tables, the earlier “read” will be aborted, possibly causing incomplete information to be telemetered. The “execute” will then commence.
3.
FEP routines must return within 7 minutes or manage the FEP watchdog timer
Software running on the FEP is jointly responsible for maintaining the watchdog timer. This timer will expire and reset the FEP if it is not reset at least once every 8 minutes. If a science run was in process, the science task will report SWSTAT_FEPREC_RESET and stop processing data from that FEP. All called subroutines on the FEP must either return within 7 minutes, or must touch the watchdog timer themselves.
4.
FEP routines must return within 10 seconds to avoid reply time-out on the BEP
The BEP maintains a 10 second time-out when waiting for replies from the FEP. If the subroutine on the FEP does not return within 10 seconds, the BEP will not issue a “FEP Execute Reply” telemetry packet and the return code from the subroutine will not be reported.
5.
As discussed 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 13..15 and 29..31 in a bias word will depend on whether “event thresholding” is active in the FEP.

3.9 Radiation Monitor Triggers

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

1.
Bias will always be re-computed on next science run
Because the radiation may corrupt the contents of the FEP bias maps, these maps are always re-computed at the start of the resumed run, or next science run. This may affect the start-up time of an observation.
2.
Thermal conditions may change
When the video boards are autonomously powered off, the DEA will get a little colder.
3.
DEA Housekeeping will report 0xffff for video boards
If a DEA Housekeeping run is in progress that queries one or more of the video boards, the corresponding entries will report 0xffff while the boards are off.
4.
Desired science run state is “remembered”
ACIS remembers the most recent science run command when the radiation flag is asserted. Once it is de-asserted, ACIS attempts to place the instrument into the science configuration that was desired for that moment in the observatory timeline.

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.

Section 4
Instrument Science Activities

This Section describes the various activities used to perform routine science operations using the ACIS instrument software.

4.1 Performing a Science Run

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):

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.

4.1.1 Estimating Minimum Integration Times

4.1.1.1 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 + n-+-4
  m + 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
  ...
}

4.1.1.2 Timed Exposure Mode

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 4-+n-
  m + r-+-1
  m (n-+-4-
  m + 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
  ...
}

4.1.2 Estimating Setup Time

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:

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.

4.1.3 Estimating Telemetry Utilization

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.



Table 4.1: Telemetry Buffer Allocations






Buffer
Pool

Buffer
Count
Buffer Size
(bytes)

Telemetry Packet
Types

Packet Size
(bytes)

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
compressed words)

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
compressed words)

Bad or no compression yields 1 row per packet. Excellent compression yields about 8 rows per packet.

dataCcRaw




dataBiasError

20+(4*n
bias errors)

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
reports)

1 every  64 seconds








4.1.4 Parameter and Window Blocks

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.

4.1.4.1 Timed Exposure Parameter Blocks

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).



Table 4.2: Timed Exposure Processing Mode Selection





BEP

Mode
fepMode
Packing
Telemetry Packets
Enabled Parameters
Mode






Raw

Raw ignored

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3a. (1..n) dataTeRaw
3b. (1..n) exposureTeRaw
4. scienceReport

rawCompressionSlotIndex
windowSlotIndex






Histogram

Histogram ignored

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3a. (17 or 33) dataTeHist
3b. (1..n) exposureTeHistogram
4. (1) scienceReport

histogramCount






Event
Histogram

Histogram ignored

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3a. (17 or 33) dataTeEvHist
3b. (1..n) exposureTeEvHistogram
4. (1) scienceReport

histogramCount






Faint 3x3

3x3 Faint

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3. (0..n) dataTeBiasMap
4a. (0..n) dataTeFaint
5. (1) scienceReport

All bias parameters
fepEventThreshold
fepSplitThreshold
lowerEventAmplitude
eventAmplitudeRange
gradeSelections
windowSlotIndex






Faint with
Bias 3x3

3x3 FaintBias

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3. (0..n) dataTeBiasMap
4a. (0..n) dataTeFaintBias
4b. (1..n) exposureTeFaintBias
5. (1) scienceReport

Same as Faint 3x3






Graded

3x3 Graded

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3. (0..n) dataTeBiasMap
4a. (0..n) dataTeGraded
4b. (1..n) exposureTeFaint
5. (1) scienceReport

Same as Faint 3x3






Faint 5x5

5x5 Faint

1. (1) dumpedTeBlock
2. (1) deaHousekeepingData
3. (0..n) dataTeBiasMap
4a. (0..n) dataTeVeryFaint
4b. (1..n) exposureTeFaint
5. (1) scienceReport

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:

0.
FULL mode: the images are clocked out of all four CCD output nodes, A, B, C, and D.
1.
DIAG mode: the images are clocked in a reverse direction, away from the four output nodes. This is used to measure clocking noise in the DEA electronics by clocking the CCDs, but not moving any charge into the electronics. From the instrument software’s point of view, the resulting image appears as if it were clocked in FULL mode.
2.
AC mode: clocks the serial registers through the A and C nodes. It is only intended to be used if either the B or D video chains should fail. Since only half the video chains are used, this mode takes twice as long to clock a full frame as FULL or DIAG mode (see Section 4.1.1).
3.
BD mode: only the B and D nodes are used. It is only intended to be used if either the A or C video chains should fail. Since only half the video chains are used, this mode takes twice as long as FULL or DIAG mode (see Section 4.1.1).

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:

1.
A science run is started and the recomputeBias flag is set in its parameter block
2.
A Bias-Only science run is started (see Section 4.2)
3.
A science run is started and either:
  • 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.



Table 4.3: Timed Exposure Bias 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
=1 to use fractal
=2 to use medmean




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

1.
Video Offsets are overrides
The video offset parameters in the parameter block override those specified in the System Configuration Table (see Section 3.3.4). The video offset parameters in the System Configuration Table are never used.
2.
Use System Configuration to control board power
The science parameter blocks DO NOT apply or remove power from hardware boards. If a video board or FEP is not powered, it will not be used for the run. If none of the requested boards are powered, the run will be aborted.
3.
Unsupported Parameter Value Combinations
The following combinations of these parameters are not supported because the necessary microcode is missing from the SRAM library.



Table 4.4: Unsupported Timed Exposure Parameter Values


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




4.1.4.2 2-D Window Parameter Blocks

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

1.
First matching window determines pixel acceptance/rejection
Contrary to how bit-mapped graphics overlay each other, and paste-up sheets are overlaid on a table, the windows in the parameter block are applied successively, where the first window in the parameter block that matches the pixel location determines whether or not to accept that pixel.
2.
Cannot specify 6 windows for all 10 CCDs in 1 block
The parameter block can only hold up to 49 windows.
3.
Row and Column 0 and 1023 never produce events
In order to handle the event detection boundary conditions in the Front End Processors, the FEPs never produce events centered on row 0, column 0, row 1023 or column 1023.
4.
Only event centers must be in the window
For event processing, only the center pixel of the event must be within the window for the event to be processed by the window. In raw mode, any raw pixel that is within the window is processed by the window. The wording in the Software Requirements Specification is a little confusing on this point.
4.1.4.3 Continuous Clocking Parameter Blocks

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).



Table 4.5: Continuous Clocking Processing Mode Selection





BEP

Mode
fepMode
Packing
Telemetry Packets
Enabled Parameters
Mode






Raw

Raw ignored

1. (1) dumpedCcBlock
2. (1) deaHousekeepingData
3a. (1..n) dataCcRaw
3b. (1..n) exposureCcRaw
4. scienceReport

rawCompressionSlotIndex
windowSlotIndex






Faint 1x3

1x3 Faint

1. (1) dumpedCcBlock
2. (1) deaHousekeepingData
3. (0 or n) dataCcBiasMap
4a. (1..n) dataCcFaint
4b. (1..n) exposureCcFaint
5. (1) scienceReport

All bias parameters and
fepEventThreshold
fepSplitThreshold
lowerEventAmplitude
eventAmplitudeRange
gradeSelections
windowSlotIndex






Graded 1x3

1x3 Graded

1. (1) dumpedCcBlock
2. (1) deaHousekeepingData
3. (0..n) dataCcBiasMap
4a. (1..n) dataCcGraded
4b. (1..n) exposureCcFaint
5. (1) scienceReport

Same as Faint 1x3






Faint 3x3

3x3 Faint

1. (1) dumpedCcBlock
2. (1) deaHousekeepingData
3. (0 or n) dataCcBiasMap
4a. (1..n) dataTeFaint
4b. (1..n) exposureCcFaint
5. (1) scienceReport

Same as Faint 1x3






Graded 3x3

3x3 Graded

1. (1) dumpedCcBlock
2. (1) deaHousekeepingData
3. (0..n) dataCcBiasMap
4a. (1..n) dataTeGraded
4b. (1..n) exposureCcFaint
5. (1) scienceReport

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:

0.
FULL mode: the images are clocked out of all four CCD output nodes, A, B, C, and D.
1.
DIAG mode: the images are clocked in a reverse direction, away from the four output nodes. This is used to measure clocking noise in the DEA electronics by clocking the CCDs, but not moving any charge into the electronics. From the instrument software’s point of view, the resulting image appears as if it were clocked in FULL mode.
2.
AC mode: clocks the serial registers through the A and C nodes. It is only intended to be used if either the B or D video chains should fail. Since only half the video chains are used, this mode takes twice as long to clock a full row as FULL or DIAG mode (see Section 4.1.1).
3.
BD mode: clocks the serial registers through the B and D nodes. It is only intended to be used if either the A or C video chains should fail. Since only half the video chains are used, this mode takes twice as long to clock a full row as FULL or DIAG mode (see Section 4.1.1).

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

1.
A science run is started and the recomputeBias flag is set in its parameter block
2.
A Bias-Only science run is started (see Section 4.2)
3.
A science run is started and either:
  • 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.



Table 4.6: Continuous Clocking Bias Parameters




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

1.
Video Offsets are overrides
The video offset parameters in the parameter block override those specified in the System Configuration Table (see Section 3.3.4). The video offset parameters in the System Configuration Table are never used.
2.
Use System Configuration to control board power
The science parameter blocks DO NOT apply or remove power from hardware boards. If a video board or FEP is not powered, it will not be used for the run. If none of the requested boards are powered, the run will be aborted.
3.
Unsupported Parameter Value Combinations
Due to an incomplete population of the as-launched SRAM library, some clocking combinations are not supported and will abort the run if selected. These are:



Table 4.7: Unsupported Continuous Clocking Parameter Values


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




4.1.4.4 1-D Window Parameter Blocks

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

1.
First window in the list that matches an event’s column hides subsequent windows
Contrary to how bit-mapped graphics are produced, and paste-up sheets are overlaid on a table, the last window in the parameter block is the “bottom-most” window.
2.
Column 0 and 1023 never produce events
In order to handle the event detection boundary conditions in the Front End Processors, the FEPs never produce events centered on column 0 or column 1023.
3.
Only event centers must be in the window
For event processing, only the center pixel of the event must be within the window for the event to be processed by the window. In raw mode, any raw pixel that is within the window is processed by the window. The wording in the Software Requirements Specification is a little confusing on this point.

4.1.5 Starting a Science Run

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.



Table 4.8: Science Run Processing Steps



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

1.
Command Echo does not check parameter ranges
Parameter block fields are only checked as they are used to setup for the run. If there is an error in one or more fields, the run may be prematurely terminated, with the Science Report’s terminationReason indicating the type of error. ACIS does not explicitly call-out which parameter is in error, however.
2.
Re-starting aborts the earlier run
If a run is in progress, and a subsequent “start” TE or CC command is received, the FEPs will be reset and the earlier run will be aborted, after which the new run will be configured and started. Sometimes this takes a long time, and may lead to confusion when a “human” is interacting with the instrument. The condition is indicated in the command echo to the “start” command, and the bi-levels accurately reflect the current state of the instrument.
3.
Re-starting runs may cause a FEP error to be reported
When a run is re-started, the earlier run is aborted. This abort forces a reset of the FEPs to ensure that nothing gets locked up. If the previous run is interacting with a FEP when the reset is issued, its Science Report may indicate that FEP errors have occurred.
4.
Radiation Monitor can inhibit a run
If a “start” TE or CC command is received while the radiation monitor flag is asserted, the new run won’t start until the radiation monitor is de-asserted.

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.

5.
If the block is corrupted, the patched* system will try slot 0 or 1
See the explanation in “Science Telemetry”, above.
6.
See Section 3.4.6.6 Warnings.

4.1.6 Stopping a Science Run

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
}



Table 4.9: FEP Error codes


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.






Table 4.10: Science Run Termination Codes


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

1.
Runs stopped due to radiation monitor may re-start later
Science runs that terminate due to the assertion of the radiation monitor, will re-start once the monitor is de-asserted, unless a “stop n science” command is received.
2.
Runs may abort due to bad parameters
Invalid parameters will cause a science run to abort during its setup stage. The report will set terminationCode to either: SMTERMPROC_PARM_INVALID, SMTERM_DEA_PARM_INVALID, SMTERM_FEP_PARM_INVALID, or SMTERM_FEP_CONFIG_ERROR.
3.
Stopping runs take time
Upon receipt of a “stop n science” command during pixel processing, the BEP waits for the FEPs to complete their current exposures. If the system is in “Raw” mode, or if there are a many events to report, this may take quite a while to finish. If, during that time, another “start” TE or CC command is received, the run will be terminated and the FEPs will be reset. Depending on the timing, the resulting terminationCode may be SMTERM_CLOBBERED, or may indicate some form of FEP error.
4.
A second stop command has no effect
The only reason for doubling the stop commands is to guard against telemetry corruption. If you need to terminate a science run without waiting for the FEPs to finish reporting event candidates, start a new science run and immediately stop it. This will also command the biasThief to stop telemetering bias maps. If you want to stop a run and kill its telemetry, command a warm boot (see Section 3.1.3.3) but don’t forget to restart DEA housekeeping!
5.
exposuresProduced is confusing
The exposuresProduced field is badly named. Although its name implies that it is the number of exposures clocked out of all of the CCDs, it is actually 1 plus the largest exposure number produced by any of the FEPs.
6.
exposuresSent is confusing
The exposuresSent field indicates the sum of the number of exposures telemetered from all of the FEPs.

4.2 Performing a Bias-Only Science Run

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.

4.2.1 Estimating Bias Computation Time

4.2.1.1 Continuous Clocking Mode

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

4.2.1.2 Timed Exposure Mode

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:

1.
Determine the minimum value of each pixel in biasArg0 frames
2.
Replace anomalously low bias values (if biasArg2 non-zero)
3.
Improve the value of each bias value from biasArg1-biasArg0 frames

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)

4.2.2 Estimating Bias Transmission Time

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.

4.2.3 Loading a Parameter Block

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).

4.2.4 Starting the Bias-Only Run

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

1.
See Section 4.1.5 Warnings
2.
See Section 3.4.6.6 Warnings
3.
CC Bias data array may contain some garbage

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.

Section 5
Example Scenarios

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.



Table 5.1: Atomic Procedures
Power Procedures
Boot Procedures
Housekeeping Procedures
Heater Procedures




Procedure
Name
Description
References








SOP_61038 dpaa_on

Turn on DPA A

3.1.1




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

3.3.3




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]

3.1.1, 3.3.3




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

3.1.3.3





COLDBOOT coldboot

Cold Boot the ACIS BEP

3.1.3.2





WARMBOOT_HKP warmboot_hkp

Warmboot BEP and start DEA H/K

3.1.3.3, 3.4.1









SOP_61010 dea_hkp

Load DEA HK Block & Execute DEA Housekeeping Run

3.4.1









SOP_61014 dahtr_b_on

Turn On Detector Assembly Heater Side B

5.8.3





SOP_61015 setfp_m120

Set focal plane temperature to -120C

3.3.6




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.



Table 5.2: Contingency Procedures
Switching between redundant units
Debugging anomalies
Miscellaneous contingencies




Procedure
Name
Description
References








SWAP_BEPA_B switch_bepa_b

Switch from BEP A to BEP B

3.1.1




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

3.3.3




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

5.8.3




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

3.6





DEAA_ON_TEST_VID deaa_on_test_vid

Turn On DEA A and Test Video Boards

3.3.3





CAP1375 eeprom_chk

Monitoring the active flight EEPROM

3.6.1.2, 5.9.1





SOP_61082 sw_fep0eng

Flight S/W FEP0 Engineering Patch









FSW_DUMP sw_dump

Dump Flight Software

3.6.1.2





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

5.9





SOP_61023 swbootmode

Tests BEP-A and -B reboots

3.1.1, 3.1.2






5.1 On-Orbit Checkout

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.



Table 5.3: In-Orbit Checkout Procedures



Procedure
Description
References



SOP_61024
Diagnose the ACIS video boards and DPA


Start a DEA HKP run if necessary

3.4.6.1



Run TE diagnostic mode of image array

See DIAG


Run TE diagnostic mode of spectroscopy array

p.143



Power-down video boards and FEPs

3.3.2, 3.3.3




SOP_61054
Obtain raw pixel data for diagnostic purposes


Start a DEA HKP run if necessary

3.4.6.1



Configure the instrument to collect imaging array data with all video boards up to check the clock biases

3.3.2, 3.3.3



Execute a short science run to get the clock biases

5.4



Configure the instrument to collect imaging array data with 6 video boards powered up

3.3.2, 3.3.3



Execute the science run, collect 2 raw frames per CCD, including a dump of all the configuration information

5.4



Configure the instrument to collect spectroscopy array data with all video boards powered up

3.3.2, 3.3.3



Execute a short science run to get the clock biases

5.5



Configure the instrument to collect spectroscopy array data with 6 video boards powered up

3.3.2, 3.3.3



Execute the science run, collect 2 raw frames per CCD, including a dump of all the configuration information

5.5



Reconfigure back to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




SOP_61053
Check the integrity of the Optical Blocking Filter


Start DEA HKP if necessary

3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the science run with the ACIS-I array, including a dump of the complete configuration information

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the science run with the ACIS-S array, including a dump of the complete configuration information

5.5



Turn the LED on

3.3.7



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the science run with the ACIS-I array, including a dump of the complete configuration information

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the science run with the ACIS-S array, including a dump of the complete configuration information

5.5



Turn off the LED

3.3.7



Power off the video boards and FEPs, if necessary

3.3.2, 3.3.3




SOP_61052
Measure the dark current from each CCD


Start a DEA HKP run if necessary

3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the 9.9 and 3.3 s bias computations with the imaging array include the full configuration dumps

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the 9.9 and 3.3 s bias computations with the spectroscopy array include the full configuration dumps

5.5



Power down the video boards and FEPs and return to thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3



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

3.1.3.3, 3.4.6.1



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



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

5.5


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

5.4.11



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




SOP_61074
Event Histogram on Intl Cal Source, ACIS-I in Fmt 1


Warm boot and start DEA housekeeping if necessary

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



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

5.4


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

5.4.11



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




SAP_61049
Calibrate CCDs using internal cal source


Warm boot and start DEA housekeeping if necessary

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data, (no ASCA Grade-7, no event amplitude cutoff)

3.3.2, 3.3.3



Execute the faint mode science run

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the faint mode science run, (no ASCA Grade-7, no event amplitude cutoff)

5.5



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



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)

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the graded mode science run (no Grade 255, no event amplitude cutoff, employs a window to only telemeter events from S2 and S3)

5.5



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




SAP_61079
Raw Mode Data for Bias Algorithm Optimization


Start a DEA HKP run if necessary

3.4.6.1



Configure the instrument to collect imaging array data with 6 video boards up

3.3.2, 3.3.3



Execute the science run, collect 26 or more raw frames each from CCDs S2 and S3, including a dump of all the configuration information

5.4



Reconfigure back to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




SAP_61049
Repeat Internal Calibration Source Procedure



SAP_61077
Test the continuous clocking 3x3 mode


Warm boot and start DEA housekeeping if necessary

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the continuous clocking 3x3 mode science run

5.6



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the continuous clocking 3x3 mode science run

5.6



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




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

3.1.1, 3.1.2



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

3.3.2, 3.3.3, 5.4



Power off all boards and check power, power off DPA A

3.1.1



Power on DPA Side B, select BEP B and boot, check power levels

3.1.2



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

3.3.2, 3.3.3, 5.5



Power off all boards and FEPs

3.3.2, 3.3.3



Switch back to BEP A in charge

3.1.2




SOP_61008
DEA/FEP MUX Verification


Power on the 6 FEPs and the 6 DEA video boards used for imaging

3.3.2, 3.3.3



Run a suite of science runs, varying the expected overclock levels in each run

5.4



Power off the imaging video boards and power on those used for spectroscopy

3.3.2, 3.3.3



Run a new suite of science runs, varying the expected overclock levels for each

5.5




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

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the faint mode science run (no ASCA Grade-7, no event amplitude cutoff )

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the faint mode science run (no ASCA Grade-7, no event amplitude cutoff )

5.5



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the faint mode science run (no Grade 255, event amplitude cutoff at 3750 ADU, window out I1 and I2)

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the faint mode science run (no Grade 255, event amplitude cutoff at 3750 ADU, window out S4 and S5)

5.5



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




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

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the continuous clocking 3x3 mode science run

5.6



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the continuous clocking 3x3 mode science run

5.6



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3




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

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the science run with the ACIS-I array, including a dump of the complete configuration information

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the science run with the ACIS-S array, including a dump of the complete configuration information

5.5



Repeat previous 4 steps, twice



Return to the thermal standby state – all FEPs and video boards powered down

3.3.2, 3.3.3




SAP_61084
Unfiltered CCD Orbital Background Measurement


Warm boot and start DEA HKP if necessary

3.1.3.3, 3.4.6.1



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the science run with the ACIS-I array, including a dump of the complete configuration information

5.4



Return to the thermal standby state – all FEPs and video boards powered down

3.3.2, 3.3.3




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

3.1.3.3, 3.4.6.1



Set the focal plane temperature to -109.2 C

3.3.6



Configure the instrument to collect imaging array data

3.3.2, 3.3.3



Execute the science run including a dump of the complete configuration information

5.4



Configure the instrument to collect spectroscopy array data

3.3.2, 3.3.3



Execute the science run including a dump of the complete configuration information

5.5



Return to the thermal standby state – all FEPs and video boards powered down – if necessary

3.3.2, 3.3.3





5.2 Instrument Restart after a Power-Off

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.

5.2.1 Normal - DPA-A and -B powered, BEP-A Selected

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.



Table 5.4: Normal Restart after Power Off




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.





5.2.2 Contingency/Test - DPA-A and -B powered, BEP-B Selected

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.



Table 5.5: Restart with BEP-B and 6 FEPs




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




...
Continue with Steps 3 through 14 of Table 5.4.





5.2.3 Contingency/Test - Only DPA-A powered

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.



Table 5.6: Run BEP-A and 3 FEPs with DPA-A Power




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

3.1.2



   Check Voltage, Current, and Thermal

1DPP0BVO, etc.

3.4.1



   Check BEP Startup Message

bepStartupMessage

3.4.2




...
Continue with Steps 3 through 14 of Table 5.4.





5.2.4 Contingency/Test - Only DPA-B powered

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.



Table 5.7: Run BEP-B and 3 FEPs with DPA-B Power




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




...
Continue with Steps 3 through 14 of Table 5.4.





5.3 Warm Instrument Re-start

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:



Table 5.8: Warm Restart




Step
Task
Command/Telemetry
Refs




1

Ensure desired DPA side is powered




   Check DPA voltages and currents

1DPP0AVO, 1DPP0BVO, etc.

Table 3.2




2

Ensure desired DEA side is powered




   Check DEA voltages and currents

1DEP0AVO, 1DEP0BVO, etc.

3.3.3




...
Continue with Steps 5 through 14 of Table 5.4.





5.4 Timed Exposure Science Run with Imaging CCDs

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.



Table 5.9: Maximum Downlinked Event Rates






Run
Mode
Pixels
Bits per Event
Max Events per Second
Example






Timed
Exposure
Faint 3x3 128 170-177 § 5.5





Very Faint 5x5 320 68-70 § 5.4





Faint with Bias 3x3 236 91-96





Graded 3x3  58 375-391






Continuous
Clocking
Faint 1x3  55 368-407





Graded 1x3  34 638-666





Faint 3x3 128 158-175





Graded 3x3  58 375-391 § 5.6







5.4.1 Parameter Block Setup

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.

5.4.1.1 Parameter Block Id

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.

5.4.1.2 CCD Selection

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
 
 

5.4.1.3 Mode Selection

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

5.4.1.4 Clocking Parameters

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
 
 

5.4.1.5 Video ADC Offsets

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.



Table 5.10: Default Video Offsets







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












5.4.1.6 Bias Parameters

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
 
 

biasArg








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
















5.4.1.7 Event Selection Parameters

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 #
 
 

5.4.2 Initial Instrument State

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).

5.4.3 Switch Video Board Power

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.

5.4.4 Load Parameter Block

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.

5.4.5 Start 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

5.4.6 Setup Time

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

5.4.7 Bias Calculation

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

5.4.8 Bias Telemetry

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.

5.4.9 Data Processing

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.

5.4.10 Output Event Data

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.

5.4.11 Stop Run

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

5.4.12 Draining Telemetry

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.

5.4.13 Run Complete

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)
}

5.5 Timed Exposure Science Run with a Sub-Array

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.

5.5.1 Parameter Block Setup

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.

5.5.1.1 Parameter Block Id

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.

5.5.1.2 CCD Selection

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
 
 

5.5.1.3 Mode Selection

As in Section 5.4.1.3, but using Faint 3x3 mode:

 fepMode = 2 # FEP_TE_MODE_EV3x3
 bepPackingMode = 0 # BEP_TE_MODE_FAINT

5.5.1.4 Clocking Parameters

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
 
 

5.5.1.5 Video ADC Offsets

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












5.5.1.6 Bias Parameters

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
 
 

biasArg









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


















5.5.1.7 Event Selection Parameters

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
 
 

5.5.2 Execution

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
  }
}

5.5.3 Load Parameter Block

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
}

5.5.4 Start 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.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.

5.5.5 Output Event Data

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.

5.5.6 Stop Run

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

5.5.7 Run Complete

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)
}

5.6 Continuous Clocking Science Run with Spectroscopy CCDs

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.

5.6.1 Parameter Block Setup

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.

5.6.1.1 Parameter Block Id

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.

5.6.1.2 CCD Selection

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
 
 

5.6.1.3 Mode Selection

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

5.6.1.4 Clocking Parameters

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
 
 

5.6.1.5 Video ADC Offsets

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












5.6.1.6 Bias Parameters

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






5.6.1.7 Event Selection Parameters

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 #
 
 

5.6.2 Initial Instrument State

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).

5.6.3 Switch Video Board Power

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.

5.6.4 Load Parameter Block

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.

5.6.5 Start 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

5.6.6 Setup Time

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

5.6.7 Bias Calculation

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 meanor fractilecomputation
= ~159 seconds

5.6.8 Bias Telemetry

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
}

5.6.9 Data Processing

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.

5.6.10 Output Data Packets

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.

5.6.11 Stop Run

Once the desired observation time has elapsed, the user stops the run by issuing a “Stop Science” command:

 stop n science

5.6.12 Draining Telemetry

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.

5.6.13 Run Complete

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
}

5.7 Instrument Calibration

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).

5.7.1 Raw Mode

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.

5.7.2 Raw Histogram Mode

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
}

5.7.3 Event Histogram Mode

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.

5.8 Focal-Plane Bake-Out

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.

5.8.1 Preparation for Bake-Out

5.8.2 Heating the Focal Plane

5.8.3 Heating the Detector Housing

5.8.4 Cooling the Detector Housing

5.8.5 Disabling Bake-Out

5.9 Scatter Load from Uplink

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.

5.9.1 Example: Dumping Memory to Telemetry

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.

#define VAL(x) *(volatile unsigned *)(x) 
 
#define DTC_START     0xa0180018      /* DTC start register address */ 
#define DTC_END       0xa018001c      /* DTC end register address */ 
#define INTR_DISABLE  0x10000015      /* DTC interrupts off */ 
#define CNTL_DNLKENB  (1 << 1)        /* DTC enable in control reg */ 
#define PULS_DNLKCLR  (1 << 1)        /* DTC interrupt clear in pulse reg */ 
 
struct { 
    unsigned synch;                   /* packet synch code */ 
    unsigned hdr;                     /* packet header */ 
    unsigned data[1021];              /* data packet */ 
} pkt; 
 
unsigned dwords;                      /* data length (excluding header) */ 
unsigned ptype;                       /* packet type */ 
unsigned pseqno;                      /* packet sequence number */ 
unsigned mask = INTR_DISABLE;         /* control register interrupt mask */ 
 
/* initialize pkt.data, dwords, ptype, and pseqno */ 
 
/* turn off interrupts and clear the DMA */ 
asm volatile ("mtc0 %0,$12" : : "d" (mask)); 
VAL(BEP_CTRL_REG) &= ~INTR_DISABLE; 
 
/* fill the packet header */ 
pkt.synch = 0x736f4166;               /* synch word */ 
pkt.hdr = ((dwords+2) & 0x3ff) |      /* packet length in words 3..1023 */ 
          ((ptype & 0x3f) << 10) |    /* packet type 0..63 */ 
          ((pseqno & 0xffff) << 16);  /* packet sequence number 0..65535 */ 
 
/* start the DMA transfer */ 
VAL(DTC_START) = (unsigned)&pkt;      /* address of first word in packet */ 
VAL(DTC_END) = &pkt.data[dwords-1];   /* address of last word in packet */ 
VAL(BEP_CTRL_REG) |= CNTL_DNLKENB; 
 
/* wait for transfer to complete */ 
while(VAL(BEP_CTRL_REG) & CNTL_DNLKENB) { 
    VAL(WATCHDOG) = 0xffffffff; 
    /* do something else while waiting */ 
    bide(); 
} 
 
/* clear the DTC interrupt */ 
VAL(BEP_PULS_REG) = PULS_DNLKCLR;

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)

5.9.2 Example: Patching a Bad I-cache Memory Location

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.

Section 6
Software Tools

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.

6.1 Command Tools

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.

6.1.1 Uplink Command Verification

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.

6.1.2 Patch Load Validation

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

6.1.3 Patch Development

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.

6.2 Telemetry Tools

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.

6.2.1 Telemetry at the OCC

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

1.
The user runs a TCP server application to which a COG client connects and writes the 1029-byte minor frames in a continuous stream. Only “good” frames are written, and the transmission to the user is error-free. ACIS EGSE uses the tlmGet program within acisCtl to accept the COG connections and write, and optionally log, the data.
2.
The telemetry from the DSN is packaged into EHS blocks, 1 to 4 SFDUs per block, a header is added to indicate data quality, and the result is sent to pre-assigned UDP ports by a COG server. ACIS EGSE reads UDP packets with the getnrt and ehs2mnf scripts, using the header flags to reject bad minor frames.

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”.

6.2.2 Telemetry from the Simulators

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.

6.2.3 psci Output Formats

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:

#define  ND      3              /* dimension of data array */ 
typedef  struct  RvRec { 
  unsigned short expnum;        /* exposure number */ 
  unsigned short exposure;      /* static exposure time (msec) */ 
  unsigned int   irigtime;      /* timestamp (seconds of year) */ 
  unsigned short nodenum;       /* output node index (0-3) */ 
  unsigned short col;           /* column index (0-1023) */ 
  unsigned short row;           /* row index (0-1023) */ 
  short          data[ND][ND];  /* event data values */ 
  short          doclk;         /* delta overclock */ 
};

The binary ERV5 files consist of fixed length 68-byte records in the same format, but with:

#define  ND      5              /* dimension of data array */

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.



Table 6.1: Psci Output File Names




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)


tablepsci FITS File Headers
Table 6.2: psci FITS File Headers




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 





¡div class=”appendices”¿

Appendix A
BEP Commands and Status Flags

A.1 BEP Status Flags

The ACIS DPA consists of 8 boards powered by two +5V lines from the PSMC:

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.



Table A.1: BEP Status Flags






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.

A.2 Scenarios

A.2.1 Switching from BEP-A to BEP-B

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.

A.2.2 Switching back from BEP-B to BEP-A

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

A.2.3 Recovering from an anomalous DPA-A power down

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.

A.2.4 Running both BEPs Simultaneously

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.

Appendix B
IP&CL References

This section summarizes some definitions of ACIS commands and telemetry structures. For details, consult the documentation listed in Table 1.

B.1 Software Structures

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.


class="cmti-10">bcmd commands that access them
Table B.1: ACIS memory structures and the bcmd commands that access them



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 {...}





B.2 Hardware Commands

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.



Table B.2: DPA Hardware Commands



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.



Table B.3: PSMC Power and Heater Commands



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.



Table B.4: PSMC Mechanism Commands
20!//



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]




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]





B.3 Engineering Telemetry

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.



Table B.5: ACIS-related Engineering Telemetry



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.



Table B.6: SIM-Related Engineering Telemetry


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:



Table B.7: Engineering Telemetry Conversions






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Ω

IF (DN < 10) ; THEN EU = "Short" 
ELSE IF (DN > 245) ; THEN EU = "Open" 
ELSE 
   aa = (DN*20*5.23e3)/(5.23e3-20*DN) 
   qq = log(aa) 
   EU = 1/(1.074e-7*qq3+2.372e-4*qq+1.4733e-3)-273.16 
END IF

Discrete

IF (DN > 224) THEN EU = "Cold" 
ELSE IF (DN < 32) THEN EU = "Hot" 
ELSE EU = "OK" 
END IF

ISIM Thermistor

IF (DN < 10) THEN EU = "Short" 
ELSE IF (DN > 224) THEN EU = "Open" 
ELSE 
   aa = (DN*20*4.46e3)/(4.46e3-20*DN) 
   qq = log(aa) 
   EU = 1/(1.074e-7*qq3+2.372e-4*qq+1.4733e-3)-275.16 
END IF

Linear volts, current, temperature, or pressure

IF (DN > 253) THEN EU = "+Error" 
ELSE EU = DN * a + b 
END IF

PSMC Thermistor

IF (DN < 10) THEN EU = "--" 
ELSE IF (DN > 176) THEN EU = "Cold" 
ELSE 
   aa = (5050*DN)/(6175-DN) 
   qq = log((152*aa)/(152-aa)) 
   EU = 1/(1.074e-7*qq3+2.372e-4*qq+1.4733e-3)-273.16+15.0 
END IF

RTD at 2KΩ nominal

IF (DN < 10) THEN EU = "Short" 
ELSE IF (DN > 150) THEN EU = "Open" 
ELSE 
   EU = -DN3*3.181e-6+DN2*2.009e-3+DN*2.218-238.67 
END IF

Finally, Table B.8 lists the 1-bit serial digital channels that report the status of the PSMC and the DPA software and hardware.



Table B.8: ACIS 1-Bit PSMC and DPA Verifiers



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





B.4 Internal DEA Error Codes

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:



Table B.9: Internal DEA Manager Error Codes



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





Appendix C
ACIS Configuration Table

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.



Table C.1: ACIS Configuration Table
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
  }
}


Appendix D
ACIS EGSE Commands

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.



Table D.1: EGSE Commands


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




Appendix E
ACIS Power Table

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):



Table E.1: ACIS Power Table
Additional power of remaining 4 video boards are powered (idle)
Focal Plane Heater Operating at Nominal Cold (-120C)
FP Heater Bake-Out (30C)
Detector Housing Heater Operating at nominal cold case (-60C)
Detector Housing Heater Bake-Out (25C)
Totals:
Normal, clocking ACIS
2 CCD Calibration
Standby while maintaining thermal control
Memory Save Mode (no thermal control)
Bake-Out slewing to temperature
Bake-Out at stable temperature (approx.)
All ACIS On (not useful, but possible)





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:



Table E.2: Total ACIS Current Draw



Voltage
Current (nominal)
Current (max)



30VDC 4.8A 9.2A



22VDC 6.6A 12.5A




Note that 10.8A is the maximum one could draw from one service, A or B.

Appendix F
Active Patch List

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.



Table F.1: Patches Available for Level GHI Loads
Standard Release G
Optional Release H
Under Development
Engineering Unit Utility Patches







ID
Patch Name
Rev
Bytes
Part Number
ECO
Problem Reports














i

corruptblock

A 16 36-58030.01 994

113








ii

digestbiaserror

A 64 36-58030.02 995

116








iii

histogramvar

A 16 36-58030.03 999

115








iv

rquad

A 16 36-58030.14 1000

121








v

histogrammean

A 156 36-58030.15 996

123








vi

zap1expo

A 64 36-58030.16 997

122








vii

condoclk

A 640 36-58030.17 1012

127








viii

fepbiasparity2

A 504 36-58030.19 1015

130








ix

cornermean

A 32 36-58030.21 1017

128








x

tlmbusy

A 344 36-58030.29 1033

138








xi

buscrash

B 440 36-58030.30 1051

140, 151








xii

badpix

A 60 36-58030.31 1037

141








xiii

buscrash2

C 1576 36-58030.32 1047

148, 150















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

120, 124, 126








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

134








7

reportgrade1

A 816 36-58030.22 1021

131, 132








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

133















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.



Table F.2: Flight Unit Patch History








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.



Table F.3: Patching Procedures



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





Appendix G
Jitter DAC Details

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)






Appendix H
Video Board PRAM

H.1 Introduction to PRAM

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.



Figure H.1: Graphical CCD Representation
PIC


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:

In the following examples, the instructions are written in the form of subroutine calls:

  pram(CCD_Action, FEP_Action, Repeat_Count)

H.2 CCD Actions

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.

H.3 FEP Actions

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

H.4 A Simple Example

The simplest timed exposure PRAM would contain the following:

  repeat forever 
    pram(Parallel_Full, IDLE, 1026)     # move all charges down 1026 rows 
    pram(Serial_Readout, VSYNC, 1)      # tell the FEP it’s a new exposure 
    repeat 1026 times 
      pram(Parallel_Frame, IDLE, 1)     # move frame charges down 1 row 
      pram(Serial_Readout, IDLE, 4)     # flush the 4 dummy pixels 
      pram(Serial_Readout, DATA, 256)   # read the data from each quadrant 
      pram(Serial_Readout, HSYNC, 1)    # tell the FEP the row has ended 
    end repeat 
  end repeat

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:

a)
An exposure time of 2.71891 seconds is unwieldy, so an extra n repetitions of PRAM(Serial_-Readout, IDLE, 1) are added at the beginning or end of the repeat forever cycle to bring the static time up to an exact multiple of 0.1 seconds.
b)
The FEP needs to correct for amplifier drift as the video boards warm up. It is therefore customary to take a number of “overclock” measurements (OCLKs) after each data row, prior to the HSYNC marking the end of the row.
c)
The bottom two rows of the Image Array are partially covered by the Frame Store shielding and useless for x-ray detection. When the Parallel_Full shifts have completed, any residual charge in the Framestore will have accumulated in the bottom rows of the Frame Store and in the Output Registers and must be flushed out.
d)
If more than one CCD is being clocked, their multi-row parallel instructions must not occur simultaneously or else they will drain too much current from the power supply circuitry. The CCD’s 41.04 msec parallel periods must therefore be staggered.
e)
If sub-array readout is desired, e.g., to reduce static exposure times, additional Parallel_Frame instructions must be added to flush charge out of the rows that precede the sub-arrays. If multiple CCDs are being clocked, these extra instructions must also be staggered.

H.5 A Realistic Timed Exposure Example

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:

  #---- PRAM for first CCD ----           #---- PRAM for second CCD ---- 
  repeat forever                          repeat forever 
    pram(Serial_Readout, IDLE, 3520)        pram(Serial_Readout, IDLE, 7624) 
    pram(Parallel_Full, IDLE, 1026)         pram(Parallel_Full, IDLE, 1026) 
    pram(Serial_Readout, IDLE, 5004)        pram(Serial_Readout, IDLE, 8) 
    pram(Parallel_Frame, IDLE, 2)           pram(Parallel_Frame, IDLE, 2) 
    pram(Serial_Readout, IDLE, 528)         pram(Serial_Readout, IDLE, 520) 
    pram(Parallel_Frame, IDLE, 1)         # Remainder identical to first CCD 
    pram(Serial_Readout, VSYNC, 1)          . 
    pram(Serial_Readout, IDLE, 3)           . 
    pram(Serial_Readout, DATA, 256)         . 
    pram(Serial_Readout, IDLE, 4)           . 
    pram(Serial_Readout, OCLK, 16)          . 
    pram(Serial_Readout, HSYNC, 1)          . 
    repeat 1023 times                       . 
      pram(Parallel_Frame, IDLE, 1)         . 
      pram(Serial_Readout, IDLE, 4)         . 
      pram(Serial_Readout, DATA, 256)       . 
      pram(Serial_Readout, IDLE, 4)         . 
      pram(Serial_Readout, OCLK, 16)        . 
      pram(Serial_Readout, HSYNC, 1)        . 
    end repeat                              . 
  end repeat                              end repeat

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.

H.6 Sub-Array Readout

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).

  #---- PRAM for first CCD ----            #---- PRAM for second CCD ---- 
  repeat forever                           repeat forever 
    pram(Serial_Readout, IDLE, 7975)         pram(Serial_Readout, IDLE, 12079) 
    pram(Parallel_Full, IDLE, 1026)          pram(Parallel_Full, IDLE, 1026) 
    pram(Serial_Readout, IDLE, 5004)         pram(Serial_Readout, IDLE, 808) 
    pram(Parallel_Frame, IDLE, 202)          pram(Parallel_Frame, IDLE, 202) 
    pram(Serial_Readout, IDLE, 1328)         pram(Serial_Readout, IDLE, 520) 
    pram(Parallel_Frame, IDLE, 1)          # Remainder identical to first CCD 
    pram(Serial_Readout, VSYNC, 1)           . 
    pram(Serial_Readout, IDLE, 3)            . 
    pram(Serial_Readout, DATA, 256)          . 
    pram(Serial_Readout, IDLE, 4)            . 
    pram(Serial_Readout, OCLK, 16)           . 
    pram(Serial_Readout, HSYNC, 1)           . 
    repeat 299 times                         . 
      pram(Parallel_Frame, IDLE, 1)          . 
      pram(Serial_Readout, IDLE, 4)          . 
      pram(Serial_Readout, DATA, 256)        . 
      pram(Serial_Readout, IDLE, 4)          . 
      pram(Serial_Readout, OCLK, 16)         . 
      pram(Serial_Readout, HSYNC, 1)         . 
    end repeat                               . 
  end repeat                               end repeat

H.7 Pre-Flushing for Shorter Exposure Times

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

  pram(Parallel_Full, IDLE, 1026)

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.

H.8 Continuous Clocking

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:

  repeat forever 
    pram(Parallel_Continuous, IDLE, 1)       # move all charges down 1 row 
    pram(Serial_Readout, VSYNC, 1)           # tell the FEP it’s a new frame 
    pram(Serial_Readout, IDLE, 3)            # flush the dummy pixels 
    pram(Serial_Readout, DATA, 256)          # read the data from each quadrant 
    pram(Serial_Readout, IDLE, 4)            # flush 4 extra pixels 
    pram(Serial_Readout, OCLK, 16)           # read the calibration overclocks 
    pram(Serial_Readout, HSYNC, 1)           # tell the FEP the row has ended 
    repeat 511 times 
      pram(Parallel_Continuous, IDLE, 1)     . 
      pram(Serial_Readout, IDLE, 4)          . 
      pram(Serial_Readout, DATA, 256)        . 
      pram(Serial_Readout, IDLE, 4)          . 
      pram(Serial_Readout, OCLK, 16)         . 
      pram(Serial_Readout, HSYNC, 1)         . 
    end repeat 
  end repeat

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.

H.9 More Subtleties

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:

0.
The normal data-taking mode: the BEP will use Serial_Readout commands. Columns 0–255 will be sent to Output Node A, columns 511–256 (in that order) to Node B, columns 512–767 to Node C, and columns 1023–768 to Node D.
1.
The BEP will use Serial_Reverse commands. No charge will make it to any of the Output Nodes, making this ideal for monitoring the sequencers and video amplifiers.
2.
The BEP will deassert the video board’s CLOCK_SWAP flag and use Serial_Readout instructions. Columns 0–511 will be moved to Output Node A and columns 512–1023 to Node C. No charge will be moved to Nodes B or D.
3.
The BEP will deassert the video board’s CLOCK_SWAP flag and use Serial_Reverse instructions. Columns 511–0 will be moved to Output node B and columns 1023–512 to Node D. No charge will be moved to Nodes A or C.

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.

H.10 Working with PRAM

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.

Appendix I
Default Parameter Blocks

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.



Table I.1: Default Parameter Blocks in EEPROM

* The intention had been to exclude all but the S3 aimpoint region, but this parameter block accepts all columns of S3.

I.1 Default Timed Exposure Blocks

The following table compares the values of the individual fields in each of the 5 default timed exposure parameter blocks.



Table I.2: 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

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

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

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

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

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

I.2 Default Continuous Clocking Blocks

The following table compares the values of the individual fields in each of the 5 default continuous clocking parameter blocks.



Table I.3: 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

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

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

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

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

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

I.3 Default 2-Dimensional Window Blocks

Default 2-Dimensional Window Slot #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

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

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

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

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
}

I.4 Default 1-Dimensional Window Blocks

Default 1-Dimensional Window Slot #0

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

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

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

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

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
}

I.5 Default DEA Housekeeping Blocks

Default DEA Housekeeping Slot #0

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

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

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

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

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
}

Appendix J
Event Grade Codes

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.

J.1 Timed Exposure Grade Codes

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’.


figure3x3 Grade Code Bit Assignment

Figure J.1: 3x3 Grade Code Bit Assignment

PIC


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.

J.2 Continuous Clocking Grade Codes (1x3 faint and graded modes)

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’.


figure1x3 Grade Code Bit Assignment

Figure J.2: 1x3 Grade Code Bit Assignment

PIC


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.

J.3 Continuous Clocking Grade Codes (3x3 faint and graded modes)

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.



Table J.1: The Grade Code array used by the cc3x3 patch
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


Appendix K
Window Filter Processing

K.1 Timed Exposure Event 2D Window Filtering

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).

  Compute the events ccdId, pha, grade, and x,y location 
  REJECT if pha is outside the pBlocks energy range 
  REJECT if grade isnt marked in the pblocks gradeselections} array 
  for each window (if any) in the wBlock 
    if the event comes from this CCD and lies within this windows region 
      REJECT if this windows sampleCycle is zero 
      REJECT if the events pha is outside this windows energy range 
      increment this windows event_counter 
      ACCEPT if (event_counter} - 1) modulo sampleCycle is zero 
      REJECT 
    end if 
  end for 
  ACCEPT

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,

1.
Reject all events from CCD I0 in the rectangular region from (row,col) = (10,0) through (511, 511); then accept every third event1 in the region from (490,256) through (1013,1023) whose pulse height lies between 200 and 1200; finally, accept all events in I0, regardless of pulse height, that lie outside those two regions.
2.
Accept all events from CCD S3 that lie within the rectangular region from (512,512) through (1023,1013), irrespective of pulse height; then reject all other S3 events.
3.
Accept all events from other CCDs.

Graphically, the windows listed above have the following approximate effect:

PIC

K.2 Timed Exposure Raw Pixel 2D Window Filtering

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:

PIC

K.3 Continuous Clocking Event 1D Window Filtering

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,

1.
Reject all events from CCD I0 in columns 0 through 511; then accept every third event in columns 256 through 1013 (actually 512 through 1013 because window[0] overrides window[1]) whose pulse height lies between 200 and 1200; finally, accept all events in I0, regardless of pulse height, that lie outside those columns (i.e., 1014 through 1023).
2.
Accept all events from CCD S3 that lie between columns 512 and 1013, irrespective of pulse height; then reject all other S3 events.
3.
Accept all events from other CCDs.
PIC

K.4 Continuous Clocking Raw Pixel 1D Window Filtering

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:

PIC

Appendix L
The eeprom_patch Program

The following source code “eeprom_patch.c” compiles into the boot-from-uplink program described in Section 5.9.2.

#include <filesboot/mips.h> 
#include <filesboot/bep.h> 
#include <filesboot/mongoose.h> 
 
/* Hardware addresses */ 
#define MMAP_DTCSTART   0xa0180018  /* DTC start register address */ 
#define MMAP_DTCEND     0xa018001c  /* DTC end register address */ 
#define EEPROM_START    0xbfc00000  /* Start of EEPROM */ 
#define EEPROM_END      0xbfd00000  /* 1st word after end of EEPROM */ 
#define _loadRom        0xbfc0b780  /* Start of EEPROM load */ 
#define _ftext          0x80080400  /* Start of initialized I-cache */ 
#define _etext          0x800c0970  /* End of initialized I-cache */ 
#define _fdata          0x80000000  /* Start of initialized D-cache */ 
#define _edata          0x80020b70  /* End of initialized D-cache */ 
#define __start         0x80080400  /* System starting address */ 
#define PACKET_ADDR     0xa0004000  /* Packet buffer address */ 
#define PATCH_TABLE     0xa0003000  /* Patch table address */ 
#define TIMER_ADDR      0x800bc870  /* Nucleus RTX timer routine */ 
 
/* Interrupt masks and register bits */ 
#define INTR_DISABLE    0x10000015  /* DTC interrupts off */ 
#define CNTL_DNLKENB    (1 << 1)    /* DTC enable in control reg */ 
#define STAT_DNLKINTR   (1 << 5)    /* DTC interrupt in status reg */ 
#define PULS_DNLKCLR    (1 << 1)    /* DTC interrupt clear in pulse reg */ 
 
#define VAL(x)          *(volatile unsigned *)(x) 
 
#define ADDR(x)         (unsigned *)(x) 
 
#define WRITE_ICACHE(a,v) {\ 
                          VAL(ICACHE_DATA_REG) = (unsigned)(v);\ 
                          asm volatile ("" : :);\ 
                          VAL(ICACHE_ADDR_REG) = ((unsigned)(a)\ 
                            & ADDR_BOUND_MASK) | ICACHEADDR_W;\ 
                        } 
 
#define wait(n)         { volatile int ii = (n);\ 
                          VAL(WATCHDOG) = 0xffffffff; \ 
                          while (--ii >= 0);\ 
                        } 
 
typedef struct { 
    unsigned p_sync;                /* packet synch word */ 
    unsigned p_hdr;                 /* type, length, and seqno */ 
    unsigned p_cmdid;               /* id of execBep command */ 
    unsigned p_ticks;               /* BEP interrupt counter */ 
    unsigned *p_origin;             /* block starting address */ 
    unsigned p_count;               /* block length in words */ 
    unsigned *p_addr;               /* packet starting address */ 
    unsigned p_data[1016];          /* packet data content */ 
} PKT; 
 
void eeprom_patch(void) 
{ 
    const unsigned *from = ADDR(_loadRom); 
    const unsigned *dat = ADDR(PATCH_TABLE); 
    unsigned npatch; 
 
    /* Copy to iCache */ 
    unsigned *to = ADDR(_ftext); 
    while (to < ADDR(_etext)) { 
        WRITE_ICACHE(to++, *from++); 
    } 
 
    /* Copy to dCache */ 
    to = ADDR(_fdata); 
    while (to < ADDR(_edata)) { 
        *to++ = *from++; 
    } 
 
    /* Apply patches */ 
    for (npatch = *dat++; npatch--; dat += 2) { 
        if (*dat < I_CACHE_LO || *dat > I_CACHE_HI) { 
            VAL(*dat) = dat[1]; 
        } else { 
            WRITE_ICACHE(*dat, dat[1]) 
        } 
    } 
 
    /* Jump to __start to initialize RTX */ 
    to = ADDR(__start); 
    asm volatile ("jr %0" : : "d" (to)); 
}

The program is compiled and converted to bcmd format as follows:

acis-gcc -g -O3 -I. -I$$(ACISFS)/flightbld/flight1.5 -mno-gpopt -G 0 
    -c -Wa,"-alh" eeprom_patch.c -o eeprom_patch.o |\ 
make-uplink-bcmd.pl -u 0xa0000000 > eeprom_patch.bcmd

Appendix M
Glossary

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

¡/div¿