Dmitry Telenkov 5d1ee734b0 tmp 10 månader sedan
..
M3 artery + stm32.md d578c887cd tmp 11 månader sedan
readme.md 5d1ee734b0 tmp 10 månader sedan
Текучка Метролог.md d578c887cd tmp 11 månader sedan

readme.md

Компилятор:

/gcc-arm-none-eabi-9-2020-q2-update

arm-none-eabi-gcc (GNU Arm Embedded Toolchain 9-2020-q2-update) 9.3.1 20200408 (release)

DEBUG UART
USART1 (PB6 - Tx, PB7 - Rx)

Отладочный порт пересекается с рабочим портом модема. В боевой прошивке нужно отключать вывод DEBUG. Ключ при сборке "DEBUG".

UART Port_1 RS485 #2
USART3 (PD8 - Tx, PD9 - Rx)    
Карта памяти
Sector 0: 0x0800 0000 - 0x0800 3FFF (16кБт)
Sector 1: 0x0800 4000 - 0x0800 7FFF (16кБт) - Основные настройки (SETTINGS)
Sector 2: 0x0800 8000 - 0x0800 BFFF (16кБт) - Системные настройки (SETTINGS_SYS)
Sector 3: 0x0800 C000 - 0x0800 FFFF (16кБт)
Sector 4: 0x0801 8000 - 0x0801 FFFF (64кБт)
Sector 5: 0x0802 0000 - 0x0803 FFFF (128кБт)
Sector 6: 0x0804 0000 - 0x0805 FFFF (128кБт)
............................................
Sector 11: 0x080E 0000 - 0x080F FFFF (128кБт)

Настройки

Логика установки/загрузки настроек
  • После рестарта контроллера стартует бутлоадер. До проверки флагов обновления бутлоадер проверяет CRC общей структуры настроек. Если контрольная сумма не совпадает, то происходит установка дефолтных значений общей структуры настроек.
  • После старта основной программы (далее FW) загружаются системные настройки. Предварительно проверяется CRC и контрольное слово. Если CRC или слово не совпадают, то прошиваются дефолтные значения системных настроек.
  • Далее загружается основная структура настроек. Проверяется CRC и контрольное слово и если нужно прошиваются дефолтные значения.

    Общие настройки (FW + IAP)
    // Установить параметры сетевого подключения по умолчанию
    void SETTINGS_SetWebParamsDef(void)
    {
    strcpy(sSettings.sWebParams.ip, "192.168.0.254");
    strcpy(sSettings.sWebParams.gate, "192.168.0.1");
    strcpy(sSettings.sWebParams.mask, "255.255.255.0");
    strcpy(sSettings.sWebParams.dns1, "8.8.8.8");
    strcpy(sSettings.sWebParams.dns2, "8.8.4.4");
    sSettings.sWebParams.dhcpEnable = 0;
    }
    
    void SETTINGS_SetInfoDef(void)
    {
    strcpy(sSettings.sInfo.productionData, "00.00.00 00:00");
    strcpy(sSettings.sInfo.mac, DEVICE_MAC); // "EC-4C-4D-00-90-01"
    strcpy(sSettings.sInfo.serialNumber, DEVICE_SERIAL); // "7030000"
    sSettings.sInfo.id = 0;
    strcpy(sSettings.sInfo.location, "");
    strcpy(sSettings.sInfo.owner, "");
    strcpy(sSettings.sInfo.comments, "");
    strcpy(sSettings.sInfo.incharge, "");
    }
    
    void SETTINGS_SetGSMDef(void)
    {
    for(uint8_t i = 0; i < NUM_GSM; i++)
    {
        sSettings.sGSM[i].Enabled = true;
        sSettings.sGSM[i].prior = 0;
        sSettings.sGSM[i].type_profile = MEGAFON;
        strcpy(sSettings.sGSM[i].ip_test, "8.8.8.8");
        strcpy(sSettings.sGSM[i].APNaddr, "internet");
        strcpy(sSettings.sGSM[i].APNlogin, "");
        strcpy(sSettings.sGSM[i].APNpass, "");
        strcpy(sSettings.sGSM[i].msisdn, "");
        sSettings.sGSM[i].timeout = 30;
        sSettings.sGSM[i].period_test = 100;
        sSettings.sGSM[i].num_bad_connect = 3;
        sSettings.sGSM[i].modem_mode = AUTOMATIC;
            
    }
    sSettings.sGSM[0].prior = 3;
    sSettings.sGSM[1].prior = 2;
    }
    
