tinySA4 selftest updated

Removed_REF_marker
erikkaashoek 5 years ago
parent 6e72f4549d
commit f70c3ab4eb

@ -3939,7 +3939,10 @@ enum {
}; };
enum { enum {
TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_10MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_10MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH,
#ifdef TINYSA4
TP_30MHZ_ULTRA, TP_30MHZ_LNA,
#endif
}; };
#define TEST_COUNT (sizeof test_case / sizeof test_case[0]) #define TEST_COUNT (sizeof test_case / sizeof test_case[0])
@ -3947,7 +3950,7 @@ enum {
#define W2P(w) (sweep_points * w / 100) // convert width in % to actual sweep points #define W2P(w) (sweep_points * w / 100) // convert width in % to actual sweep points
#ifdef TINYSA4 #ifdef TINYSA4
#define CAL_LEVEL -29.5 #define CAL_LEVEL -23.5
#else #else
#define CAL_LEVEL (has_esd ? -26.2 : -25) #define CAL_LEVEL (has_esd ? -26.2 : -25)
#endif #endif
@ -3969,34 +3972,35 @@ typedef struct test_case {
const test_case_t test_case [] = const test_case_t test_case [] =
#ifdef TINYSA4 #ifdef TINYSA4
{// Condition Preparation Center Span Pass Width(%)Stop {// Condition Preparation Center Span Pass Width(%)Stop
TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.005, 0.01, 0, 0, 0), // 1 Zero Hz leakage TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.05, 0.1, -10, 0, 0), // 1 Zero Hz leakage
TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.015, 0.01, -30, 0, 0), // 2 Phase noise of zero Hz TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 0.1, 0.1, -70, 0, 0), // 2 Phase noise of zero Hz
TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ, 30, 7, -30, 10, -90), // 3 TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ, 30, 1, -23, 10, -85), // 3
TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ, 60, 7, -70, 10, -90), // 4 TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ_ULTRA, 900, 1, -75, 10, -85), // 4
#define TEST_SILENCE 4 #define TEST_SILENCE 4
TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 200, 100, -75, 0, 0), // 5 Wide band noise floor low mode TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 200, 100, -70, 0, 0), // 5 Wide band noise floor low mode
TEST_CASE_STRUCT(TC_BELOW, TPH_SILENT, 600, 720, -75, 0, 0), // 6 Wide band noise floor high mode TEST_CASE_STRUCT(TC_BELOW, TPH_SILENT, 633, 994, -85, 0, 0), // 6 Wide band noise floor high mode
TEST_CASE_STRUCT(TC_SIGNAL, TP_10MHZEXTRA, 30, 14, -20, 27, -80), // 7 BPF loss and stop band TEST_CASE_STRUCT(TC_SIGNAL, TP_10MHZEXTRA, 30, 14, -20, 27, -70), // 7 BPF loss and stop band
TEST_CASE_STRUCT(TC_FLAT, TP_10MHZEXTRA, 30, 14, -18, 9, -60), // 8 BPF pass band flatness TEST_CASE_STRUCT(TC_FLAT, TP_10MHZEXTRA, 30, 14, -18, 9, -60), // 8 BPF pass band flatness
TEST_CASE_STRUCT(TC_BELOW, TP_30MHZ, 400, 60, -75, 0, -75), // 9 LPF cutoff TEST_CASE_STRUCT(TC_BELOW, TP_30MHZ, 900, 1, -90, 0, -90), // 9 LPF cutoff
TEST_CASE_STRUCT(TC_SIGNAL, TP_10MHZ_SWITCH,20, 7, -39, 10, -60), // 10 Switch isolation using high attenuation TEST_CASE_STRUCT(TC_SIGNAL, TP_10MHZ_SWITCH,20, 7, -29, 10, -50), // 10 Switch isolation using high attenuation
TEST_CASE_STRUCT(TC_DISPLAY, TP_30MHZ, 30, 0, -25, 145, -60), // 11 Measure atten step accuracy TEST_CASE_STRUCT(TC_DISPLAY, TP_30MHZ, 30, 0, -25, 145, -60), // 11 test display
TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, CAL_LEVEL, 145, -60), // 12 Measure atten step accuracy TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, CAL_LEVEL, 145, -60), // 12 Measure atten step accuracy
#define TEST_END 12 TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ_LNA, 30, 5, -23, 10, -75), // 13 Measure LNA
#define TEST_END 13
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0), TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
#define TEST_POWER 13 #define TEST_POWER 14
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 7, CAL_LEVEL, 10, -55), // 12 Measure power level and noise TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 7, CAL_LEVEL, 10, -55), // 12 Measure power level and noise
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 270, 4, -50, 10, -75), // 13 Measure powerlevel and noise TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 270, 4, -50, 10, -75), // 13 Measure powerlevel and noise
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 270, 4, -40, 10, -65), // 14 Calibrate power high mode TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 270, 4, -40, 10, -65), // 14 Calibrate power high mode
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0), TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
#define TEST_RBW 17 #define TEST_RBW 18
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 1, CAL_LEVEL, 10, -60), // 16 Measure RBW step time TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 1, CAL_LEVEL, 10, -60), // 16 Measure RBW step time
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0), TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 300, 4, -48, 10, -65), // 14 Calibrate power high mode TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 300, 4, -48, 10, -65), // 14 Calibrate power high mode
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ_SWITCH,300, 4, -40, 10, -65), // 14 Calibrate power high mode TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ_SWITCH,300, 4, -40, 10, -65), // 14 Calibrate power high mode
#define TEST_ATTEN 21 #define TEST_ATTEN 22
TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, -25, 145, -60), // 20 Measure atten step accuracy TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, -25, 145, -60), // 20 Measure atten step accuracy
#define TEST_SPUR 22 #define TEST_SPUR 23
TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 144, 8, -95, 0, 0), // 22 Measure 48MHz spur TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 144, 8, -95, 0, 0), // 22 Measure 48MHz spur
}; };
#else #else
@ -4116,7 +4120,7 @@ int validate_signal_within(int i, float margin)
markers[0].index = (markers[2].index + markers[1].index)/2; markers[0].index = (markers[2].index + markers[1].index)/2;
} }
test_fail_cause[i] = "Frequency "; test_fail_cause[i] = "Frequency ";
if (peakFreq < test_case[i].center * 1000000 - 100000 || test_case[i].center * 1000000 + 100000 < peakFreq ) if (peakFreq < test_case[i].center * 1000000 - 400000 || test_case[i].center * 1000000 + 400000 < peakFreq )
return TS_FAIL; return TS_FAIL;
test_fail_cause[i] = ""; test_fail_cause[i] = "";
return TS_PASS; return TS_PASS;
@ -4327,6 +4331,9 @@ void test_prepare(int i)
setting.atten_step = false; setting.atten_step = false;
#ifdef TINYSA4 #ifdef TINYSA4
setting.frequency_IF = config.frequency_IF1; // Default frequency setting.frequency_IF = config.frequency_IF1; // Default frequency
config.ultra = true;
config.ultra_threshold = 2000000000;
setting.extra_lna = false;
#else #else
setting.frequency_IF = DEFAULT_IF; // Default frequency setting.frequency_IF = DEFAULT_IF; // Default frequency
#endif #endif
@ -4389,9 +4396,13 @@ common_silent:
for (int j = setting._sweep_points/2 - W2P(test_case[i].width); j < setting._sweep_points/2 + W2P(test_case[i].width); j++) for (int j = setting._sweep_points/2 - W2P(test_case[i].width); j < setting._sweep_points/2 + W2P(test_case[i].width); j++)
stored_t[j] = test_case[i].pass; stored_t[j] = test_case[i].pass;
break; break;
#ifdef TINYSA4
case TP_30MHZ_ULTRA:
case TP_30MHZ_LNA:
#endif
case TP_30MHZ: case TP_30MHZ:
set_mode(M_LOW); set_mode(M_LOW);
maxFreq = 520000000; // needed to measure the LPF rejection maxFreq = 2000000000; // needed to measure the LPF rejection
set_refer_output(0); set_refer_output(0);
dirty = true; dirty = true;
// set_step_delay(1); // Do not set !!!!! // set_step_delay(1); // Do not set !!!!!
@ -4408,6 +4419,15 @@ common_silent:
goto common; goto common;
} }
switch(test_case[i].setup) { // Prepare test conditions switch(test_case[i].setup) { // Prepare test conditions
#ifdef TINYSA4
case TP_30MHZ_ULTRA:
config.ultra_threshold = 0;
break;
case TP_30MHZ_LNA:
setting.extra_lna = true;
chThdSleepMilliseconds(200);
break;
#endif
case TP_10MHZ_SWITCH: case TP_10MHZ_SWITCH:
set_attenuation(32); // This forces the switch to transmit so isolation can be tested set_attenuation(32); // This forces the switch to transmit so isolation can be tested
break; break;
@ -4505,6 +4525,12 @@ void self_test(int test)
sweep_mode = SWEEP_ENABLE; sweep_mode = SWEEP_ENABLE;
ili9341_clear_screen(); ili9341_clear_screen();
#ifdef TINYSA4
config_recall();
config.cor_am = 0;
config.cor_nfm = 0;
config.cor_wfm = 0;
#endif
reset_settings(M_LOW); reset_settings(M_LOW);
set_refer_output(-1); set_refer_output(-1);
#ifdef TINYSA4 #ifdef TINYSA4

@ -2364,7 +2364,7 @@ static const RBW_t RBW_choices[] =
{SI4463_RBW_30kHz, 0,300}, {SI4463_RBW_30kHz, 0,300},
{SI4463_RBW_100kHz,0,1000}, {SI4463_RBW_100kHz,0,1000},
{SI4463_RBW_300kHz,0,3000}, {SI4463_RBW_300kHz,0,3000},
{SI4463_RBW_850kHz,0,6000}, {SI4463_RBW_850kHz,0,8500},
}; };
const uint8_t SI4432_RBW_count = ((int)(sizeof(RBW_choices)/sizeof(RBW_t))); const uint8_t SI4432_RBW_count = ((int)(sizeof(RBW_choices)/sizeof(RBW_t)));

