The following describes the data storage and record format of CompactFLASH memory cards used in ASIMET instrumentation with Ver4.xx and later firmware.
The CFLASH data file (yourname.DAT) consumes most of the CompactFLASH card. Each record is 256 bytes long, and aligned with the start or middle of a CompactFLASH sector. Records contain the date and time written, 60 minutes of IEEE single-precision barometric pressure data, a flag which is set to 0xA5A5 when the record is written, and a 2 byte CRC of the previous 254 bytes. The actual C language struct is reproduced here to show the format of the stored image.
/* this is the BPR data record structure, 256 bytes */ struct BPR_record { struct time_type time1; /* 8 bytes of time */ float bpr_cal[60]; /* 60 minutes of BP data in millibars */ unsigned char unused[4]; unsigned short used; /* set to 0xA5A5 upon record write */ unsigned short bpr_CRC; /* CRC of previous 254 bytes */ };struct time_type { unsigned char hour; unsigned char min; unsigned char sec; unsigned char day; unsigned char dow; /* day of week - NOT USED */ unsigned char mon; unsigned short int year; };
Note that time structure is NOT ANSI-compatible.
The offsets and sizes of the record components is shown below. Remember that the first BPR record is stored at Sector 322 in the CompactFLASH card.
byte # size name comment 0 8 time 8 bytes of time 8 4 bpr_cal[0] minute 0 BPR data 12 4 bpr_cal[1] minute 1 BPR data . . . 240 4 bpr_cal[58] minute 58 BPR data 244 4 bpr_cal[59] minute 59 BPR data 248 4 reserved 252 2 used flag set to A5A5h when record is written 254 2 bpr_CRC CRC of previous 254 bytes
Data is written to the FLASH card immediately following the acquisition of data at the rollover to the 59th minute of each hour. This is reflected in the time stamp on each record, typically 1 second into minute 59.
The byte order of the some numeric values stored by the VOSBPR53 firmware is reversed relative to Intel-based PC's. That is, a long integer (4 bytes) or short integer (2 bytes) stored by a PC will be LS byte first in memory, and floats with mantissa first. The VOSBPR53 firmware stores shorts and longs with MS byte first in memory. Also, single precision IEEE float values are big-endian. This must be accounted for when processing the data. See the float storage format below.
The "used" flag value is used to simplify finding the end of valid records the .DAT file; as each record is written, the "used" flag is set to A5A5h to provide a distinct pattern to search on for good records.
The CRC is NOT IMPLEMENTED.
The EEPROM image area contains miscellaneous text information about the VOS module, as well as any calibration constants required by the module.
The BPR module uses the first 2 terms of cal constant set 0), i.e. calset[0][0] is the offset term A1, and calset[0][1] is the gain value B1. The cal equation used is:
y = A1 + (B1 * x)
"float" 4 byte values are IEEE-754 single-precision float.
Storage format for these float values is as follows:
byte addr +0 +1 +2 +3 contents SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM where S => Sign bit; 1 = negative, 0 = positive E => Exponent (2's comp) with offset 127 (decimal) M => 23-bit normal mantissa (highest bit always 1 and therefore not stored)