//--------------------------------------------------------------------------- #ifndef ECalUnitH #define ECalUnitH //--------------------------------------------------------------------------- #include #include //--------------------------------------------------------------------------- typedef enum { SC6000 = 0, SC8000 = 1, SC4000 = 2, SC2520 = 3, SC8401 = 4, SC8402 = 5, SC25091 = 6, SC25092 = 7, SC4509 = 8 } eDeviceId_t___OBSOLETE; // replaced with "eNFMModel_t" //--------------------------------------------------------------------------- #pragma pack(push, 1) struct TEcalHeader { uint8_t Reserved1[64]; uint8_t SN[8]; // ASCII (without PSN) uint16_t DeviceID; // see eDeviceId_t uint8_t Reserved2[48]; }; struct TEcalHeaderCRC { struct TEcalHeader Hdr; uint32_t CRCValue; }; #pragma pack(pop) //--------------------------------------------------------------------------- #pragma pack(push, 1) struct TEcalSegment // �����. ��������� ��� ��������� { int16_t Points; double Fstart_unaligned; double Fstop_unaligned; }; // 18 bytes #pragma pack(pop) //--------------------------------------------------------------------------- #define SWEEP_VERSION_LINEAR 1 #define SWEEP_VERSION_SEGMENT 2 //--------------------------------------------------------------------------- #pragma pack(push, 1) struct TEcalDataHeader // TEcalDataHeader: ��������� �������������� { uint8_t CalDate[12]; // ���� ���������� uint8_t CalTime[10]; // ����� ���������� uint8_t Location[20]; // ����� ���������� uint8_t Operator[20]; // �������� uint8_t Analyzer[20]; // Obzor-804 double Fmin_unaligned; // ��������� ��� Lin sweep, double Fmax_unaligned; // ������ = 1 int32_t Points; double Temperature_unaligned; int16_t ConnectorA; // Connector type int16_t ConnectorB; // Connector type int16_t ConnectorC; // Connector type int16_t ConnectorD; // Connector type uint8_t AdapterDescriptionA[20]; // Adapter description uint8_t AdapterDescriptionB[20]; // Adapter description uint8_t AdapterDescriptionC[20]; // Adapter description uint8_t AdapterDescriptionD[20]; // Adapter description int16_t Version; // ������ 1 - Lin Sweep, 2 - Segm Sweep int16_t NSegm; // ����� ��������� struct TEcalSegment Segm[5]; // ���� �������� uint8_t Reserved[6]; }; // 298 bytes struct TEcalDataHeaderCRC { struct TEcalDataHeader Hdr; uint32_t CRCValue; }; #pragma pack(pop) //--------------------------------------------------------------------------- #pragma pack(push, 1) struct TEcalTableHeader { // ��������� ������� �������������� int16_t MinMagn; // ���. ���������, �������� 0.01 �� (�� -327.67 �� +327.68 ��) int16_t MaxMagn; // ����. ���������, �������� 0.01 �� (�� -327.67 �� +327.68 ��) }; // ������� �������������� struct TEcalPoint24 { // 24 ��������� ������ uint16_t Magn; uint8_t Magn2; // 0.000004 dB (typical) uint16_t Angle; uint8_t Angle2; // Pi/16777215 unit [-PI, Pi] = 0.00002 degree }; #pragma pack(pop) #pragma pack(push, 1) struct TablePoint { uint8_t port1; // Device port1 switch state uint8_t port2; // Device port2 switch state }; #pragma pack(pop) //--------------------------------------------------------------------------- // ������ ������ ��������������: // Short : ���. ���������, �������� 0.01 �� (�� -327.67 �� +327.68 ��) == TEcalTableHeader // Short : ����. ���������, �������� 0.01 �� (�� -327.67 �� +327.68 ��) == TEcalTableHeader // 3 Bytes : ����� 1. ��������� � ��, ����� min � max, �������� (max - min)/16777215 ��. // 3 Bytes : ����� 1. ���� � ��������, �������� PI/0x7FFFFF = 0.00002 ����. // 3 Bytes : ����� 2. ���������... // 3 Bytes : ����� 2. ����... // ... // 3 Bytes : ����� N. ���������... // 3 Bytes : ����� N. ����... // 4 Bytes : CRC. // ------------------------------------------------------------------- // ������� ��������������. 14 ������ ��� SC6000, 18 ������ ��� SC8000 // ������� ���������� ������ � ������ ��� : // ShortA \ // ShortB | // OpenA | // OpenB | // LoadA \ Characterization Data // LoadB / 14 ������ // Thru11 | SC4000, SC6000, SC2509.2 // Thru21 | // Thru12 | // Thru22 | // Check11 | // Check21 | // Check12 | // Check22 | //-------------- // Load2A | // Load2B | +4 Load2, Open2 ��� SC8000, SC2509.1 // Open2A | +2 Open2 ��� SC2520.1 // Open2B / // ------------------------------------------------------------------- // ������� �������������� ��� SC8401, SC8402, 4509.1 - 60 ������. // ������� ���������� ������ � ������ ��� : // ShortA \ // OpenA | // LoadA | Port A // Load2A | // Open2A / // ... > Port B // ... > Port C // ... > Port D // Thru11 \ // Thru21 | // Thru12 | Thru AB 2x2 // Thru22 / // ... > Thru AC // ... > Thru AD // ... > Thru BC // ... > Thru BD // ... > Thru CD // Check11 \ // Check21 | // Check31 | Check 4x4 // Check41 | // ... | // Check44 / // ------------------------------------------------------------------- // M����� SC8401, SC8402, 4509.1, SC2520.1 �������� ��������� �� ����� ������������� ������. // SC8401 �� ����� Load2 � Open2. // SC8402, 4509.1 �� ����� Load2. // SC2520.1 �� ����� Load2. //------------------------------------------------------------------------------ // ����� ������ �������������� #define CHARACTERIZATION_STATE_SIZE(POINTS) (2 * sizeof(uint16_t) + 2 * POINTS * 3 + 4) // ����� ������� ������������� ������������� #define THERM_COMP_ADDR_SC8000 400000 #define THERM_COMP_ADDR_SC2543 800000 #define THERM_COMP_ADDR_SC8400 1500000 // ����� �������� ����� �������� (USBTMC/PLANAR) #define SETTINGS_ADDR_SC8000 1572856 #define SETTINGS_SIZE_SC8000 8 #define SETTINGS_ADDR_SC2543 1966016 #define SETTINGS_SIZE_SC2543 64 // ������������ ������� �������� // #define FACTORY_MAX_DATA_POINTS 3601 // #define MAX_THERMOCOMP_POINTS 1601 // #define USER_MAX_DATA_POINTS 1601 /* ������� ������� ������������� ������ // NFM6000, NFM8000, NFM4000 // Bank0: 0x000000 - 0x07FFFF ���������� ������ // Bank1: 0x100000 - 0x17FFFF ���������������� ������ // NFM8400, NFM4509 // Bank0: 0x000000 - 0x1FFFFF ���������� ������ // Bank1: 0x200000 - 0x3BFFFF ���������������� ������ // NFM2520 // Bank0: 0x000000 - 0x1EFFFF ���������� ������ // Bank1: 0x1F0000 - 0x3EFFFF ���������������� ������ // --------------------------------------------------------------------------------------------------------------- | | 6000 | 8000 | 4509 | 2520 | 2543 | | 4000 | 2509 | 8400 | | --------------------------------------------------------------------------------------------------------------- Bank0 | ��� | 0 | 0 | 0 | 0 | 0 ��������� | ����� | 128 | 128 | 128 | 128 | 128 --------------------------------------------------------------------------------------------------------------- ��������� | ���. | 128 | 128 | 128 | 128 | 128 �������������� | ����� | 302+14*(6*N+8) | 302+18*(6*N+8) | 302+60*(6*N+8) | 302+18*(6*N+8) | 302+18*(6*N+8) | N max | 4755 | 3698 | 4164 | 3698 | 7402 | ����� | 399962 | 399958 | 1499950 | 399958 | 799990 --------------------------------------------------------------------------------------------------------------- ���������������� | ���. | 400000 | 400000 | 1500000 | 400000 | 800000 | ����� | 80+14*2*(2*N+8)| 80+18*2*(2*N+8)| 80+60*2*(2*N+8)| 80+18*2*(2*N+8)| 80+18*2*(2*N+8) | N max | 1601 | 1601 | 1601 | 1601 | 1601 | ����� | 489960 | 515640 | 1885280 | 515640 | 915640 --------------------------------------------------------------------------------------------------------------- ������ Bank0 | 0x80000 | 0x80000 | 0x200000 | 0x1F0000 | 0xE0000 | 524288 | 524288 | 2097152 | 2031616 | 917504 --------------------------------------------------------------------------------------------------------------- Bank1 | 0x100000 | 0x100000 | 0x200000 | 0x1F0000 | 0xE0000 | 1048576 | 1048576 | 2097152 | 2031616 | 917504 ������ Bank1 | 0x80000 | 0x80000 | 0x1C0000 | 0x200000 | 0x100000 | 524288 | 524288 | 1835008 | 2097152 | 1048576 User Part | 174762 | 174762 | 611660 | 174762 | 349524 User Part x 3 | 524286 | 524286 | 1834980 | 524286 | 1048572 N max | 2075 | 1614 | 1696 | 1614 | 3232 --------------------------------------------------------------------------------------------------------------- */ //------------------------------------------------------------------------------ #pragma pack(push, 1) //--------------------------------------------------------------------------- struct TEcalTCompHeader // ��������� ���������������� { uint8_t CalDate[12]; // ���� ������ uint8_t CalTime[10]; // ����� ������ double Fmin_unaligned; double Fmax_unaligned; int32_t Points; int32_t Flags; // 1 - �������/����������� uint8_t FileName[20]; // ��� ����� ������ uint8_t Reserved[10]; }; // 76 ���� struct TEcalTCompHeaderCRC { struct TEcalTCompHeader Hdr; uint32_t CRCValue; }; // 80 ���� #pragma pack(pop) #pragma pack(push, 1) struct TableTHeader { uint8_t size; uint8_t blocks; uint8_t reserved[2]; }; struct TableTHeaderCRC { struct TableTHeader Hdr; uint32_t CRCValue; uint32_t table_crc; }; #pragma pack(pop) //--------------------------------------------------------------------------- // ����� ������ ���������������� #define THERM_COMP_STATE_SIZE(POINTS) (2 * (2 * sizeof(uint16_t) + sizeof(uint16_t) * POINTS + 4)) // 6420 //--------------------------------------------------------------------------- struct TEcalThermMagnHeader { // ��������� ������� ���������� ������������ (���������) int16_t MinMagn; // ���. �����������, �������� 0.01 ��/C (�� -327.67 �� +327.68 ��/C) int16_t MaxMagn; // ����. �����������, �������� 0.01 ��/C (�� -327.67 �� +327.68 ��/C) }; struct TEcalThermMagnPoint { // ����� ������� ���������� ������������� (���������) int16_t Magn; // �������� int16, ���������� �� �������� �������� (max/2+min/2) }; struct TEcalThermPhaseHeader { // ��������� ������� ���������� ������������ (����) int16_t MinPhase; // ���. �����������, �������� 0.01 ����/C (�� -327.67 �� +327.68 ����/C) int16_t MaxPhase; // ����. �����������, �������� 0.01 ����/C (�� -327.67 �� +327.68 ����/C) }; struct TEcalThermPhasePoint { // ����� ������� ���������� ������������� (����) int16_t Phase; // �������� int16, ���������� �� �������� �������� (max/2+min/2) }; // ������ ������ ���������� ������������ : // Short : ���. �����������, �������� 0.01 ��/C (�� -327.67 �� +327.68 ��/C) // Short : ����. �����������, �������� 0.01 ��/C (�� -327.67 �� +327.68 ��/C) // UShort : ����� 1. ����������� �-� � ��/C, ����� min � max, �������� (max - min)/65536 ��/C. // UShort : ����� 2. ����������� �-�... // ... // UShort : ����� N. ����������� �-�... // 4 Bytes : CRC. // Short : ���. �����������, �������� 0.01 ����/C (�� -327.67 �� +327.68 ����/C) // Short : ����. �����������, �������� 0.01 ����/C (�� -327.67 �� +327.68 ����/C) // UShort : ����� 1. ������� �-� � ����/C, ����� min � max, �������� (max - min)/65536 ����/C. // UShort : ����� 2. ������� �-�... // ... // UShort : ����� N. ������� �-�... // 4 Bytes : CRC. /* struct TEcalThermMagnTable_virtual { struct TEcalThermMagnHeader magnHeader; struct TEcalThermMagnPoint magnPoint[]; uint32_t crc32; }; */ /* struct TEcalThermPhaseTable_virtual { struct TEcalThermPhaseHeader phaseHeader; struct TEcalThermPhasePoint phasePoint[]; uint32_t crc32; }; */ // // ������� ���������� ������ ���������� ������������ � ������ ��� : // ������� ���� � ��� �� �������, ��� � ������� ��������������, � ������ // ����, ��� ������ ���������, �������� Short A, ������������ ����� // ������ �����������������. //--------------------------------------------------------------------------- // ������� ������� ������������� ������ // SC6000, SC8000, SC4000 // Bank0: 0x000000 - 0x07FFFF ���������� ������ // Bank1: 0x100000 - 0x17FFFF ���������������� ������ // SC840X // Bank0: 0x000000 - 0x1FFFFF ���������� ������ // Bank1: 0x200000 - 0x3BFFFF ���������������� ������ // SC2001 // Bank0: 0x000000 - 0x1EFFFF ���������� ������ // Bank1: 0x1F0000 - 0x3EFFFF ���������������� ������ // // ---------------------------------------------------------------------------------------------- // | | SC6000 | SC8000 | SC8401 | NFM 2520 // | | SC4000 | NFM 2509 | SC8402 | // ---------------------------------------------------------------------------------------------- // Bank0 | ��� | 0 | 0 | 0 | 0 // ��������� | ����� | 128 | 128 | 128 | 128 // ---------------------------------------------------------------------------------------------- // ��������� | ���. | 128 | 128 | 128 | 128 // �������������� | ����� | 302+14*(6*N+8) | 302+18*(6*N+8) | 302+60*(6*N+8) | 302+18*(6*N+8) // | ����* | 302898 | 389354 | 1297142 | 389354 // | ����� | 303026 | 389482 | 1297270 | 389482 // ---------------------------------------------------------------------------------------------- // ���������������� | ���. | 400000 | 400000 | 1500000 | 400000 // | ����� | 80+14*2*(2*N+8)| 80+18*2*(2*N+8)| 80+60*2*(2*N+8)| 80+18*2*(2*N+8) // | ����* | 89960 | 115640 | 385280 | 115640 // | ����� | 489960 | 515640 | 1885280 | 515640 // ---------------------------------------------------------------------------------------------- // ����� Bank0 | | 524287 | 524287 | 2097151 | 2031615 // ---------------------------------------------------------------------------------------------- // Bank1 | ���. | 1048576 | 1048576 | 2097152 | 2031616 // ���������������� | ����� | 302+14*(6*N+8) | 302+18*(6*N+8) | 302+60*(6*N+8) | 302+18*(6*N+8) // �������������� #1 | ����* | 134898 | 173354 | 577142 | 173354 // | ����� | 1183474 | 1221930 | 2674294 | 2204970 // ---------------------------------------------------------------------------------------------- // ���������������� | ���. | 1223338 | 1223338 | 2708812 | 2206378 // �������������� #2 | ����� | 1358236 | 1396692 | 3285954 | 2379732 // ---------------------------------------------------------------------------------------------- // ���������������� | ���. | 1398100 | 1398100 | 3320472 | 2381140 // �������������� #3 | ����� | 1532998 | 1571454 | 3897614 | 2554494 // ---------------------------------------------------------------------------------------------- // ����� Bank1 | | 1572863 | 1572863 | 3932159 | 4128767 // ---------------------------------------------------------------------------------------------- // * - ������������ ����� ����� � ���. ���-�� 3601 // * - ������������ ����� ����� � �����. ���-�� 1601 // * - ������������ ����� ����� � ���������. 1601 // #pragma pack(push, 1) // ���� ������ ���������� ��� struct TEcalRemoteMode { uint8_t Marker; uint16_t Time; uint8_t Sum; }; #pragma pack(pop) #endif // ECalUnitH //// ������: //////////--------------------------------------------------------------------------- ////////#pragma pack(push, 1) //////// //////// ////////// ��������� ���������� ��������������������� ������� ////////struct TEtermPoint { //////// short int point; ////////}; ////////#pragma pack(pop) ////////#pragma pack(push, 1) ////////// ������� ������ �������������� 14 �������� ��� SC6000, 18 �������� ��� SC8000: ////////// ��� ������ �������� - min � max ��� Magn, ����� Points ������ (Magn + Angle) ////////// _____________________ ////////// \ . ////////// 4 + ShortA + CRC | ////////// 4 + ShortB + CRC | ////////// 4 + OpenA + CRC | ////////// 4 + OpenB + CRC | ////////// 4 + LoadA + CRC |________[ Characterization Data ]______ ////////// 4 + LoadB + CRC | | | ////////// 4 + Thru11 + CRC | | sc6000 = 14 * (4 + 2*Points*3 + 4) | ////////// 4 + Thru21 + CRC | | sc8000 = 18 * (4 + 2*Points*3 + 4) | ////////// 4 + Thru12 + CRC | |_____________________________________| ////////// 4 + Thru22 + CRC | ////////// 4 + Atten11+ CRC | ////////// 4 + Atten21+ CRC | ////////// 4 + Atten12+ CRC | ////////// 4 + Atten22+ CRC | ////////// _ _ _ _ _ _ _ _ _ _ _| ////////// | ////////// (SC8000 only) | ////////// | ////////// 4 + Load2A + CRC | ////////// 4 + Load2B + CRC | ////////// 4 + Open2A + CRC | ////////// 4 + Open2B + CRC | ////////// | ////////// _____________________| //////// //////// ////////// ����� ������ �������������� //////// ////////#define CHARACTERIZATION_TABLE_SIZE(POINTS) (4 + 2 * sizeof(short) + sizeof(struct TEcalPoint2) * POINTS ) ////////#define CHARACTERIZATION_TOTAL_SIZE_SC6000(POINTS) (14 * (CHARACTERIZATION_TABLE_SIZE(POINTS) /*+ 4*/)) ////////#define CHARACTERIZATION_TOTAL_SIZE_SC8000(POINTS) (18 * (CHARACTERIZATION_TABLE_SIZE(POINTS) /*+ 4*/)) ////////#define CHARACTERIZATION_DATA_END_SC6000(POINTS) (sizeof(struct TEcalDataHeaderCRC) + CHARACTERIZATION_TOTAL_SIZE_SC6000(POINTS)) ////////#define CHARACTERIZATION_DATA_END_SC8000(POINTS) (sizeof(struct TEcalDataHeaderCRC) + CHARACTERIZATION_TOTAL_SIZE_SC8000(POINTS)) //////// //////// ////////#define FACTORY_MAX_DATA_POINTS 3601 ////////#define MAX_TERMOCOMP_POINTS 1601 ////////#define USER_MAX_DATA_POINTS 1601 //////// ////////// ����� ������� ������������� ������������� (���� ����� - 3699 ��������������, 1723 ���������������� ) ////////#define THERM_COMP_ADDR 400000 //////// ////////struct TEcalTCompHeader { //////// char CalDate[12]; // ���� ������ //////// char CalTime[10]; // ����� ������ //////// double Fmin; //////// double Fmax; //////// int Points; //////// int Flags; // 1 - �������/����������� //////// char FileName[20]; // ��� ����� ������ //////// char Reserved[10]; ////////}; ////////struct TEcalTCompHeaderCRC { //80 //////// struct TEcalTCompHeader Hdr; //////// ULONG CRC; ////////}; //////// ////////// ������� ���������� ������������ 28 �������� ��� SC6000, 36 ��� SC8000, ���� short: ��� ������ �������� - min � max, ����� Points ������ //////// //////// // ������������� �-�� ��/C ��� ����/C ��������� � ���������� ���� short //////// // +4 ����� - ��� �������������� ������������ min, max //////// // ���� �������������� �-�� ��������� � ��������� 0.01 (�� -327 �� +327 �� ��� ��������) //////// // ������������� �-�� ��������� � ���������� ��������� (65535 ������� �� min �� max) //////// ////////// ������� ���� � ��������� �������: ////////// magn ShortA (��/C) ////////// phase ShortA (����/C) ////////// magn ShortB (��/C) ////////// phase ShortB (����/C) //////// ////////// magn OpenA (��/C) ////////// phase OpenA (����/C) ////////// magn OpenB (��/C) ////////// phase OpenB (����/C) //////// ////////// magn LoadA (��/C) ////////// phase LoadA (����/C) ////////// magn LoadB (��/C) ////////// phase LoadB (����/C) //////// ////////// magn Thru11 (��/C) // ��������! ������� ���������� ���������� �-��� ��������� ////////// phase Thru11 (����/C) // �� ���������� ������� �-��� �������������� ////////// magn Thru21 (��/C) ////////// phase Thru21 (����/C) ////////// magn Thru12 (��/C) // ��������� 4 ������� ������������ � ����� ������������� ////////// phase Thru12 (����/C) // ��� ��� ������� �-��� Thru11 � Thru22 ���� ////////// magn Thru22 (��/C) ////////// phase Thru22 (����/C) //////// ////////// magn Atten11 (��/C) ////////// phase Atten11 (����/C) ////////// magn Atten21 (��/C) ////////// phase Atten21 (����/C) ////////// magn Atten12 (��/C) ////////// phase Atten12 (����/C) ////////// magn Atten22 (��/C) ////////// phase Atten22 (����/C) //////// ////////// _______________________________ ////////// | ////////// magn Load2A (��/C) | ////////// phase Load2A (����/C) | ////////// magn Load2B (��/C) | ////////// phase Load2B (����/C) |--- SC8000 only ////////// magn Open2A (��/C) | ////////// phase Open2A (����/C) | ////////// magn Open2B (��/C) | ////////// phase Open2B (����/C) | ////////// _______________________________| //////// ////////// ������ ������ ������� CRC //////// //////////--------------------------------------------------------------------------- ////////// Factory Data � ������ FLASH ////////// User1-3 Data � FLASH 0x100000-0x1FFFFF, ����1, ������� ���������� ������ �� 3 �����: 524288/3=174762 ////////// � ���� ���������� ����� ��� - 1614. (������� ������� ���� ���������� ������ �� 512��) //////// ////////// !!! ��������� 8 ���� ����-1 ��������������� ��� ��������� USBTMC !!! //////// ////////// ������ ����-1 //////////-------------------------- user characterization #1 ------------------ 0x0000 0000 ////////// TEcalDataHeader + CRC : � � � � � � � � � �������������� ////////// � � � � � � � 1 + CRC ////////// � � � � � � � 2 + CRC ////////// ... ////////// � � � � � � � 18+ CRC //////////-------------------------- user characterization #2 ------------------ 0x0002 AAAA ////////// TEcalDataHeader + CRC : � � � � � � � � � �������������� ////////// � � � � � � � 1 + CRC ////////// � � � � � � � 2 + CRC ////////// ... ////////// � � � � � � � 18+ CRC //////////-------------------------- user characterization #3 ------------------ 0x0005 5554 ////////// TEcalDataHeader + CRC : � � � � � � � � � �������������� ////////// � � � � � � � 1 + CRC ////////// � � � � � � � 2 + CRC ////////// ... ////////// � � � � � � � 18+ CRC //////////---------------------------------------------------------------------- 0x0007 FFFE ////////#pragma pack(pop) // 1F FFF7 //////// //////////--------------------------------------------------------------------------- ////////#endif