Системные настройки (только FW)
typedef struct
{
  char  mac[MAC_LEN];     // MAC адрес
  char  serial[SER_LEN];  // Серийный номер
  char  customer[CUST_LEN]; // Производитель
  char  proddate[PROD_LEN]; // Дата производства
  char  testState[16];      // Статус тестирования
  uint32_t controlword;     // Контрольное слово
  uint32_t crc;             // CRC
} SYS_t;
Основная структура настроек состоит из следующих структур:
  FLAGS_t       sFlags;
  ETHERNET_t    sEthernet;      //настройка подключения Ethernet 
  SERVER_t      sServer;
  PROXY_t       sProxy;
  AUTH_t        sAuth[MAX_WEB_USERS];
  PORTGW_t      sPortGw[NUM_PORTGW];        // Настройки прозрачного порта
  SNTP_t        sSNTP;   
  PSD_t         sPSD;   
  uint16_t      settVer;       // Версия структуры настроек 
  uint32_t      controlWorld;  // Слово для контроля целостности структуры настроек
  uint32_t      sCRC;
Загрузка
До старта загрузочной задачи
  • Сохранение флагов причин перезагрузки (флаги пока не используются)
  • Инициализация GPIO
  • USB switch для работы RNDIS
  • Инициализация USART
  • Запуск Watchdog
  • Инициализация jSON hooks

    Действия в загрузочной задаче
  • Звуковой сигнал buzzer

  • Генератор случайных чисел

  • Таймер для расчета производительности FreeRTOS

  • Запуск таймера Uptime

  • Инициализация SPI2, мьютекса для SPI2

  • Погасить все LED на сдвиговым регистре (LED уровня GSM сигнала)

  • Установка мультиплексора в режим отключения ПСД

  • Инициализация кнопок и запуск таска

  • Анализ нажатия кнопки "MODE". Если кнопка нажата, то переход в Bootloader.

  • Загрузка настроек

  • Переинициализация всех USART

  • Монтирование файловой системы

  • Запуск измерений ADC и Power Manager

  • Запуск задачи управления LED

  • Запуск задачи отправки UDP анонсов

  • Запуск задачи Connection Manager

  • Запуск задач прозрачных портов

  • Запуск Задачи PSD (параллельная диспетчеризация)

  • Запуск RTC

  • Запуск MQTT

  • Запуск Монитора

  • Сброс BootTry

    Индикация
    • Мигает красным диодом "Сервер" до установки сетевых параметорв на эапе тестирования кроме "T2_OK".

      MODEM UART

      USART2 (PD5 - Tx, PD6 - Rx)

      Таймеры
    • TIM4 - на 1Гц для счетчика uptime

    • TIM5 - на 10кГц для загрузки FreeRTOS

    • TIM13 - сброс внешнего Watchdog таймера

    • TIM14 - триггер для АЦП

      Конфигурация проекта
    • #define SOFTWARE_WATCHDOG (common_config.h) - сброс watchdog в отдельном таске

    • MQTT_CLIENT - MQTT клиент

      Кнопки. Логика работы
    • Кнопка SET "Установка" Простое нажатие на статусе T0OK - гасит LED "Состояние" и начинает отправку UDP анонсов. Нажатие 15 секунд - перезагрузка

    • Кнопка MODE "Режим" Нажатие 30 секунд - установка дефолтных настроек ethernet, сохранение и перезагрузка. При перезагрузке и при зажатой кнопке MODE контроллер переходит в резим Bootloader.

      TODO
    • Макросы в settings_api.c

    • Вернуть дефолтные настройки (settings_api.c) ####