From de39eac5a8da7053d8838726264f66ba232ada38 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Wed, 9 Jun 2021 11:35:43 +0200 Subject: [PATCH] Reduced SPI speed and hop command added --- NANOVNA_STM32_F303/board.h | 6 ++-- main.c | 66 +++++++++++++++++++++++++++++++++++--- sa_core.c | 15 +++++---- si4468.c | 6 ++-- 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/NANOVNA_STM32_F303/board.h b/NANOVNA_STM32_F303/board.h index 4c3cb8b..ddbcbc5 100644 --- a/NANOVNA_STM32_F303/board.h +++ b/NANOVNA_STM32_F303/board.h @@ -293,9 +293,9 @@ #define VAL_GPIOB_OSPEEDR (PIN_PUPDR_FLOATING(GPIOB_XN) | \ PIN_PUPDR_FLOATING(GPIOB_YN) | \ PIN_OSPEED_100M(GPIO_LCD_RESET) | \ - PIN_OSPEED_100M(GPIOB_SPI_SCLK) | \ - PIN_OSPEED_100M(GPIOB_SPI_MISO) | \ - PIN_OSPEED_100M(GPIOB_SPI_MOSI) | \ + PIN_OSPEED_2M(GPIOB_SPI_SCLK) | \ + PIN_OSPEED_2M(GPIOB_SPI_MISO) | \ + PIN_OSPEED_2M(GPIOB_SPI_MOSI) | \ PIN_OSPEED_100M(6) | \ PIN_OSPEED_100M(GPIO_SD_CD) | \ PIN_OSPEED_100M(8) | \ diff --git a/main.c b/main.c index cd8f31b..a71af43 100644 --- a/main.c +++ b/main.c @@ -961,7 +961,7 @@ void set_sweep_points(uint16_t points){ VNA_SHELL_FUNCTION(cmd_scan) { freq_t start, stop; - uint32_t points = sweep_points; + uint32_t old_points = sweep_points; uint32_t i; if (argc < 2 || argc > 4) { shell_printf("usage: scan {start(Hz)} {stop(Hz)} [points] [outmask]\r\n"); @@ -975,20 +975,21 @@ VNA_SHELL_FUNCTION(cmd_scan) return; } if (argc >= 3) { - points = my_atoi(argv[2]); - if (points <= 0 || points > sweep_points) { + int points = my_atoi(argv[2]); + if (points <= 0 || points > POINTS_COUNT) { shell_printf("sweep points exceeds range "define_to_STR(POINTS_COUNT)"\r\n"); return; } + sweep_points = points; } - set_frequencies(start, stop, points); + set_frequencies(start, stop, sweep_points); pause_sweep(); sweep(false); // Output data after if set (faster data recive) if (argc == 4) { uint16_t mask = my_atoui(argv[3]); if (mask) { - for (i = 0; i < points; i++) { + for (i = 0; i < sweep_points; i++) { if (mask & 1) shell_printf("%U ", frequencies[i]); if (mask & 2) shell_printf("%f %f ", value(measured[TRACE_ACTUAL][i]), 0.0); if (mask & 4) shell_printf("%f %f ", value(measured[TRACE_STORED][i]), 0.0); @@ -997,7 +998,59 @@ VNA_SHELL_FUNCTION(cmd_scan) } } } + sweep_points = old_points; +} + +#ifdef TINYSA4 +VNA_SHELL_FUNCTION(cmd_hop) +{ + freq_t start, stop, step; + uint32_t old_points = sweep_points; + uint32_t i; + if (argc < 2 || argc > 4) { + shell_printf("usage: hop {start(Hz)} {stop(Hz)} {step(Hz) | points} [outmask]\r\n"); + return; + } + + start = my_atoui(argv[0]); + stop = my_atoui(argv[1]); + if (start > stop) { + shell_printf("frequency range is invalid\r\n"); + return; + } + if (argc >= 3) { + step = my_atoui(argv[2]); + if (step > POINTS_COUNT) { + int i = 0; + for (freq_t f = start; f<= stop; f += step) + frequencies[i++] = f; + dirty = true; + sweep_points = 1 + (stop-start)/step; + } else { + sweep_points = step; + set_frequencies(start, stop, sweep_points); + } + } + pause_sweep(); + setting.frequency_step = 0; + sweep(false); + // Output data after if set (faster data recive) + uint16_t mask = 3; + if (argc == 4) { + mask = my_atoui(argv[3]); + } + if (mask) { + for (i = 0; i < sweep_points; i++) { + if (mask & 1) shell_printf("%Q ", frequencies[i]); + if (mask & 2) shell_printf("%f ", value(measured[TRACE_ACTUAL][i])); + if (mask & 4) shell_printf("%f ", value(measured[TRACE_STORED][i])); + if (mask & 8) shell_printf("%f ", value(measured[TRACE_TEMP][i])); + shell_printf("\r\n"); + } + } + sweep_points = old_points; } +#endif static void update_marker_index(void) @@ -1668,6 +1721,9 @@ static const VNAShellCommand commands[] = {"frequencies" , cmd_frequencies , 0}, // {"gamma" , cmd_gamma , 0}, {"scan" , cmd_scan , CMD_WAIT_MUTEX}, +#ifdef TINYSA4 + {"hop" , cmd_hop , CMD_WAIT_MUTEX}, +#endif {"scanraw" , cmd_scanraw , CMD_WAIT_MUTEX}, {"zero" , cmd_zero , CMD_WAIT_MUTEX | CMD_RUN_IN_LOAD}, // Will set the scanraw measured value offset (128 or 174) {"sweep" , cmd_sweep , 0}, diff --git a/sa_core.c b/sa_core.c index d560c27..1aa6a0c 100644 --- a/sa_core.c +++ b/sa_core.c @@ -3177,7 +3177,7 @@ again: // Spur redu if (debug_avoid_second) { if (S_IS_AUTO(setting.below_IF) && lf < local_IF/2 - 2000000) { setting.below_IF = S_AUTO_ON; - local_IF = local_IF; // No spure removal and no spur, center in IF + local_IF = local_IF; // No spur removal and no spur, center in IF } else if (setting.auto_IF) { local_IF = local_IF + DEFAULT_SPUR_OFFSET/2; // if (actual_rbw_x10 == 6000 ) @@ -3195,7 +3195,7 @@ again: // Spur redu } else { if (S_IS_AUTO(setting.below_IF) && lf < local_IF/2 - 2000000) { setting.below_IF = S_AUTO_ON; - local_IF = local_IF; // No spure removal and no spur, center in IF + local_IF = local_IF; // No spur removal and no spur, center in IF } else if (setting.auto_IF) { local_IF = local_IF + DEFAULT_SPUR_OFFSET/2; // if (actual_rbw_x10 == 6000 ) @@ -5872,12 +5872,15 @@ abort: // reset_settings(M_LOW); set_refer_output(-1); if (setting.test_argument > 0) - set_R(setting.test_argument); - set_attenuation(0); + set_R(((int)setting.test_argument) % 10); + int freq_step = 30; + if (setting.test_argument > 9) + freq_step = (((int)setting.test_argument)/10) * 1000000 ; + set_attenuation(0); int test_case = TEST_POWER; - for (int i=1; i<30; i++) { + for (freq_t f=freq_step; f<900000000; f += freq_step) { set_sweep_points(51); - set_sweep_frequency(ST_CENTER, 30000000 * i); + set_sweep_frequency(ST_CENTER, f); set_sweep_frequency(ST_SPAN, 3000); test_acquire(test_case); // Acquire test test_validate(test_case); diff --git a/si4468.c b/si4468.c index 9712100..0ffc4b6 100644 --- a/si4468.c +++ b/si4468.c @@ -61,10 +61,12 @@ // Check device SPI clock speed #if STM32_PCLK2 > 48000000 // 48 or 72M MCU // On 72M MCU STM32_PCLK2 = 72M, SPI = 72M/4 = 18M -#define SI4432_SPI_SPEED SPI_BR_DIV4 +//#define SI4432_SPI_SPEED SPI_BR_DIV4 +#define SI4432_SPI_SPEED SPI_BR_DIV8 #else // On 48M MCU STM32_PCLK2 = 48M, SPI = 48M/2 = 24M -#define SI4432_SPI_SPEED SPI_BR_DIV2 +//#define SI4432_SPI_SPEED SPI_BR_DIV2 +#define SI4432_SPI_SPEED SPI_BR_DIV4 #endif