From d19e5cac3120fe941e4c18d3d6ff004f50347e53 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 20:09:40 +0300 Subject: [PATCH 1/7] Fix typo --- NANOVNA_STM32_F072/board.h | 4 ++-- NANOVNA_STM32_F303/board.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/NANOVNA_STM32_F072/board.h b/NANOVNA_STM32_F072/board.h index 8bc0aa4..bc270a2 100644 --- a/NANOVNA_STM32_F072/board.h +++ b/NANOVNA_STM32_F072/board.h @@ -267,8 +267,8 @@ PIN_OTYPE_PUSHPULL(13) | \ PIN_OTYPE_PUSHPULL(GPIO_SPI2_SDO) | \ PIN_OTYPE_PUSHPULL(GPIO_SPI2_SDI)) -#define VAL_GPIOB_OSPEEDR (PIN_PUPDR_FLOATING(GPIOB_XN) | \ - PIN_PUPDR_FLOATING(GPIOB_YN) | \ +#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_100M(GPIOB_XN) | \ + PIN_OSPEED_100M(GPIOB_YN) | \ PIN_OSPEED_100M(2) | \ PIN_OSPEED_100M(3) | \ PIN_OSPEED_100M(4) | \ diff --git a/NANOVNA_STM32_F303/board.h b/NANOVNA_STM32_F303/board.h index ddbcbc5..663ecf2 100644 --- a/NANOVNA_STM32_F303/board.h +++ b/NANOVNA_STM32_F303/board.h @@ -195,7 +195,7 @@ PIN_OSPEED_100M(GPIOA_JTMS) | \ PIN_OSPEED_100M(GPIOA_JTCK) | \ PIN_OSPEED_100M(15)) -#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(0) | \ +#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(0) | \ PIN_PUPDR_PULLDOWN(1) | \ PIN_PUPDR_PULLDOWN(2) | \ PIN_PUPDR_PULLDOWN(3) | \ @@ -211,7 +211,7 @@ PIN_PUPDR_PULLDOWN(GPIOA_JTMS) | \ PIN_PUPDR_PULLDOWN(GPIOA_JTCK) | \ PIN_PUPDR_PULLUP(15)) -#define VAL_GPIOA_ODR (PIN_ODR_HIGH(0) | \ +#define VAL_GPIOA_ODR (PIN_ODR_HIGH(0) | \ PIN_ODR_HIGH(1) | \ PIN_ODR_HIGH(2) | \ PIN_ODR_HIGH(3) | \ @@ -290,8 +290,8 @@ PIN_OTYPE_PUSHPULL(13) | \ PIN_OTYPE_PUSHPULL(14) | \ PIN_OTYPE_PUSHPULL(15)) -#define VAL_GPIOB_OSPEEDR (PIN_PUPDR_FLOATING(GPIOB_XN) | \ - PIN_PUPDR_FLOATING(GPIOB_YN) | \ +#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_100M(GPIOB_XN) | \ + PIN_OSPEED_100M(GPIOB_YN) | \ PIN_OSPEED_100M(GPIO_LCD_RESET) | \ PIN_OSPEED_2M(GPIOB_SPI_SCLK) | \ PIN_OSPEED_2M(GPIOB_SPI_MISO) | \ From bc34fdb7adc6aa2cf0326d43858df123f1864499 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 20:10:43 +0300 Subject: [PATCH 2/7] Allow pass 32 bit float to printf --- chprintf.c | 8 +++++++- ui_sa.c | 14 +++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/chprintf.c b/chprintf.c index c6ce34e..3b9f66b 100644 --- a/chprintf.c +++ b/chprintf.c @@ -257,6 +257,7 @@ static char *ftoaS(char *p, float num, int precision) { #define PAD_ZERO 16 #define PLUS_SPACE 32 #define DEFAULT_PRESCISION 64 +#define _32_BIT_FLOAT 128 int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) { char *p, *s, c, filler=' '; @@ -308,6 +309,8 @@ int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) { else if (*fmt == ' ') state|=PLUS_SPACE; #endif + else if (*fmt == 'b') + state|=_32_BIT_FLOAT; else break; fmt++; @@ -405,7 +408,10 @@ int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) { #if CHPRINTF_USE_FLOAT case 'F': case 'f': - value.f = va_arg(ap, double); + if (state & _32_BIT_FLOAT) + value.u = va_arg(ap, uint32_t); + else + value.f = va_arg(ap, double); if (value.f < 0) { state|=NEGATIVE; *p++ = '-'; diff --git a/ui_sa.c b/ui_sa.c index 6dacaa1..9943ab4 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -1691,7 +1691,7 @@ static const uint16_t rbwsel_x10[]={0,30,100,300,1000,3000,6000}; #endif #ifdef __VBW__ static const uint16_t vbwsel_x100[]={0,100,30,10,3,1}; -static const char* vbwsel_text[]={"auto","0.01","0.03", "0.1", "0.3"," "}; +//static const char* vbwsel_text[]={"auto","0.01","0.03", "0.1", "0.3"," "}; #endif static UI_FUNCTION_ADV_CALLBACK(menu_rbw_acb) @@ -1715,7 +1715,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_vbw_acb) { (void)item; if (b){ - b->param_1.text = vbwsel_text[data]; + b->param_1.f = vbwsel_x100[data] > 0 ? 1.0f/vbwsel_x100[data] : 0; b->icon = setting.vbw_x100 == vbwsel_x100[data] ? BUTTON_ICON_GROUP_CHECKED : BUTTON_ICON_GROUP; return; } @@ -2256,11 +2256,11 @@ static const menuitem_t menu_rbw[] = { #ifdef __VBW__ static const menuitem_t menu_vbw[] = { { MT_ADV_CALLBACK, 0, " AUTO", menu_vbw_acb}, - { MT_ADV_CALLBACK, 1, "%s RBW", menu_vbw_acb}, - { MT_ADV_CALLBACK, 2, "%s RBW", menu_vbw_acb}, - { MT_ADV_CALLBACK, 3, "%s RBW", menu_vbw_acb}, - { MT_ADV_CALLBACK, 4, "%s RBW", menu_vbw_acb}, - { MT_ADV_CALLBACK, 5, "%s RBW", menu_vbw_acb}, + { MT_ADV_CALLBACK, 1, "%b.2f RBW", menu_vbw_acb}, + { MT_ADV_CALLBACK, 2, "%b.2f RBW", menu_vbw_acb}, + { MT_ADV_CALLBACK, 3, "%b.2f RBW", menu_vbw_acb}, + { MT_ADV_CALLBACK, 4, "%b.2f RBW", menu_vbw_acb}, + { MT_ADV_CALLBACK, 5, "%b.2f RBW", menu_vbw_acb}, { MT_NONE, 0, NULL, menu_back} // next-> menu_back }; #endif From 0e895853ddfcfcfdaa2c64628507317ebb1f177a Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 21:56:47 +0300 Subject: [PATCH 3/7] Move init plot and ui to sweep thread, draw grid on startup --- main.c | 15 ++++++++------- plot.c | 3 ++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/main.c b/main.c index a71af43..2245227 100644 --- a/main.c +++ b/main.c @@ -114,14 +114,19 @@ static THD_FUNCTION(Thread1, arg) { (void)arg; chRegSetThreadName("sweep"); + // Init UI and plot grid + area_height = AREA_HEIGHT_NORMAL; + ui_init(); + //Initialize graph plotting + plot_init(); #ifdef __SD_CARD_LOAD__ sd_card_load_config("autoload.ini"); #endif -#ifndef TINYSA4 - ui_process(); -#endif +//#ifndef TINYSA4 +// ui_process(); +//#endif while (1) { // START_PROFILE @@ -2284,10 +2289,6 @@ int main(void) i2sStart(&I2SD2, &i2sconfig); i2sStartExchange(&I2SD2); #endif - area_height = AREA_HEIGHT_NORMAL; - ui_init(); - //Initialize graph plotting - plot_init(); setup_sa(); // if (setting.mode != -1) { diff --git a/plot.c b/plot.c index e4db0ad..31140d5 100644 --- a/plot.c +++ b/plot.c @@ -2019,7 +2019,8 @@ disable_waterfall(void) void plot_init(void) { - force_set_markmap(); + redraw_request|= REDRAW_AREA | REDRAW_BATTERY | REDRAW_CAL_STATUS | REDRAW_FREQUENCY; + draw_all(true); } #pragma GCC pop_options From 092f76c12e67245094822dab63d4acd2ef941551 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 21:57:26 +0300 Subject: [PATCH 4/7] Not used --- nanovna.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nanovna.h b/nanovna.h index 2b78a8f..926057a 100644 --- a/nanovna.h +++ b/nanovna.h @@ -1250,9 +1250,9 @@ typedef struct ui_button { union { int32_t i; uint32_t u; - float f; + float f; const char *text; - } param_1, param_2; // void data for label printf + } param_1; // void data for label printf char text[32]; } ui_button_t; From a283f327e381b23a2efc61e042e98631bf6a4a7c Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 22:04:23 +0300 Subject: [PATCH 5/7] Update SD card code --- ili9341.c | 88 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/ili9341.c b/ili9341.c index 24ecf35..c020681 100644 --- a/ili9341.c +++ b/ili9341.c @@ -34,6 +34,8 @@ #define LCD_RESET_NEGATE palSetPad(GPIO_LCD_RESET_PORT, GPIO_LCD_RESET) #define LCD_DC_CMD palClearPad(GPIO_LCD_CD_PORT, GPIO_LCD_CD) #define LCD_DC_DATA palSetPad(GPIO_LCD_CD_PORT, GPIO_LCD_CD) +#define SD_CS_LOW palClearLine(LINE_SD_CS) +#define SD_CS_HIGH palSetLine(LINE_SD_CS) #else #define LCD_CS_LOW palClearPad(GPIOB, GPIOB_LCD_CS) #define LCD_CS_HIGH palSetPad(GPIOB, GPIOB_LCD_CS) @@ -45,6 +47,8 @@ // LCD display SPI bus #define LCD_SPI SPI1 +// SD card spi bus +#define SD_SPI SPI1 // Custom display definition #ifdef LCD_DRIVER_ILI9341 @@ -65,6 +69,11 @@ #define __USE_DISPLAY_DMA_RX__ #endif +// Define SD SPI speed on work +#define SD_SPI_SPEED SPI_BR_DIV2 +// Define SD SPI speed on initialization (100-400kHz need) +#define SD_INIT_SPI_SPEED SPI_BR_DIV256 + // Disable DMA rx on disabled DMA tx #ifndef __USE_DISPLAY_DMA__ #undef __USE_DISPLAY_DMA_RX__ @@ -223,6 +232,7 @@ void spi_DropRx(void){ // Drop Rx buffer after tx and wait tx complete while (SPI_RX_IS_NOT_EMPTY(LCD_SPI)||SPI_IS_BUSY(LCD_SPI)) (void)SPI_READ_8BIT(LCD_SPI); + (void)SPI_READ_8BIT(LCD_SPI); } //***************************************************** @@ -346,8 +356,11 @@ void set_SPI_mode(uint16_t mode){ // Disable current mode switch(current_spi_mode){ case SPI_MODE_LCD: + LCD_CS_HIGH; break; case SPI_MODE_SD_CARD: + case SPI_MODE_SD_CARD_LOW: + SD_CS_HIGH; break; case SPI_MODE_SI: stop_SI4432_SPI_mode(); @@ -359,16 +372,18 @@ void set_SPI_mode(uint16_t mode){ // Enable new mode switch(mode){ case SPI_MODE_LCD: + SPI_BR_SET(LCD_SPI, LCD_SPI_SPEED); // Set Baud rate for LCD break; case SPI_MODE_SD_CARD: - LCD_CS_HIGH; + SPI_BR_SET(LCD_SPI, SD_SPI_SPEED); // Set Baud rate for SD work + break; + case SPI_MODE_SD_CARD_LOW: + SPI_BR_SET(LCD_SPI, SD_INIT_SPI_SPEED); // Set Baud rate for SD init break; case SPI_MODE_SI: - LCD_CS_HIGH; start_SI4432_SPI_mode(); break; case SPI_MODE_PE: - LCD_CS_HIGH; start_PE4312_SPI_mode(); break; } @@ -546,7 +561,7 @@ void ili9341_init(void) for (p = LCD_INIT; *p; ) { send_command(p[0], p[1], &p[2]); p += 2 + p[1]; - chThdSleepMilliseconds(5); + chThdSleepMilliseconds(2); } ili9341_clear_screen(); LCD_CS_HIGH; @@ -1188,15 +1203,6 @@ void ili9341_test(int mode) // Define sector size #define SD_SECTOR_SIZE 512 -// SD card spi bus -#define SD_SPI SPI1 -// Define SD SPI speed on work -#define SD_SPI_SPEED SPI_BR_DIV2 -// div4 give less error and high speed for Rx -#define SD_SPI_RX_SPEED SPI_BR_DIV2 - -// Define SD SPI speed on initialization (100-400kHz need) -#define SD_INIT_SPI_SPEED SPI_BR_DIV256 // Set number of try read or write sector data (1 only one try) #define SD_READ_WRITE_REPEAT 1 // Local values for SD card state @@ -1225,23 +1231,23 @@ void testLog(void){ //******************************************************* // SD card SPI functions //******************************************************* -#define SD_CS_LOW palClearLine(LINE_SD_CS) -#define SD_CS_HIGH palSetLine(LINE_SD_CS) - bool SD_Inserted(void){ return !(palReadPort(GPIOB)&(1< wait_time) - break; + // Check timeout only every 256 bytes read (~8ms) + if (count == 0 && (chVTGetSystemTimeX() - time) > wait_time) + break; }while (res == 0xFF); return false; } @@ -1342,15 +1347,14 @@ static inline uint8_t SD_WaitDataAccept(uint32_t cnt) { static uint8_t SD_WaitNotBusy(uint32_t wait_time) { uint8_t res; uint32_t time = chVTGetSystemTimeX(); - uint32_t count = 0; + uint8_t count = 0; do{ if ((res = spi_RxByte()) == 0xFF) return res; count++; - // Check timeout only every 65536 bytes read (~50ms interval) - if ((count&0xFFFF) == 0) - if ((chVTGetSystemTimeX() - time) > wait_time) - break; + // Check timeout only every 256 bytes read (~8ms) + if (count == 0 && (chVTGetSystemTimeX() - time) > wait_time) + break; }while (1); return 0; } @@ -1465,9 +1469,9 @@ static uint8_t SD_SendCmd(uint8_t cmd, uint32_t arg) { } // Power on SD -void SD_PowerOn(void) { +static void SD_PowerOn(void) { uint16_t n; - SD_Select_SPI(SD_INIT_SPI_SPEED); + SD_Select_SPI_LOW(); // Dummy TxRx 80 bits for power up SD for (n=0;n<10;n++) @@ -1475,9 +1479,6 @@ void SD_PowerOn(void) { // Set SD card to idle state if (SD_SendCmd(CMD0, 0) == SD_R1_IDLE) Stat|= STA_POWER_ON; - else{ - Stat = STA_NOINIT; - } SD_Unselect_SPI(); } @@ -1513,13 +1514,16 @@ DSTATUS disk_initialize(BYTE pdrv) { total_time = chVTGetSystemTimeX(); #endif if (pdrv != 0) return STA_NOINIT; + // Start init SD card + Stat = STA_NOINIT; // power on, try detect on bus, set card to idle state SD_PowerOn(); + if (!SD_CheckPower()) return Stat; // check disk type uint8_t type = 0; uint32_t cnt = 100; // Set low SPI bus speed = PLL/256 (on 72MHz =281.250kHz) - SD_Select_SPI(SD_INIT_SPI_SPEED); + SD_Select_SPI_LOW(); // send GO_IDLE_STATE command if (SD_SendCmd(CMD0, 0) == SD_R1_IDLE) { @@ -1584,11 +1588,9 @@ DSTATUS disk_initialize(BYTE pdrv) { SD_Unselect_SPI(); CardType = type; DEBUG_PRINT("CardType %d\r\n", type); - // Clear STA_NOINIT and set Power on - if (type){ - Stat&= ~STA_NOINIT; - Stat|= STA_POWER_ON; - } + // Clear STA_NOINIT + if (type) + Stat&=~STA_NOINIT; else // Initialization failed SD_PowerOff(); return Stat; @@ -1612,7 +1614,7 @@ DRESULT disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { r_time-= chVTGetSystemTimeX(); #endif - SD_Select_SPI(SD_SPI_RX_SPEED); + SD_Select_SPI(); // READ_SINGLE_BLOCK uint8_t cnt = SD_READ_WRITE_REPEAT; // read repeat count do{ @@ -1664,7 +1666,7 @@ DRESULT disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { w_time-= chVTGetSystemTimeX(); #endif - SD_Select_SPI(SD_SPI_SPEED); + SD_Select_SPI(); // WRITE_SINGLE_BLOCK uint8_t cnt = SD_READ_WRITE_REPEAT; // write repeat count do{ @@ -1691,7 +1693,7 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void* buff) { DRESULT res = RES_PARERR; // No disk or not ready if (pdrv != 0 || Stat & STA_NOINIT) return RES_NOTRDY; - SD_Select_SPI(SD_SPI_RX_SPEED); + SD_Select_SPI(); switch (cmd){ // Makes sure that the device has finished pending write process. // If the disk I/O layer or storage device has a write-back cache, From 5183d806e6c8e612affca1eff7db8e567d6c657b Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 22:04:48 +0300 Subject: [PATCH 6/7] Restore --- NANOVNA_STM32_F303/board.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/NANOVNA_STM32_F303/board.h b/NANOVNA_STM32_F303/board.h index 663ecf2..df08598 100644 --- a/NANOVNA_STM32_F303/board.h +++ b/NANOVNA_STM32_F303/board.h @@ -293,9 +293,9 @@ #define VAL_GPIOB_OSPEEDR (PIN_OSPEED_100M(GPIOB_XN) | \ PIN_OSPEED_100M(GPIOB_YN) | \ PIN_OSPEED_100M(GPIO_LCD_RESET) | \ - PIN_OSPEED_2M(GPIOB_SPI_SCLK) | \ - PIN_OSPEED_2M(GPIOB_SPI_MISO) | \ - PIN_OSPEED_2M(GPIOB_SPI_MOSI) | \ + PIN_OSPEED_100M(GPIOB_SPI_SCLK) | \ + PIN_OSPEED_100M(GPIOB_SPI_MISO) | \ + PIN_OSPEED_100M(GPIOB_SPI_MOSI) | \ PIN_OSPEED_100M(6) | \ PIN_OSPEED_100M(GPIO_SD_CD) | \ PIN_OSPEED_100M(8) | \ From f5532a6339c4811abd14891f8298ff676c75383f Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 9 Jun 2021 22:05:19 +0300 Subject: [PATCH 7/7] Lost code --- spi.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spi.h b/spi.h index ce51a72..22088a7 100644 --- a/spi.h +++ b/spi.h @@ -79,10 +79,11 @@ #define SPI_READ_16BIT(spi) *(__IO uint16_t*)(&spi->DR) #ifdef TINYSA4 -#define SPI_MODE_LCD 0x00 -#define SPI_MODE_SD_CARD 0x01 -#define SPI_MODE_SI 0x02 -#define SPI_MODE_PE 0x04 +#define SPI_MODE_LCD 0x00 +#define SPI_MODE_SD_CARD 0x01 +#define SPI_MODE_SD_CARD_LOW 0x02 +#define SPI_MODE_SI 0x03 +#define SPI_MODE_PE 0x04 void set_SPI_mode(uint16_t mode); void start_SI4432_SPI_mode(void); void stop_SI4432_SPI_mode(void);