@ -1010,15 +1010,18 @@ static UI_FUNCTION_ADV_CALLBACK(menu_measure_acb)
markers[i].mtype = M_DELTA;// | M_TRACKING; markers[i].mtype = M_DELTA;// | M_TRACKING;
#endif #endif
} }
freq_t center, span;
#ifdef TINYSA4 #ifdef TINYSA4
freq_t span;
markers[0].mtype = M_REFERENCE | M_TRACKING; markers[0].mtype = M_REFERENCE | M_TRACKING;
#else #else
freq_t center, span;
markers[0].mtype = M_REFERENCE;// | M_TRACKING; markers[0].mtype = M_REFERENCE;// | M_TRACKING;
#endif #endif
kp_help_text = "Frequency of signal"; kp_help_text = "Frequency of signal";
ui_mode_keypad(KM_CENTER); ui_mode_keypad(KM_CENTER);
#ifdef TINYSA3
center = uistat.value; center = uistat.value;
#endif
kp_help_text = "Modulation frequency: 3 .. 10kHz"; kp_help_text = "Modulation frequency: 3 .. 10kHz";
ui_mode_keypad(KM_SPAN); ui_mode_keypad(KM_SPAN);
// if (uistat.value < 3000) // if (uistat.value < 3000)
@ -1286,8 +1289,8 @@ static UI_FUNCTION_CALLBACK(menu_limit_disable_cb)
#endif #endif
#ifdef TINYSA4 #ifdef TINYSA4
static const uint16_t rbwsel_x10[]={0,3,10,30,100,300,1000,3000,6000}; static const uint16_t rbwsel_x10[]={0,3,10,30,100,300,1000,3000,8500};
static const char* rbwsel_text[]={"auto","300","1k","3k","10k","30k","100k","300k","600k"}; static const char* rbwsel_text[]={"auto","300","1k","3k","10k","30k","100k","300k","850k"};
#else #else
static const uint16_t rbwsel_x10[]={0,30,100,300,1000,3000,6000}; static const uint16_t rbwsel_x10[]={0,30,100,300,1000,3000,6000};
#endif #endif

Loading…
Cancel
Save

Powered by TurnKey Linux.