Эх сурвалжийг харах

Рефакторинг, журнал, IAP.

TelenkovDmitry 8 сар өмнө
parent
commit
34e7f3d354

+ 49 - 49
fw/modules/modbus/update.c

@@ -1,49 +1,49 @@
-#include "at32f403a_407.h"
-#include "update.h"
-#include "common_config.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "fr_timers.h"
-#include <stdio.h>
-
-
-#define RESET_TIM_DELAY     configTICK_RATE_HZ*3 
-
-
-TimerHandle_t reset_timer_handle;
-void cb_reset_timer(TimerHandle_t timer);
-
-
-//
-void update_create_timer(void)
-{
-    reset_timer_handle = xTimerCreate("reset_timer", RESET_TIM_DELAY, 
-                                      pdFALSE, (void *)0, cb_reset_timer);
-}
-
-//
-void update_tim_start(void)
-{
-    xTimerStart(reset_timer_handle, 0); 
-}
-
-//
-void update_set_flag(uint16_t val)
-{
-    bpr_data_write(BPR_DATA1, val);
-}
-
-//
-void update_reset_boot_try(void)
-{
-    bpr_data_write(BPR_DATA2, 0);
-}
-
-//
-void cb_reset_timer(TimerHandle_t timer)
-{
-    DBG printf("Reset timer callback. Switch to IAP\r\n");
-    update_set_flag(1);
-    NVIC_SystemReset();
-    
-}
+#include "at32f403a_407.h"
+#include "update.h"
+#include "common_config.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "fr_timers.h"
+#include <stdio.h>
+
+
+#define RESET_TIM_DELAY     configTICK_RATE_HZ*3 
+
+
+TimerHandle_t reset_timer_handle;
+void cb_reset_timer(TimerHandle_t timer);
+
+
+//
+void update_create_timer(void)
+{
+    reset_timer_handle = xTimerCreate("reset_timer", RESET_TIM_DELAY, 
+                                      pdFALSE, (void *)0, cb_reset_timer);
+}
+
+//
+void update_tim_start(void)
+{
+    xTimerStart(reset_timer_handle, 0); 
+}
+
+//
+void update_set_flag(uint16_t val)
+{
+    bpr_data_write(BACKUP_IAP_LOAD_MODE, val);
+}
+
+//
+void update_reset_boot_try(void)
+{
+    bpr_data_write(BACKUP_IAP_BOOT_TRY, 0);
+}
+
+//
+void cb_reset_timer(TimerHandle_t timer)
+{
+    DBG printf("Reset timer callback. Switch to IAP\r\n");
+    update_set_flag(1);
+    NVIC_SystemReset();
+    
+}

+ 1 - 1
fw/user/main.cpp

@@ -72,7 +72,7 @@ int main(void)
 
     // -------------------------------------------------------------------------
     // USB
-#if 0    
+#ifdef USB_RNDIS    
     usb_clock48m_select(USB_CLK_HEXT);
     crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
     usb_init();

+ 8 - 5
iap/modules/iap/iap.c

@@ -58,14 +58,16 @@ void iap_task(void *params)
     if (ev = xEventGroupWaitBits(event, IAP_START | IAP_RETURN, pdTRUE, pdFALSE, 60000) != IAP_START)
     {
         printf("IAP: switch to FW!\r\n");
-        bpr_data_write(BPR_DATA1, 0);
+        bpr_data_write(BACKUP_IAP_LOAD_MODE, 0);
+        bpr_data_write(BACKUP_UPDATE_STATUS, IAP_UPDATE_ERROR);
         NVIC_SystemReset();
     }
     
     if (ev == IAP_RETURN)
     {
         printf("IAP: return to FW\r\n");
-        bpr_data_write(BPR_DATA1, 0);
+        bpr_data_write(BACKUP_IAP_LOAD_MODE, 0);
+        bpr_data_write(BACKUP_UPDATE_STATUS, IAP_UPDATE_ERROR);
         vTaskDelay(200);
         NVIC_SystemReset();
     }
@@ -85,12 +87,13 @@ void iap_task(void *params)
                 
             break;
             
-            // Запись завершена. Нужно провести проверку CRC.
+            // Запись завершена. Проверки пройдены успешно.
             case IAP_FINISH :
               
                 flash_lock();
                 DBG printf("IAP: finish\r\n");
-                bpr_data_write(BPR_DATA1, 0);
+                bpr_data_write(BACKUP_IAP_LOAD_MODE, 0);
+                bpr_data_write(BACKUP_UPDATE_STATUS, IAP_UPDATE_OK);
                 vTaskDelay(100);
                 NVIC_SystemReset();
                 
@@ -100,7 +103,7 @@ void iap_task(void *params)
             case IAP_RETURN :
               
                 DBG printf("IAP: return to FW\r\n");
