diff --git a/README-ru.md b/README-ru.md index 55d675b..8659247 100644 --- a/README-ru.md +++ b/README-ru.md @@ -94,7 +94,7 @@ LCD имеет разную разводку сегментов в зависи | 1.7 | | | 1.8 | | | 1.9 | | -| 2.0beta | | +| 2.0beta2 | | ## Прошивка diff --git a/README.md b/README.md index f5b31d5..d235870 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ The sensors are detected automatically, but have different ports depending on th | 1.7 | | | 1.8 | | | 1.9 | | -| 2.0beta | | +| 2.0beta2 | | ## Firmware diff --git a/bthome_phy6222/Makefile b/bthome_phy6222/Makefile index 8896f3a..4c0abba 100644 --- a/bthome_phy6222/Makefile +++ b/bthome_phy6222/Makefile @@ -2,7 +2,7 @@ PROJECT_NAME ?= bthome_phy6222 #POJECT_DEF ?= -DDEVICE=DEVICE_THB2 ############################################################################## -COM_PORT = COM11 +COM_PORT = COM5 ############################################################################## # Source SRC_PATH = ./source diff --git a/bthome_phy6222/SDK/components/driver/pwrmgr/pwrmgr.c b/bthome_phy6222/SDK/components/driver/pwrmgr/pwrmgr.c index 5fc8932..8ae3a19 100644 --- a/bthome_phy6222/SDK/components/driver/pwrmgr/pwrmgr.c +++ b/bthome_phy6222/SDK/components/driver/pwrmgr/pwrmgr.c @@ -460,9 +460,10 @@ void hal_pwrmgr_poweroff(pwroff_cfg_t* pcfg, uint8_t wakeup_pin_num) config reset casue as RSTC_OFF_MODE reset path walkaround dwc */ + AON_CLEAR_XTAL_TRACKING_AND_CALIB; AP_AON->SLEEP_R[0] = 2; - enter_sleep_off_mode(SYSTEM_OFF_MODE); + enter_sleep_off_mode(SYSTEM_OFF_MODE); // = write_reg(0x4000f000, 0x5a5aa5a5) - enter system off mode while(1); } diff --git a/bthome_phy6222/SDK/components/inc/version.h b/bthome_phy6222/SDK/components/inc/version.h index 49b023a..6ada2f2 100644 --- a/bthome_phy6222/SDK/components/inc/version.h +++ b/bthome_phy6222/SDK/components/inc/version.h @@ -9,6 +9,8 @@ #ifndef __SDK_VER_H__ #define __SDK_VER_H__ +//#include "config.h" + #define __DEF_CHIP_QFN32__ (0x0001) #define __DEF_CHIP_TSOP16__ (0x0002) #define SDK_VER_MAJOR 3 @@ -16,7 +18,9 @@ #define SDK_VER_REVISION 1 #define SDK_SUB_CODE 2 #define SDK_VER_RELEASE_ID ((SDK_VER_MAJOR<<24)|(SDK_VER_MINOR<<16)|(SDK_VER_REVISION<<8)|(SDK_SUB_CODE<<0)) +#ifndef SDK_VER_CHIP #define SDK_VER_CHIP __DEF_CHIP_QFN32__ // __DEF_CHIP_TSOP16__ +#endif //#define SDK_VER_TEST_BUILD "" #endif diff --git a/bthome_phy6222/mk_windows.cmd b/bthome_phy6222/mk_windows.cmd index 6b0ad94..f0f3858 100644 --- a/bthome_phy6222/mk_windows.cmd +++ b/bthome_phy6222/mk_windows.cmd @@ -51,6 +51,13 @@ @if not exist "build\THB3%SWVER%.hex" goto :error @copy "build\THB3%SWVER%.bin" .\bin @ +@del /Q "build\KEY2%SWVER%.hex" +@del /Q "build\KEY2%SWVER%.bin" +@make -s clean +@make -s -j PROJECT_NAME=KEY2%SWVER% POJECT_DEF="-DDEVICE=DEVICE_KEY2" +@if not exist "build\KEY2%SWVER%.hex" goto :error +@copy "build\KEY2%SWVER%.bin" .\bin +@ @del /Q "build\BOOT_THB2%SWVER%.hex" @make -s clean @make -s -j PROJECT_NAME=BOOT_THB2%SWVER% BOOT_OTA=1 POJECT_DEF="-DDEVICE=DEVICE_THB2" @@ -99,6 +106,13 @@ @if not exist "build\BOOT_THB3%SWVER%.hex" goto :error @copy "build\BOOT_THB3%SWVER%.hex" .\bin @copy "build\BOOT_THB3%SWVER%.bin" .\boot +@ +@del /Q "build\BOOT_KEY2%SWVER%.hex" +@make -s clean +@make -s -j PROJECT_NAME=BOOT_KEY2%SWVER% BOOT_OTA=1 POJECT_DEF="-DDEVICE=DEVICE_KEY2" +@if not exist "build\BOOT_KEY2%SWVER%.hex" goto :error +@copy "build\BOOT_KEY2%SWVER%.hex" .\bin +@copy "build\BOOT_KEY2%SWVER%.bin" .\boot @exit :error @echo "Error!" \ No newline at end of file diff --git a/bthome_phy6222/ota_upboot.add b/bthome_phy6222/ota_upboot.add index ce77bf4..ec7ae8d 100644 Binary files a/bthome_phy6222/ota_upboot.add and b/bthome_phy6222/ota_upboot.add differ diff --git a/bthome_phy6222/source/battery.c b/bthome_phy6222/source/battery.c index 4acd447..19261d8 100644 --- a/bthome_phy6222/source/battery.c +++ b/bthome_phy6222/source/battery.c @@ -76,7 +76,7 @@ void __attribute__((used)) hal_ADC_IRQHandler(void) { #endif adv_wrk.new_battery = 1; // new battery #if ((DEV_SERVICES & SERVICE_THS) == 0) - measured_data.count++; +// measured_data.count++; #endif hal_pwrmgr_unlock(MOD_ADCC); @@ -161,13 +161,38 @@ static void init_adc_batt(void) { #endif } +void low_vbat(void) { +#if (DEV_SERVICES & SERVICE_BUTTON) + pwroff_cfg_t pwr_wkp_cfg[]= { +#if (DEV_SERVICES & SERVICE_BUTTON) + { GPIO_KEY, KEY_PRESSED, 0 }, +#endif +//#if (DEV_SERVICES & SERVICE_RDS) +// { GPIO_INP, POL_FALLING, 0 } +//#endif + }; + // 0.48 uA at 3.0V + hal_pwrmgr_poweroff( pwr_wkp_cfg, sizeof(pwr_wkp_cfg)/sizeof(pwr_wkp_cfg[0]) ); +#else + // 1.67 uA at 3.0V + hal_pwrmgr_enter_sleep_rtc_reset((60*60)<<15); // 60 minutes +#endif + +} + + void check_battery(void) { uint32_t i; uint32_t summ; if(bat_average.battery_mv == 0) return; - //if (bat_average.battery_mv < 2000) // It is not recommended to write Flash below 2V - // low_vbat(); // TODO +#if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT + if (bat_average.battery_mv < 2000) // It is not recommended to write Flash below 2V + low_vbat(); +#else + if (bat_average.battery_mv < 1900) + low_vbat(); +#endif if(bat_average.buf1[0] == 0) { for(i = 0; i < BAT_AVERAGE1_COUNT; i++) bat_average.buf1[i] = bat_average.battery_mv; diff --git a/bthome_phy6222/source/bthome_beacon.c b/bthome_phy6222/source/bthome_beacon.c index 9c94471..2c28986 100644 --- a/bthome_phy6222/source/bthome_beacon.c +++ b/bthome_phy6222/source/bthome_beacon.c @@ -86,6 +86,12 @@ uint8_t adv_set_data(void * pd) { p->battery_level = measured_data.battery; p->v_id = BtHomeID_voltage; p->battery_mv = measured_data.battery_mv; // x mV +#if (DEV_SERVICES & SERVICE_BUTTON) + p->u_id = BtHomeID_button; + p->button = measured_data.button; + p->c_id = BtHomeID_count32; + p->counter = adv_wrk.rds_count; +#endif return sizeof(adv_bthome_data2_t); } @@ -100,6 +106,15 @@ uint8_t adv_set_event(void * ped) { p->counter = adv_wrk.rds_count; return sizeof(adv_bthome_event1_t); } +#elif (DEV_SERVICES & SERVICE_BUTTON) +uint8_t adv_set_event(void * ped) { + padv_bthome_event1_t p = (padv_bthome_event1_t)ped; + p->b_id = BtHomeID_button; + p->button = measured_data.button; + p->c_id = BtHomeID_count32; + p->counter = adv_wrk.rds_count; + return sizeof(adv_bthome_event1_t); +} #endif uint8_t bthome_data_beacon(void * padbuf) { @@ -121,7 +136,7 @@ uint8_t bthome_data_beacon(void * padbuf) { if (cfg.flg & FLG_ADV_CRYPT) { padv_bthome_encrypt_t pe = (padv_bthome_encrypt_t)p; pe->info = BtHomeID_Info_Encrypt; -#if (DEV_SERVICES & SERVICE_RDS) +#if (DEV_SERVICES & (SERVICE_RDS | SERVICE_BUTTON)) if(adv_wrk.adv_event) { p->head.size = adv_encrypt(pe->data, adv_set_event(pe->data)) + sizeof(pe->head) - sizeof(pe->head.size) + sizeof(pe->info); } else @@ -135,11 +150,11 @@ uint8_t bthome_data_beacon(void * padbuf) { p->info = BtHomeID_Info; p->p_id = BtHomeID_PacketId; p->pid = (uint8)measured_data.count; - #if (DEV_SERVICES & SERVICE_RDS) +#if (DEV_SERVICES & (SERVICE_RDS | SERVICE_BUTTON)) if(adv_wrk.adv_event) { p->head.size = adv_set_event(p->data) + sizeof(p->head) - sizeof(p->head.size) + sizeof(p->info) + sizeof(p->p_id) + sizeof(p->pid); } else - #endif +#endif { p->head.size = adv_set_data(p->data) + sizeof(p->head) - sizeof(p->head.size) + sizeof(p->info) + sizeof(p->p_id) + sizeof(p->pid); } diff --git a/bthome_phy6222/source/bthome_beacon.h b/bthome_phy6222/source/bthome_beacon.h index 7709e93..11e9995 100644 --- a/bthome_phy6222/source/bthome_beacon.h +++ b/bthome_phy6222/source/bthome_beacon.h @@ -126,15 +126,27 @@ typedef struct __attribute__((packed)) _adv_bthome_data2_t { uint8 battery_level; // 0..100 % uint8 v_id; // = BtHomeID_voltage uint16 battery_mv; // x 0.001 V +#if (DEV_SERVICES & SERVICE_BUTTON) + uint8_t u_id; // = BtHomeID_button ? + uint8_t button; // =1 press, =2 double_press ... https://bthome.io/format/ + uint8_t c_id; // = BtHomeID_count32 + uint32_t counter; +#endif } adv_bthome_data2_t, * padv_bthome_data2_t; // size: 5 typedef struct __attribute__((packed)) _adv_bthome_event1_t { +#if (DEV_SERVICES & SERVICE_RDS) uint8_t o_id; // = BtHomeID_opened ? uint8_t opened; +#elif (DEV_SERVICES & SERVICE_BUTTON) + uint8_t b_id; // = BtHomeID_button ? + uint8_t button; // =1 press, =2 double_press ... https://bthome.io/format/ +#endif uint8_t c_id; // = BtHomeID_count32 uint32_t counter; } adv_bthome_event1_t, * padv_bthome_event1_t; // size: 7 + // BTHOME data1, no security typedef struct __attribute__((packed)) _adv_bthome_ns1_t { uint8 flag[3]; // Advertise type flags diff --git a/bthome_phy6222/source/cmd_parser.h b/bthome_phy6222/source/cmd_parser.h index 197b6a3..97169b5 100644 --- a/bthome_phy6222/source/cmd_parser.h +++ b/bthome_phy6222/source/cmd_parser.h @@ -28,7 +28,7 @@ typedef enum { CMD_ID_FLASH_ID = 0x06, // Get Flash JEDEC ID CMD_ID_SERIAL = 0x07, // Get serial string CMD_ID_DEV_MAC = 0x10, // Get/Set MAC [+RandMAC], [size] - CMD_ID_FIX_MAC = 0x11, // Fixed MAC (не безопасная операция, переписывает сектор 0x1000 Flash) + CMD_ID_FIX_MAC = 0x11, // Fixed MAC (не безопасная операция, переписывает сектор 0x0 Flash) CMD_ID_BKEY = 0x18, // Get/Set beacon bindkey in EEP CMD_ID_COMFORT = 0x20, // Get/Set comfort parameters CMD_ID_EXTDATA = 0x22, // Get/Set show ext. data diff --git a/bthome_phy6222/source/config.h b/bthome_phy6222/source/config.h index be5a7b8..5ca65a6 100644 --- a/bthome_phy6222/source/config.h +++ b/bthome_phy6222/source/config.h @@ -43,9 +43,10 @@ #define DEVICE_TH05D 24 // TH05_V1.3 #define DEVICE_TH05F 25 // TH05Y_V1.2 #define DEVICE_THB3 26 +#define DEVICE_KEY2 30 #ifndef DEVICE -#define DEVICE DEVICE_THB3 +#define DEVICE DEVICE_KEY2 #endif // supported services by the device (bits) @@ -61,10 +62,16 @@ #define SERVICE_KEY 0x00000200 // есть кнопка #define SERVICE_OUTS 0x00000400 // пока нет // есть обслуживние выходных пинов #define SERVICE_INS 0x00000800 // пока нет // есть обслуживние входных пинов -#define SERVICE_TIME_ADJUST 0x00001000 // пока нет // есть функция коррекции счета времени +//#define SERVICE_TIME_ADJUST 0x00001000 // пока нет // есть функция коррекции счета времени #define SERVICE_HARD_CLOCK 0x00002000 // пока нет // есть реальные часы RTC #define SERVICE_TH_TRG 0x00004000 // триггер по температуре и влажности #define SERVICE_LED 0x00008000 // use led +//#define SERVICE_MI_KEYS 0x00010000 // use mi keys (не используется) +//#define SERVICE_PRESSURE 0x00020000 // pressure sensor (пока нет реализации) +//#define SERVICE_18B20 0x00040000 // use sensor(s) MY18B20 (пока нет реализации) +//#define SERVICE_IUS 0x00080000 // use I and U sensor (INA226) (пока нет реализации) +//#define SERVICE_PLM 0x00100000 // use PWM-RH and NTC (пока нет реализации) +#define SERVICE_BUTTON 0x00200000 // кнопка, активность только при нажатии #define OTA_TYPE_NONE 0 // нет OTA, только переключение из APP на boot прошивку #define OTA_TYPE_BOOT SERVICE_OTA // вариант для прошивки boot + OTA @@ -105,6 +112,7 @@ #define I2C_SDA GPIO_P18 #define I2C_SCL GPIO_P20 #define GPIO_KEY GPIO_P07 +#define KEY_PRESSED 0 #define GPIO_LED GPIO_P26 #define LED_ON 0 #define LED_OFF 1 @@ -142,6 +150,7 @@ #define I2C_SCL GPIO_P34 // SCL #define GPIO_SPWR GPIO_P00 // питание сенсора #define GPIO_KEY GPIO_P14 +#define KEY_PRESSED 0 #define GPIO_LED GPIO_P15 #define LED_ON 1 #define LED_OFF 0 @@ -188,6 +197,7 @@ #define GPIO_SPWR GPIO_P00 // питание сенсора #define GPIO_KEY GPIO_P14 +#define KEY_PRESSED 0 #define GPIO_LPWR GPIO_P02 // питание LCD драйвера #define GPIO_TRG GPIO_P20 // mark TX2 @@ -235,6 +245,7 @@ #define I2C_LCD_SCL GPIO_P33 // SCL #define GPIO_KEY GPIO_P01 +#define KEY_PRESSED 0 #define GPIO_TRG GPIO_P09 // mark TX #define GPIO_INP GPIO_P10 // mark RX @@ -286,6 +297,7 @@ #define I2C_LCD_SCL GPIO_P14 // SCL #define GPIO_KEY GPIO_P02 +#define KEY_PRESSED 0 #define GPIO_TRG GPIO_P09 // mark TX #define GPIO_INP GPIO_P10 // mark RX @@ -333,6 +345,7 @@ #define GPIO_SPWR GPIO_P00 // питание сенсора #define GPIO_KEY GPIO_P14 +#define KEY_PRESSED 0 #define GPIO_LPWR GPIO_P02 // питание LCD драйвера #define GPIO_TRG GPIO_P20 // mark TX2 @@ -342,6 +355,41 @@ #define DEF_HARDWARE_REVISION "0019" #define DEF_MANUFACTURE_NAME_STR "Tuya" +#elif DEVICE == DEVICE_KEY2 +/* Model: iSearch ver2 ST17H66 (TSSOP16) */ +#define SDK_VER_CHIP __DEF_CHIP_TSOP16__ + +#if OTA_TYPE == OTA_TYPE_BOOT +#define DEV_SERVICES (OTA_TYPE \ + | SERVICE_BUTTON \ + | SERVICE_BINDKEY \ +) +#else +#define DEV_SERVICES (OTA_TYPE \ + | SERVICE_BUTTON \ + | SERVICE_BINDKEY \ +) +#endif + +#define ADC_PIN_USE_OUT 1 // hal_gpio_write(ADC_PIN, 1); +#define ADC_PIN GPIO_P11 +#define ADC_VBAT_CHL VBAT_ADC_P11 + +#define GPIO_KEY GPIO_P15 +#define KEY_PRESSED 1 +#define GPIO_LED GPIO_P03 +#define LED_ON 1 +#define LED_OFF 0 + +#define GPIO_BUZZER GPIO_P09 + +//#define GPIO_INP GPIO_P15 + +#define DEF_MODEL_NUMBER_STR "KEY" +#define DEF_HARDWARE_REVISION "0020" +#define DEF_MANUFACTURE_NAME_STR "DIY" + + #else #error "DEVICE Not released!" #endif @@ -386,14 +434,14 @@ extern const cfg_t def_cfg; typedef struct _adv_work_t { uint32_t measure_interval_ms; uint32_t measure_batt_tik; -#if (DEV_SERVICES & SERVICE_RDS) - uint32_t rds_timer_tik; - uint32_t rds_count; +#if (DEV_SERVICES & (SERVICE_RDS | SERVICE_BUTTON)) + uint32_t rds_timer_tik; // rds & button time tik (in 32768 Hz) + uint32_t rds_count; // rds & button count #endif - uint8_t meas_count; - uint8_t adv_reload_count; - uint8_t new_battery; // new battery - uint8_t adv_event; // rds event + uint8_t meas_count; // счет до нового измерения в кол-ве вызовов adv_measure() + uint8_t adv_reload_count; // кол-во передач рекламы до перехода к новому типу и установкам рекламы + uint8_t new_battery; // flag: new battery + uint8_t adv_event; // flag: rds event } adv_work_t; extern adv_work_t adv_wrk; diff --git a/bthome_phy6222/source/flash_eep.h b/bthome_phy6222/source/flash_eep.h index 3ec7364..f26edb8 100644 --- a/bthome_phy6222/source/flash_eep.h +++ b/bthome_phy6222/source/flash_eep.h @@ -35,7 +35,7 @@ extern "C" { #endif #define FMEMORY_SCFG_BANK_SIZE FLASH_SECTOR_SIZE // размер сектора, 4096 bytes #define FMEMORY_SCFG_BANKS 4 // кол-во секторов для работы - min 2 -#define FMEMORY_SCFG_BASE_ADDR (FLASH_SIZE - (FMEMORY_SCFG_BANKS*FMEMORY_SCFG_BANK_SIZE)) // 0x7C000 +#define FMEMORY_SCFG_BASE_ADDR (FLASH_SIZE - (FMEMORY_SCFG_BANKS*FMEMORY_SCFG_BANK_SIZE)) // 0xFC000, 0x7C000, 0x3C000 //----------------------------------------------------------------------------- enum eFMEMORY_ERRORS { FMEM_NOT_FOUND = -1, // -1 - не найден diff --git a/bthome_phy6222/source/main.c b/bthome_phy6222/source/main.c index 9462ec3..ba20b71 100644 --- a/bthome_phy6222/source/main.c +++ b/bthome_phy6222/source/main.c @@ -108,7 +108,6 @@ volatile sysclk_t g_spif_clk_config; static void hal_low_power_io_init(void) { //========= disable all gpio pullup/down to preserve juice const ioinit_cfg_t ioInit[] = { -#if(SDK_VER_CHIP == __DEF_CHIP_QFN32__) #if DEVICE == DEVICE_THB2 { GPIO_P00, GPIO_PULL_DOWN }, { GPIO_P01, GPIO_PULL_DOWN }, @@ -295,22 +294,24 @@ const ioinit_cfg_t ioInit[] = { { GPIO_P32, GPIO_PULL_DOWN }, { GPIO_P33, GPIO_FLOATING }, // CHT8305 SDA { GPIO_P34, GPIO_FLOATING } // CHT8305 SCL +#elif (DEVICE == DEVICE_KEY2) + { GPIO_P02, GPIO_FLOATING }, // connect to +Vbat ? +#ifdef GPIO_LED + { GPIO_P03, GPIO_FLOATING }, // LED - GPIO_LED +#else + { GPIO_P03, GPIO_PULL_DOWN }, +#endif + { GPIO_P07, GPIO_PULL_DOWN }, // mark "SWS" + { GPIO_P09, GPIO_PULL_DOWN }, // TX Buzzer + { GPIO_P10, GPIO_PULL_DOWN}, // GPIO_PULL_UP }, // RX + { GPIO_P11, GPIO_PULL_UP }, // ADC Vbat + { GPIO_P14, GPIO_PULL_DOWN }, // PN8 ? + { GPIO_P15, GPIO_PULL_DOWN }, // KEY + { GPIO_P18, GPIO_PULL_DOWN }, // PN10 ? + { GPIO_P20, GPIO_FLOATING }, // connect to GND + { GPIO_P34, GPIO_FLOATING } // connect to +Vbat #else #error "DEVICE Not released!" -#endif -#else - {GPIO_P02, GPIO_FLOATING }, - {GPIO_P03, GPIO_FLOATING }, - {GPIO_P07, GPIO_FLOATING }, - {GPIO_P09, GPIO_FLOATING }, - {GPIO_P10, GPIO_FLOATING }, - {GPIO_P11, GPIO_FLOATING }, - {GPIO_P14, GPIO_FLOATING }, - {GPIO_P15, GPIO_FLOATING }, - {GPIO_P18, GPIO_FLOATING }, - {GPIO_P20, GPIO_FLOATING }, - {GPIO_P34, GPIO_FLOATING }, - #endif }; @@ -323,7 +324,9 @@ const ioinit_cfg_t ioInit[] = { #ifdef GPIO_LED hal_gpio_write(GPIO_LED, LED_ON); #endif +//#if SDK_VER_CHIP == __DEF_CHIP_TSOP16__ DCDC_CONFIG_SETTING(0x0a); +//#endif DCDC_REF_CLK_SETTING(1); DIG_LDO_CURRENT_SETTING(1); #if defined ( __GNUC__ ) @@ -440,9 +443,9 @@ int main(void) { #endif wrk.boot_flg = (uint8_t)read_reg(OTA_MODE_SELECT_REG); #if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT -#if (DEV_SERVICES & SERVICE_KEY) +#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON)) hal_gpio_pin_init(GPIO_KEY, GPIO_INPUT); - if (hal_gpio_read(GPIO_KEY) == 0 + if (hal_gpio_read(GPIO_KEY) == KEY_PRESSED || wrk.boot_flg == BOOT_FLG_OTA || wrk.boot_flg == BOOT_FLG_FW0) { #else diff --git a/bthome_phy6222/source/sensors.h b/bthome_phy6222/source/sensors.h index 6d7c697..bbb01db 100644 --- a/bthome_phy6222/source/sensors.h +++ b/bthome_phy6222/source/sensors.h @@ -224,6 +224,7 @@ typedef struct _measured_data_t { uint16_t battery_mv; // mV uint8_t battery; // 0..100 % measured_flg_t flg; + uint8_t button; } measured_data_t; #define send_len_measured_data 5 diff --git a/bthome_phy6222/source/thb2_main.c b/bthome_phy6222/source/thb2_main.c index 25469a1..5e92ebf 100644 --- a/bthome_phy6222/source/thb2_main.c +++ b/bthome_phy6222/source/thb2_main.c @@ -222,12 +222,12 @@ static void adv_measure(void) { get_utc_time_sec(); // счет UTC timestamp #if (DEV_SERVICES & SERVICE_RDS) if(!adv_wrk.adv_event) { - if(clkt.utc_time_tik - adv_wrk.rds_timer_tik >= (RDS_STEP_TIMER_SEC << 15)) { + if(clkt.utc_time_tik - adv_wrk.rds_timer_tik >= (RDS_EVENT_STEP_SEC << 15)) { // шаг дублирования передачи 30 минут adv_wrk.rds_timer_tik = clkt.utc_time_tik; adv_wrk.adv_event = 1; - adv_wrk.adv_reload_count = RDS_RETRY_ADV_COUNT; + adv_wrk.adv_reload_count = RDS_EVENT_ADV_COUNT; // 16 LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData); - set_new_adv_interval(DEF_EVENT_ADV_INERVAL); // actual time * 625us + set_new_adv_interval(DEF_EVENT_ADV_INERVAL); // 50 ms (in 625us) return; } #endif @@ -239,6 +239,9 @@ static void adv_measure(void) { if(adv_wrk.new_battery) { adv_wrk.new_battery = 0; check_battery(); +#if (DEV_SERVICES & SERVICE_THS) == 0 + measured_data.count++; +#endif #if (DEV_SERVICES & SERVICE_SCREEN) chow_lcd(1); #endif @@ -263,7 +266,7 @@ static void adv_measure(void) { } else { if(adv_wrk.meas_count >= cfg.measure_interval) { adv_wrk.meas_count = 0; - read_sensors(); + read_sensors(); // measured_data.count++ if(adv_wrk.new_battery) { adv_wrk.new_battery = 0; check_battery(); @@ -288,12 +291,38 @@ static void adv_measure(void) { #endif if(adv_wrk.adv_reload_count) { if(--adv_wrk.adv_reload_count == 0) { + // восстановление/переключение типа и интервалов рекламы #if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT if (wrk.boot_flg == BOOT_FLG_OTA) { hal_system_soft_reset(); } #endif - if(adv_wrk.adv_event) { +#if (DEV_SERVICES & SERVICE_BUTTON) + if(adv_wrk.adv_event) { // передавались event ? + adv_wrk.adv_reload_count = RDS_EVENT_ADV_COUNT; + if(!measured_data.button) { + if(adv_wrk.new_battery) { + adv_wrk.new_battery = 0; + check_battery(); + } + measured_data.count++; + LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData); + adv_wrk.adv_event = 0; + set_new_adv_interval(DEF_EVENT_ADV_INERVAL); + } + } else { + // восстановление пользовательского (основного) интервала передачи рекламы + if(adv_wrk.new_battery) { + adv_wrk.new_battery = 0; + check_battery(); + } + measured_data.count++; + LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData); + set_new_adv_interval(cfg.advertising_interval * 100); + } +#else + if(adv_wrk.adv_event) { // передавались event ? + // восстановление пользовательского (основного) интервала передачи рекламы после цикла передач event adv_wrk.adv_event = 0; if(adv_wrk.new_battery) { adv_wrk.new_battery = 0; @@ -302,14 +331,16 @@ static void adv_measure(void) { measured_data.count++; LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData); } + // восстановление пользовательского (основного) интервала передачи рекламы set_new_adv_interval(cfg.advertising_interval * 100); +#endif } } adv_wrk.meas_count++; } } -#if (DEV_SERVICES & SERVICE_KEY) || (DEV_SERVICES & SERVICE_RDS) +#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_RDS | SERVICE_BUTTON)) /********************************************************************* * LED and Key */ @@ -319,15 +350,24 @@ static void posedge_int_wakeup_cb(GPIO_Pin_e pin, IO_Wakeup_Pol_e type) if(type == POSEDGE) { LOG("int or wakeup(pos):gpio:%d type:%d\n", pin, type); -#if (DEV_SERVICES & SERVICE_KEY) +#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON)) if(pin == GPIO_KEY) { -#ifdef GPIO_LED + #ifdef GPIO_LED + #if KEY_PRESSED + hal_gpio_write(GPIO_LED, LED_ON); + #else hal_gpio_write(GPIO_LED, LED_OFF); -#endif + #endif + #endif + #if (DEV_SERVICES & SERVICE_KEY) && KEY_PRESSED if(gapRole_AdvEnabled) { adv_wrk.adv_reload_count = 60000/DEF_CON_ADV_INERVAL_MS; // 60 sec set_new_adv_interval(DEF_CON_ADV_INERVAL); // actual time * 625us } + #endif + #if (DEV_SERVICES & SERVICE_BUTTON) + osal_set_event(simpleBLEPeripheral_TaskID, PIN_INPUT_EVT); + #endif } #endif #if (DEV_SERVICES & SERVICE_RDS) @@ -348,13 +388,26 @@ static void negedge_int_wakeup_cb(GPIO_Pin_e pin, IO_Wakeup_Pol_e type) if(type == NEGEDGE) { LOG("int or wakeup(neg):gpio:%d type:%d\n", pin, type); -#if (DEV_SERVICES & SERVICE_KEY) +#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON)) if(pin == GPIO_KEY) { -#ifdef GPIO_LED + #ifdef GPIO_LED + #if KEY_PRESSED + hal_gpio_write(GPIO_LED, LED_OFF); + #else hal_gpio_write(GPIO_LED, LED_ON); -#endif + #endif // KEY_PRESSED + #endif // GPIO_LED + #if (DEV_SERVICES & SERVICE_KEY) && (KEY_PRESSED == 0) + if(gapRole_AdvEnabled) { + adv_wrk.adv_reload_count = 60000/DEF_CON_ADV_INERVAL_MS; // 60 sec + set_new_adv_interval(DEF_CON_ADV_INERVAL); // actual time * 625us + } + #endif // (DEV_SERVICES & SERVICE_KEY) + #if (DEV_SERVICES & SERVICE_BUTTON) + osal_set_event(simpleBLEPeripheral_TaskID, PIN_INPUT_EVT); + #endif } -#endif +#endif // (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON)) #if (DEV_SERVICES & SERVICE_RDS) if(pin == GPIO_INP) { osal_set_event(simpleBLEPeripheral_TaskID, PIN_INPUT_EVT); @@ -366,11 +419,11 @@ static void negedge_int_wakeup_cb(GPIO_Pin_e pin, IO_Wakeup_Pol_e type) LOG("error\n"); } } -#endif // (DEV_SERVICES & SERVICE_KEY) +#endif // (DEV_SERVICES & (SERVICE_KEY | SERVICE_RDS | SERVICE_BUTTON)) static void init_app_gpio(void) { -#if (DEV_SERVICES & SERVICE_KEY) +#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON)) hal_gpioin_register(GPIO_KEY, posedge_int_wakeup_cb, negedge_int_wakeup_cb); #endif #ifdef GPIO_LED @@ -576,8 +629,8 @@ void SimpleBLEPeripheral_Init( uint8_t task_id ) LL_PLUS_PerStats_Init(&g_perStatsByChanTest); batt_start_measure(); -#if (DEV_SERVICES & SERVICE_RDS) - adv_wrk.rds_timer_tik = clkt.utc_time_tik - (RDS_RETRY_START_SEC << 15); +#if (DEV_SERVICES & (SERVICE_RDS | SERVICE_BUTTON)) + adv_wrk.rds_timer_tik = clkt.utc_time_tik - (RDS_EVENT_START_SEC << 15); #endif LOG("=====SimpleBLEPeripheral_Init Done=======\n"); @@ -636,7 +689,7 @@ uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events ) adv_wrk.measure_batt_tik = clkt.utc_time_tik; batt_start_measure(); } - read_sensors(); + read_sensors(); // measured_data.count++; start_measure(); #if (DEV_SERVICES & SERVICE_SCREEN) chow_lcd(1); @@ -690,9 +743,24 @@ uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events ) // return unprocessed events return ( events ^ SBP_START_DEVICE_EVT ); } -#if (DEV_SERVICES & SERVICE_RDS) +#if (DEV_SERVICES & (SERVICE_RDS | SERVICE_BUTTON)) if(events & PIN_INPUT_EVT) { int ev = 0; +#if (DEV_SERVICES & SERVICE_BUTTON) + if(hal_gpio_read(GPIO_KEY) == KEY_PRESSED) { + if(!measured_data.flg.pin_input) { + adv_wrk.rds_count++; + measured_data.button = 1; // press + ev = 1; + } + measured_data.flg.pin_input = 1; + } else { +// if(measured_data.flg.pin_input) +// ev = 1; + measured_data.flg.pin_input = 0; + measured_data.button = 0; // None + } +#else if(hal_gpio_read(GPIO_INP)) { if(!measured_data.flg.pin_input) { adv_wrk.rds_count++; @@ -704,12 +772,13 @@ uint16_t BLEPeripheral_ProcessEvent( uint8_t task_id, uint16_t events ) ev = 1; measured_data.flg.pin_input = 0; } +#endif if(ev) { if(gapRole_AdvEnabled) { measured_data.count++; adv_wrk.adv_event = 1; - adv_wrk.adv_reload_count = RDS_RETRY_ADV_COUNT; - adv_wrk.rds_timer_tik = clkt.utc_time_tik - (RDS_RETRY_DOUBLE_SEC << 15); + adv_wrk.adv_reload_count = RDS_EVENT_ADV_COUNT; + adv_wrk.rds_timer_tik = clkt.utc_time_tik - (RDS_EVENT_DOUBLE_SEC << 15); LL_SetAdvData(bthome_data_beacon((void *) gapRole_AdvertData), gapRole_AdvertData); set_new_adv_interval(DEF_EVENT_ADV_INERVAL); // 50ms, actual time * 625us } else if(cfg.flg & FLG_MEAS_NOTIFY) { diff --git a/bthome_phy6222/source/thb2_main.h b/bthome_phy6222/source/thb2_main.h index 7bb2573..ee983b5 100644 --- a/bthome_phy6222/source/thb2_main.h +++ b/bthome_phy6222/source/thb2_main.h @@ -28,16 +28,21 @@ extern "C" #define DEF_ADV_INERVAL_MS ((DEF_ADV_INERVAL*625)/1000) // 5000 ms #define DEF_CON_ADV_INERVAL 2500 // 1.5625 sec #define DEF_CON_ADV_INERVAL_MS ((DEF_CON_ADV_INERVAL*625)/1000) // 1562 ms -#define DEF_EVENT_ADV_INERVAL 80 // 50 ms +#if (DEV_SERVICES & SERVICE_BUTTON) +#define DEF_EVENT_ADV_INERVAL 120 // 75 ms +#define RDS_EVENT_ADV_COUNT 16 // 16*75 = 1200 ms +#else +#define DEF_EVENT_ADV_INERVAL 80 // 50 ms +#define RDS_EVENT_ADV_COUNT 16 // 16*50 = 800 ms +#endif #define DEF_EVENT_ADV_INERVAL_MS ((DEF_EVENT_ADV_INERVAL*625)/1000) // 50 ms #define DEF_OTA_ADV_INERVAL 1600 // 1 sec #define DEF_OTA_ADV_INERVAL_MS ((DEF_OTA_ADV_INERVAL*625)/1000) // 1000 ms // adv. event -#define RDS_STEP_TIMER_SEC 1800 // шаг передачи 30 минут -#define RDS_RETRY_DOUBLE_SEC (RDS_STEP_TIMER_SEC-12) // дубль через 12 сек -#define RDS_RETRY_START_SEC (RDS_STEP_TIMER_SEC-120) // старт 2 минуты -#define RDS_RETRY_ADV_COUNT 16 +#define RDS_EVENT_STEP_SEC 1800 // шаг передачи (дублирование состояния) RDS 30 минут без событий +#define RDS_EVENT_DOUBLE_SEC (RDS_EVENT_STEP_SEC - 12) // передача (дублирование состояния) RDS через 12 сек после события +#define RDS_EVENT_START_SEC (RDS_EVENT_STEP_SEC - 120) // передача (дублирование состояния) RDS от старта питания - 2 минуты // How often to perform periodic event #define SBP_PERIODIC_EVT_PERIOD 5000 diff --git a/ota_boot/ota_upboot.add b/ota_boot/ota_upboot.add index ce77bf4..ec7ae8d 100644 Binary files a/ota_boot/ota_upboot.add and b/ota_boot/ota_upboot.add differ diff --git a/ota_boot/rdwr_phy62x2.py b/ota_boot/rdwr_phy62x2.py index e2447de..8163d6c 100644 --- a/ota_boot/rdwr_phy62x2.py +++ b/ota_boot/rdwr_phy62x2.py @@ -2,8 +2,8 @@ # rdwr_phy62x2.py 11.01.2024 pvvx # -import serial; -import time; +import serial +import time import argparse import io import os @@ -88,15 +88,15 @@ class phyflasher: self.hexf.sec.extend(bytearray(struct.pack('>:' def SendResetCmd(self): - return self._port.write(str.encode('reset ')); + return self._port.write(str.encode('reset ')) def read_reg(self, addr): - pkt = 'rdreg%08x' % addr; - sent = self._port.write(pkt.encode()); - read = self._port.read(17); + pkt = 'rdreg%08x' % addr + sent = self._port.write(pkt.encode()) + read = self._port.read(17) if len(read) == 17 and read[0:3] == b'=0x' and read[11:17] == b'#OK>>:': return int(read[1:11], 16) return None @@ -124,13 +124,13 @@ class phyflasher: if mbit > 0: regcmd = regcmd | 0x40000 if dummy > 0: - regcmd = regcmd | (dummy << 7); + regcmd = regcmd | (dummy << 7) if not self.write_reg(0x4000c890, regcmd | 1): print('Error write Flash Command Register!') return False return True def flash_wait_idle(self): - i = 5; + i = 5 while i > 0: r = self.read_reg(0x4000c890) if r == None: @@ -179,9 +179,9 @@ class phyflasher: return self.wr_flash_cmd(6) and self.wr_flash_cmd(1, 0, 1) def ReadRevision(self): #0x001364c8 6222M005 #OK>>: - self._port.write(str.encode('rdrev+ ')); + self._port.write(str.encode('rdrev+ ')) self._port.timeout = 0.1 - read = self._port.read(26); + read = self._port.read(26) if len(read) == 26 and read[0:2] == b'0x' and read[20:26] == b'#OK>>:': print('Revision:', read[2:19]) if read[11:15] != b'6222': @@ -196,9 +196,9 @@ class phyflasher: def SetBaud(self, baud): if self._port.baudrate != baud: print ('Reopen %s port %i baud...' % (self.port, baud), end = ' '), - self._port.write(str.encode("uarts%i" % baud)); + self._port.write(str.encode("uarts%i" % baud)) self._port.timeout = 1 - read = self._port.read(3); + read = self._port.read(3) if read == b'#OK': print ('ok') self.baud = baud @@ -227,12 +227,12 @@ class phyflasher: self._port.setDTR(False) #TM (hi) self._port.setRTS(False) #RSTN (hi) self._port.timeout = 0.04 - ttcl = 50; + ttcl = 50 fct_mode = False pkt = 'UXTDWU' # UXTL16 UDLL48 UXTDWU while ttcl > 0: - sent = self._port.write(pkt.encode()); - read = self._port.read(6); + sent = self._port.write(pkt.encode()) + read = self._port.read(6) if read == b'cmd>>:' : break if read == b'fct>>:' : @@ -317,7 +317,7 @@ class phyflasher: def cmd_erase_all_flash(self): print ('Erase All Chip Flash...', end = ' '), if self.wr_flash_cmd(6) and self.wr_flash_cmd(0x60): #Write Enable, Chip Erase - i = 77; + i = 77 while i > 0: r = self.flash_read_status() if r == None: @@ -387,7 +387,7 @@ class phyflasher: return False data = stream.read(size) self._port.write(data) - read = self._port.read(23); #'checksum is: 0x00001d1e' + read = self._port.read(23) #'checksum is: 0x00001d1e' #print ('%s' % read), if read[0:15] != b'checksum is: 0x': print ('error!') @@ -510,14 +510,14 @@ def arg_auto_int(x): def main(): parser = argparse.ArgumentParser(description='%s version %s' % (__progname__, __version__), prog = __filename__) - parser.add_argument('--port', '-p', help = 'Serial port device', default='COM1'); - parser.add_argument('--baud', '-b', help = 'Set Port Baud (115200, 250000, 500000, 1000000)', type = arg_auto_int, default = DEF_RUN_BAUD); + parser.add_argument('--port', '-p', help = 'Serial port device', default='COM1') + parser.add_argument('--baud', '-b', help = 'Set Port Baud rate (115200, 250000, 500000, 1000000)', type = arg_auto_int, default = DEF_RUN_BAUD) - parser.add_argument('--allerase', '-a', action='store_true', help = 'Pre-processing: All Chip Erase'); - parser.add_argument('--erase', '-e', action='store_true', help = 'Pre-processing: Erase Flash work area'); - parser.add_argument('--reset', '-r', action='store_true', help = 'Post-processing: Reset'); - parser.add_argument('--start', '-s', help = 'Application start address for hex writer (default: 0x%08x)' % DEF_START_RUN_APP_ADDR, type = arg_auto_int, default = DEF_START_RUN_APP_ADDR); - parser.add_argument('--write', '-w', help = 'Flash starting address for hex writer (default: 0x%08x)' % DEF_START_WR_FLASH_ADDR, type = arg_auto_int, default = DEF_START_WR_FLASH_ADDR); + parser.add_argument('--allerase', '-a', action='store_true', help = 'Pre-processing: All Chip Erase') + parser.add_argument('--erase', '-e', action='store_true', help = 'Pre-processing: Erase Flash work area') + parser.add_argument('--reset', '-r', action='store_true', help = 'Post-processing: Reset') + parser.add_argument('--start', '-s', help = 'Application start address for hex writer (default: 0x%08x)' % DEF_START_RUN_APP_ADDR, type = arg_auto_int, default = DEF_START_RUN_APP_ADDR) + parser.add_argument('--write', '-w', help = 'Flash starting address for hex writer (default: 0x%08x)' % DEF_START_WR_FLASH_ADDR, type = arg_auto_int, default = DEF_START_WR_FLASH_ADDR) subparsers = parser.add_subparsers( dest='operation', @@ -596,11 +596,11 @@ def main(): #filename = "r%08x-%08x.bin" % (addr, length) if args.size == 0: print("Read Size = 0!" ) - exit(1); + exit(1) try: ff = open(args.filename, "wb") except: - print("Error file open '%s'" % filename) + print("Error file open '%s'" % args.filename) exit(2) if not phy.ReadBusToFile(ff, args.address, args.size): ff.close() @@ -634,7 +634,7 @@ def main(): sys.exit(1) aerase = args.operation == 'we' if args.erase == True or args.allerase == True: - aerase = False; + aerase = False if args.allerase == True: if not phy.cmd_erase_all_flash(): stream.close() @@ -643,7 +643,7 @@ def main(): else: if args.erase == True: if not phy.cmd_erase_work_flash(): - stream.close + stream.close() print ('Error: Erase Flash!') sys.exit(3) phy.SetAutoErase(aerase) @@ -672,7 +672,7 @@ def main(): print ('----------------------------------------------------------') aerase = True if args.erase == True or args.allerase == True: - aerase = False; + aerase = False if args.allerase == True: if not phy.cmd_erase_all_flash(): stream.close() @@ -681,7 +681,7 @@ def main(): else: if args.erase == True: if not phy.cmd_erase_work_flash(): - stream.close + stream.close() print ('Error: Erase Flash!') sys.exit(3) phy.SetAutoErase(aerase) diff --git a/ota_boot/source/main.c b/ota_boot/source/main.c index d92c469..50b60a6 100644 --- a/ota_boot/source/main.c +++ b/ota_boot/source/main.c @@ -22,6 +22,7 @@ extern const uint32_t _ebss; ****************************************************************************/ #define WR_BLK_SIZE 256 +#define MAX_FLASH_SIZE 0x200000 /* Заголовок OTA */ typedef struct _app_info_t { @@ -45,14 +46,68 @@ app_info_seg_t seg_info; uint8_t sector_buf[WR_BLK_SIZE]; +#define SPIF_WAIT_IDLE_CYC 32 + +static void spif_status_wait_idle(void) { + while((AP_SPIF->fcmd & 0x02) == 0x02); + volatile int delay_cycle = SPIF_WAIT_IDLE_CYC; + while (delay_cycle--){}; + while ((AP_SPIF->config & 0x80000000) == 0); +} + + +#define flh_OK 0 +#define flh_ERR 1 + +static uint8_t _spif_read_status_reg_x(void) { + uint8_t status; + spif_cmd(0x05, 0, 2, 0, 0, 0); // 0x05 - read status + spif_status_wait_idle(); + spif_rddata(&status, 1); + return status; +} + +extern void WaitRTCCount(uint32_t rtcDelyCnt); + +#define SPIF_TIMEOUT (0x7ffffff)//1000000 ; // 0x40000 - 40 сек + +static int spif_wait_nobusy(uint8_t flg) { + uint8_t status; + volatile int tout = SPIF_TIMEOUT; + while(tout--) { + status = _spif_read_status_reg_x(); + if ((status & flg) == 0) + return flh_OK; + } + return flh_ERR; +} + +#define SFLG_WIP 1 +#define SFLG_WEL 2 +#define SFLG_WELWIP 3 + +void flash_erase_sector(unsigned int addr) { + spif_status_wait_idle(); + spif_wait_nobusy(SFLG_WIP); + AP_SPIF->fcmd = 0x6000001; + spif_status_wait_idle(); + spif_wait_nobusy(SFLG_WIP); + AP_SPIF->fcmd_addr = addr; + spif_cmd(0x20,3,0,0,0,0); + spif_status_wait_idle(); + spif_wait_nobusy(SFLG_WELWIP); +} + + __attribute__ ((naked)) void copy_app_code(void) { uint32_t blksize = WR_BLK_SIZE; uint32_t rfaddr = FADDR_APP_SEC + 0xfc; uint32_t dfaddr = 0; - uint32_t wfaddr = FADDR_BOOT_ROM_INFO; + uint32_t wfaddr = FADDR_BOOT_ROM_INFO + MAX_FLASH_SIZE; uint32_t count; __disable_irq(); + //*(volatile uint32_t *) 0x1fff0898 = MAX_FLASH_SIZE*2; spif_read(rfaddr, (uint8_t*)&rfaddr, 4); spif_read(rfaddr, (uint8_t*)&info_app, sizeof(info_app)); if(info_app.flag == START_UP_FLAG @@ -62,7 +117,7 @@ void copy_app_code(void) { ){ dfaddr = rfaddr + 0x100; count = info_app.seg_count; - spif_erase_sector(wfaddr); + flash_erase_sector(wfaddr); spif_write(wfaddr, (uint8_t*)&info_app.seg_count, 4); spif_write(wfaddr + 8, (uint8_t*)&info_app.start_addr, 4); wfaddr += 0x100; @@ -72,13 +127,13 @@ void copy_app_code(void) { spif_write(wfaddr, (uint8_t*)&seg_info, 12); wfaddr += 16; } - wfaddr = FADDR_OTA_SEC; + wfaddr = FADDR_OTA_SEC + MAX_FLASH_SIZE; count = info_app.app_size; while(count) { if(count < WR_BLK_SIZE) blksize = count; if((wfaddr & (FLASH_SECTOR_SIZE - 1)) == 0) - spif_erase_sector(wfaddr); + flash_erase_sector(wfaddr); spif_read(dfaddr, sector_buf, blksize); spif_write(wfaddr, sector_buf, blksize); dfaddr += blksize; diff --git a/ota_boot/source/misc/ota_upboot.ld b/ota_boot/source/misc/ota_upboot.ld index 2d3a0ee..fbe862d 100644 --- a/ota_boot/source/misc/ota_upboot.ld +++ b/ota_boot/source/misc/ota_upboot.ld @@ -81,7 +81,7 @@ SECTIONS *(.text .text.*) _etext = ABSOLUTE(.); - } > flash : xip + } > sram : xip .rodata : { *(.rodata .rodata.*) @@ -94,7 +94,7 @@ SECTIONS *(.got) *(.gcc_except_table) *(.gnu.linkonce.r.*) - } > flash : rodata + } > sram : rodata .init_section : { _sinit = ABSOLUTE(.); @@ -104,17 +104,17 @@ SECTIONS .ARM.extab : { *(.ARM.extab*) - } > flash : rodata + } > sram : rodata .ARM.exidx : { __exidx_start = ABSOLUTE(.); *(.ARM.exidx*) __exidx_end = ABSOLUTE(.); - } > flash : rodata + } > sram : rodata ._sjtblsstore : { _sjtblss = ABSOLUTE(.); - } > flash : rodata + } > sram : rodata /* Stabs debugging sections. */ .stab 0 : { *(.stab) } diff --git a/ota_boot/source/ota_boot.h b/ota_boot/source/ota_boot.h index 1d2792f..c9b918e 100644 --- a/ota_boot/source/ota_boot.h +++ b/ota_boot/source/ota_boot.h @@ -14,7 +14,7 @@ #ifndef FLASH_SECTOR_SIZE #define FLASH_SECTOR_SIZE 0x01000 // 4k (4*1024) #endif -#define FADDR_START_ADDR (0x11000000) +#define FADDR_START_ADDR (0x11000000) // FLASH_BASE_ADDR #define FADDR_BOOT_ROM_INFO (FADDR_START_ADDR + 0x02000) // 4k #define FADDR_OTA_SEC (FADDR_START_ADDR + 0x03000) // 52k #define FADDR_APP_SEC (FADDR_START_ADDR + 0x10000) // 176k (for 256k Flash)