-                bpr_data_write(BPR_DATA1, 0);
+                bpr_data_write(BACKUP_IAP_LOAD_MODE, 0);
                 vTaskDelay(100);
                 NVIC_SystemReset();
             

+ 8 - 7
iap/user/main.c

@@ -1,4 +1,5 @@
 #include "main.h"
+#include "common_config.h"
 
 
 void soft_wdt(void *params);
@@ -37,10 +38,10 @@ int main()
     uart_print_init(115200);
     
     // Флаг - нужно ли обновляться
-    load_mode = bpr_data_read(BPR_DATA1);
+    load_mode = bpr_data_read(BACKUP_IAP_LOAD_MODE);
     
     // Число попыток загрузки основного ПО
-    boot_try = bpr_data_read(BPR_DATA2);
+    boot_try = bpr_data_read(BACKUP_IAP_BOOT_TRY);
     
     DBG printf("[IAP] load_mode: %u, boot_try: %u\r\n", load_mode, boot_try);
 
@@ -49,7 +50,7 @@ int main()
     if (boot_try > 1)
     {
         boot_try--;
-        bpr_data_write(BPR_DATA2, boot_try);
+        bpr_data_write(BACKUP_IAP_BOOT_TRY, boot_try);
         
         if (!jump_to_app(USER_FLASH_FIRST_PAGE_ADDRESS))
         {
@@ -66,14 +67,14 @@ int main()
         
         load_mode = 1;
         boot_try = 0;
-        bpr_data_write(BPR_DATA1, load_mode);
-        bpr_data_write(BPR_DATA2, boot_try);
+        bpr_data_write(BACKUP_IAP_LOAD_MODE, load_mode);
+        bpr_data_write(BACKUP_IAP_BOOT_TRY, boot_try);
     }
     
     if  ((load_mode == 0) && (!fw_invalid))
     {
         DBG printf("Run main FW\r\n");
-        bpr_data_write(BPR_DATA2, BOOT_TRY);
+        bpr_data_write(BACKUP_IAP_BOOT_TRY, BOOT_TRY);
         DBG printf("Go to main FW...\r\n");
         jump_to_app(USER_FLASH_FIRST_PAGE_ADDRESS);
     }
@@ -90,7 +91,7 @@ int main()
     // -------------------------------------------------------------------------
     // Для теста. Сброс.
     DBG printf("For test reset load_mode flag and jump to FW\r\n");
-    bpr_data_write(BPR_DATA1, 0);
+    bpr_data_write(BACKUP_IAP_LOAD_MODE, 0);
     jump_to_app(0x08021000); 
 #endif
     

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 377 - 402
project/ewarm/iap/iap.dep


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 691 - 683
project/ewarm/module_universal_io.dep


+ 0 - 6
project/ewarm/module_universal_io.ewp

@@ -2274,12 +2274,6 @@
                     <name>$PROJ_DIR$\..\..\fw\modules\usb\usb_eth.c</name>
                 </file>
             </group>
-            <group>
-                <name>user_fatfs</name>
-                <file>
-                    <name>$PROJ_DIR$\..\..\fw\modules\user_fatfs\user_fatfs.c</name>
-                </file>
-            </group>
             <group>
                 <name>user_ringfs</name>
             </group>

+ 0 - 6
project/ewarm/module_universal_io.ewt

@@ -2484,12 +2484,6 @@
                     <name>$PROJ_DIR$\..\..\fw\modules\usb\usb_eth.c</name>
                 </file>
             </group>
-            <group>
-                <name>user_fatfs</name>
-                <file>
-                    <name>$PROJ_DIR$\..\..\fw\modules\user_fatfs\user_fatfs.c</name>
-                </file>
-            </group>
             <group>
                 <name>user_ringfs</name>
             </group>

+ 13 - 115
shared/board/common_config.h

@@ -11,35 +11,10 @@
 #endif
 
 
-/**
-  * @brief  Маркер ревизии платы для валидации *.bin файла
-  *
-  */
-#define HW_REV_LEN                      16
-
-#define HW_REV_OFFSET                   0x1F0
-
-#define HW_REV                          "MT_M03"
-
-/**
-  * @brief  Название модели устройства
-  */
-#define MODEL							"Метролог M3"
-
-/**
-  * @brief  Производитель
-  */
-#define MANUFACTURER                    "АО \"НПК РоТеК\""
-
 /**
   * @brief  Версия прошивки
   */
 #define FW_VERSION                      "1.00.01"
-
-/**
-  * @brief  MD5 CRC
-  */
-#define MD5_CRC                         "BF704428A06FE45359B2037ADBAA2C6E"
    
 /**
   * @brief  Адрес сектора настроек
@@ -71,115 +46,38 @@
   */
 #define BOOT_TRY                        26
 
-/**
-  * @brief  Таймаут возврата в основное ПО, сек.
-  */
-#define UPDATE_TIMEOUT                  120
-
 #define USER_FLASH_FIRST_PAGE_ADDRESS   0x08021000  
 
-#define USER_FLASH_END_ADDRESS          0x080C0FFF  
-#define USER_FLASH_CRC_ADDRESS          0x080C0FFC 
-
-#define FLASH_SECTOR_SIZE               0x800
-
-#define IAP_FLASH_FIRST_PAGE_ADDRESS    0x08000000  // Only as example see comment
-#define IAP_FLASH_CRC_ADDRESS           0x0801FFFC
-
-#define SYSTEMTICK_PERIOD_MS            1
-
    
-    
 // Абсолютный адрес основоного FW 
 #define FW_BEGIN_ADDRESS	            0x08021000 
     
 #define FLASH_PAGE_SIZE                 0x00000800U
 
-// Номер первой страницы FW     
-//#define FW_FIRST_PAGE		((FW_BEGIN_ADDRESS - 0x08000000)/2048)    
-    
-    
-//
-#define MQTT_CLIENT
-
-
-// LwIP Software watchdog
-//#define SOFTWARE_LWIP_WATCHDOG
-
-//
-#define USB_RNDIS
-
-/**
-  * @brief  Название файла прошивки
-  */
-#define MAIN_FW_NAME        "MT_M03.bin"
 
-/**
-  * @brief  Название файла прошивки (backup)
-  */
-#define BACKUP_MAIN_FW_NAME "BACKUP.bin"
-
-/**
-  * @brief  Вкл/выкл лог
-  */
-#define LOG_ENABLE
-
-/**
-  * @brief  Название файла лога
-  */
-#define LOG_NAME            "LOG.txt"
-
-
-#define FLASH_TYPE_MX25L1606E
+//#define USB_RNDIS
 
 // -------------------------------------------------------------------------- //
 
-typedef enum
-{
-    MB_REV_0 = 0,
-    MB_REV_1 = 1,
-    MB_REV_2 = 2,
-    MB_REV_3 = 3,
-    MB_REV_4 = 4,
-    MB_REV_5 = 5,
-    MB_REV_6 = 6,
-    MB_REV_7 = 7,
-  
-} MBOARD_REV_t;
-
-typedef enum
-{
-    DB_ABS    = 0,
-    DB_REV_1  = 1,
-    DB_REV_2  = 2,
-    DB_REV_3  = 3,
-    DB_REV_4  = 4,
-    DB_REV_5  = 5,
-    DB_REV_6  = 6,
-    DB_REV_7  = 7,
-    DB_REV_8  = 8,
-    DB_REV_9  = 9,
-    DB_REV_10 = 10,
-  
-} DBOARD_REV_t;
+// Флаг загрузчика (0, 1 - нужно обновлять FW)
+#define BACKUP_IAP_LOAD_MODE            BPR_DATA1
 
+// Число попыток загрузки FW
+#define BACKUP_IAP_BOOT_TRY             BPR_DATA2
 
-typedef enum
-{
-    ADC_PWR_MEAS = 0,
-    ADC_DB_REV = 1,
-    ADC_MB_REV = 2,
-        
-} ADC_REV_CH_t;
+// Cтатус обновления FW для журнала событий (1 - успешно, 0 - ошибка)
+#define BACKUP_UPDATE_STATUS            BPR_DATA3
 
+//
+#define BACKUP_RTC_KEY                  BPR_DATA4
 
-extern uint8_t mboard_rev;  // Ревизия основной платы
-extern uint8_t dboard_rev;  // Ревизия дочерней платы
+// -------------------------------------------------------------------------- //
 
+// Флаги, статусы
 
+#define IAP_UPDATE_OK                   1
+#define IAP_UPDATE_ERROR                0
 
 
 
 #endif /* #ifndef COMMON_CONFIG_H */
-
-/********************************* (C) РОТЕК **********************************/

+ 3 - 2
shared/rtc/rtc.c

@@ -1,5 +1,6 @@
 #include "rtc.h"
 #include "settings_api.h"
+#include "common_config.h"
 #include <string.h>
 #include <stdio.h>
 
@@ -51,7 +52,7 @@ uint8_t TM_RTC_Init(void)
     pwc_battery_powered_domain_access(TRUE);
     
     // check if rtc is initialized 
-    if (bpr_data_read(BPR_DATA4) != 0x1234)
+    if (bpr_data_read(BACKUP_RTC_KEY) != 0x1234)
     {
         // reset battery-powered domain register
         bpr_reset();
@@ -94,7 +95,7 @@ uint8_t TM_RTC_Init(void)
         TM_RTC_SetDateTime(&datatime);
         
         // writes data to bpr register 
-        bpr_data_write(BPR_DATA4, 0x1234);
+        bpr_data_write(BACKUP_RTC_KEY, 0x1234);
         
         return 1;
     }

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно