================================================================================ ИНСТРУКЦИЯ ПО ЭКСПЛУАТАЦИИ И НАСТРОЙКЕ ВСТРАИВАЕМОГО ПО ЗАГРУЗЧИКА (BOOTLOADER) ДЛЯ МИКРОКОНТРОЛЛЕРА CH32F207VCT6 (Версия 1.6) ================================================================================ СОДЕРЖАНИЕ: 1. ОБЩЕЕ ОПИСАНИЕ СИСТЕМЫ 2. КАРТА ПАМЯТИ И ТРЕБОВАНИЯ К ОСНОВНОМУ ПРИЛОЖЕНИЮ (UP1) 3. СБОРКА И НАСТРОЙКА ПРОЕКТА (ДЛЯ РАЗРАБОТЧИКА) 4. АППАРАТНЫЕ ПЕРЕМЫЧКИ (SB1 / SB2) И СВЕТОДИОДНАЯ ИНДИКАЦИЯ 5. АЛГОРИТМ РАБОТЫ ЗАГРУЗЧИКА (ПОШАГОВЫЙ) 6. РАБОТА С СЕРВЕРАМИ ОБНОВЛЕНИЙ (LSU / GSU) И СЕТЕВЫЕ НАСТРОЙКИ 7. ХРАНЕНИЕ НАСТРОЕК В NVRAM (РЕГИСТРЫ BKP) 8. ПРОТОКОЛ ОБМЕНА: СПИСОК ПОДДЕРЖИВАЕМЫХ КОМАНД 9. РАБОТА С ВНЕШНЕЙ SPI FLASH ПАМЯТЬЮ (W25Q64) 10. РАЗБОР ТИПОВЫХ НЕИСПРАВНОСТЕЙ ================================================================================ 1. ОБЩЕЕ ОПИСАНИЕ СИСТЕМЫ ================================================================================ Данное встраиваемое ПО является Бутлоадером (загрузчиком) для микроконтроллера WCH CH32F207VCT6 со встроенным 10M PHY Ethernet. Назначение: Удаленное обновление основной прошивки устройства по сети Ethernet (Интернет/Интранет) без использования программатора (JTAG/SWD) или карт памяти. Поддерживаемые сценарии обновления: - Локальное (LSU): Поиск сервера в локальной сети с помощью UDP Broadcast. - Глобальное (GSU): Прямое подключение к удаленному серверу в Интернете по TCP (требует предварительной записи настроек в NVRAM). Особенности безопасности: - Имитозащита записи Flash (пароль PASS_BIN_LOAD = 0x184745bf). - Проверка CRC32 передаваемых данных и сохраненных структур. - Возможность включения аппаратной защиты кода от чтения (RDP). - Аппаратный сторожевой таймер (WDT) на всех этапах работы. ================================================================================ 2. КАРТА ПАМЯТИ И ТРЕБОВАНИЯ К ОСНОВНОМУ ПРИЛОЖЕНИЮ (UP1) ================================================================================ Распределение встроенной Flash памяти (256 КБ): | Секция | Адрес начала | Размер | Назначение | |-----------------|--------------|------------|------------------------------------------| | BOOTLOADER | 0x08000000 | 64 КБ | Код этого загрузчика. | | APPLICATION_UP1 | 0x08010000 | 120 КБ | Основная пользовательская программа. | | APPLICATION_UP2 | 0x0802E000 | 8 КБ | Резервная/тестовая прошивка. | !!! ВАЖНО ДЛЯ РАЗРАБОТЧИКА ПРИЛОЖЕНИЯ UP1 !!! Чтобы программа UP1 корректно стартовала после Bootloader'а, в коде UP1 необходимо выполнить следующие действия: 1. Смещение таблицы векторов прерываний (в функции main() или SystemInit): NVIC_SetVectorTable(0x08010000, 0); 2. Настройка линкера (Keil Scatter File / IAR Linker Script): Стартовый адрес ROM/RCODE: 0x08010000 Размер ROM: 0x1E000 (120 КБ) 3. Сброс сторожевого таймера (WDT): Bootloader запускает независимый сторожевой таймер (IWDG) с таймаутом ~3 сек. Основное приложение ОБЯЗАНО периодически сбрасывать его (IWDG_ReloadCounter()), иначе МК уйдет в аппаратный сброс. ================================================================================ 3. СБОРКА И НАСТРОЙКА ПРОЕКТА (ДЛЯ РАЗРАБОТЧИКА) ================================================================================ В файле `Main.c` находится ключевой макрос управления режимом сборки: #define DEBUG_ON // <-- Управление отладкой Режим DEBUG (макрос РАСКОММЕНТИРОВАН): - Защита кода от чтения (RDP) отключена. - Сторожевой таймер (WDT) отключен. - Разрешена работа отладчика в спящих режимах. - В регистры BKP могут записываться тестовые данные (вызов debug_write_BKP). Режим RELEASE (макрос ЗАКОММЕНТИРОВАН / удален): - Включается защита кода от чтения (RDP Level 1) при первом старте. ВНИМАНИЕ: После этого программатор WCH-Link/ST-Link не сможет прочитать Flash. Для повторной прошивки потребуется полное стирание чипа (Unlock/Erase Full Chip). - Включается WDT. - Отключается вывод отладочной информации. Управление размером RAM: При старте код проверяет Option Bytes. Если конфигурация RAM не соответствует 128 КБ (значение по умолчанию), происходит перезапись Option Bytes и сброс. Это обеспечивает доступ ко всей доступной памяти. ================================================================================ 4. АППАРАТНЫЕ ПЕРЕМЫЧКИ (SB1 / SB2) И СВЕТОДИОДНАЯ ИНДИКАЦИЯ ================================================================================ На плате должны быть установлены следующие элементы управления и индикации: [ Аппаратные перемычки (активный уровень - логический 0, замыкание на GND) ] - SB1 (Пин PC11): Разрешение обновления. * Разомкнуто (1): РАЗРЕШЕНО. Bootloader запускает сетевой стек и ищет сервер. * Замкнуто на GND (0): ЗАПРЕЩЕНО. Bootloader игнорирует сеть и сразу прыгает в приложение UP1/UP2. - SB2 (Пин PC12): Выбор приложения. * Разомкнуто (1): Загружать основное приложение (APPLICATION_UP1). * Замкнуто на GND (0): Загружать тестовое/резервное приложение (APPLICATION_UP2). [ Светодиодная индикация ] Плата содержит три светодиода для отображения текущего состояния Bootloader'а. | Светодиод | Пин | Состояние | Расшифровка состояния | |-------------|--------|-----------------|-----------------------------------------------------| | BL (LED1) | PC10 | Горит постоянно | Устройство включено, ждет линк Ethernet. | | | | Медленно мигает | Поиск DHCP сервера (получение IP адреса). | | | | Быстро мигает | Идет процесс обновления прошивки (стирание/запись). | | | | Не горит | Загрузчик завершил работу, запущено приложение UP. | |-------------|--------|-----------------|-----------------------------------------------------| | 5008 (LED2) | PD4 | Горит | IP адрес успешно получен от DHCP сервера. | | | | Не горит | Используется фиксированный IP (192.168.0.251). | |-------------|--------|-----------------|-----------------------------------------------------| | ERROR (LED3)| PB5 | Горит | ОШИБКА: Нет валидных настроек GSU в NVRAM. | | | | | (IP сервера нулевой или CRC структуры неверен). | ================================================================================ 5. АЛГОРИТМ РАБОТЫ ЗАГРУЗЧИКА (ПОШАГОВЫЙ) ================================================================================ При включении питания или сбросе выполняется следующая последовательность: 1. Инициализация: Тактирование, порты, проверка Option Bytes (RAM), расчет CRC кода Bootloader'а и приложения UP1. 2. Проверка перемычки SB1. Если 0 -> переход на шаг 10. 3. Проверка физического подключения Ethernet кабеля (Link Status). Таймаут 6 секунд. Если кабеля нет -> переход на шаг 10. 4. Попытка получить IP адрес по DHCP (таймаут ~5 сек). - Успех: Используется динамический IP. Загорается светодиод "5008". - Неудача: Используется статический IP: 192.168.0.251 / Маска 255.255.255.0 / Шлюз 192.168.0.1. 5. Попытка обновления через ЛОКАЛЬНЫЙ СЕРВЕР (LSU): - Отправка UDP Broadcast пакетов в сеть на порт 5008. - Выполняется 5 попыток с интервалом ~500 мс. - Если ответ от LSU получен -> переход к приему команд (шаг 8). 6. Проверка настроек ГЛОБАЛЬНОГО СЕРВЕРА (GSU) в NVRAM (BKP регистры): - Считывается IP адрес сервера и имя файла. - Если CRC в NVRAM неверен или IP адрес равен 0.0.0.0 -> загорается LED ERROR и происходит переход на шаг 10. 7. Попытка обновления через ГЛОБАЛЬНЫЙ СЕРВЕР (GSU): - Установка TCP соединения с IP адресом из NVRAM (порт 5008). - Выполняется 5 попыток с интервалом ~500 мс. - Если соединение установлено и сервер ответил -> переход к приему команд (шаг 8). 8. Режим приема команд (Обновление ПО): - Bootloader ожидает команды от сервера (LSU/GSU). - Светодиод "BL" быстро мигает. - Выполнение команд: стирание, запись, проверка CRC. - **Защита от "зависания"**: Если в течение 10 секунд не было команд, Bootloader автоматически сбрасывает МК, чтобы не оставить устройство без прошивки в случае обрыва связи на середине обновления. 9. Завершение: При получении команды CMD_JUMP_TO_APP или при ошибках/таймаутах на этапах поиска сервера. 10. Переход к пользовательскому приложению: - Светодиоды гаснут. - Происходит сброс периферии, отключение прерываний, очистка NVIC. - Передача управления на адрес APPLICATION_UP1_BEGIN (или UP2, в зависимости от SB2). ================================================================================ 6. РАБОТА С СЕРВЕРАМИ ОБНОВЛЕНИЙ (LSU / GSU) И СЕТЕВЫЕ НАСТРОЙКИ ================================================================================ Для работы с данным Bootloader'ом на ПК используются специализированные утилиты: | Тип сервера | Протокол | Название утилит | Порт | Условия работы | |-------------|----------|----------------------------------------|--------|-----------------------------------------------------| | Локальный | UDP | LSU1A-EXE-UDP.exe, LSU_1_UDP_rc*.py | 5008 | Должен находиться в той же подсети, что и устройство.| | Глобальный | TCP | GSU_1_TCP_rc*.py | 5008 | Должен иметь публичный (белый) IP адрес. | Сетевые параметры по умолчанию (если DHCP недоступен): - IP Address : 192.168.0.251 - Subnet Mask : 255.255.255.0 - Gateway : 192.168.0.1 ================================================================================ 7. ХРАНЕНИЕ НАСТРОЕК В NVRAM (РЕГИСТРЫ BKP) ================================================================================ Для работы в режиме глобального обновления (через интернет) в энергонезависимой памяти (BKP регистры) должна храниться структура `w_eth_t`. Структура сохраняется, начиная с регистра BKP_DR11 (адрес 0x40006C40). Поля структуры (w_eth_t): - `uint8_t ipservupd[4]` : IP адрес удаленного сервера обновлений (GSU). Пример: {192, 168, 1, 100}. - `uint32_t name_fileH` : Шестнадцатеричное число - идентификатор прошивки. По этому номеру сервер определяет, какой файл .bct отправлять устройству. Запись этой структуры производится одним из способов: 1. Основным приложением (UP1) через пользовательский интерфейс (например, Web-интерфейс). 2. Утилитой-программатором при первичной настройке. Если CRC структуры не совпадает или `ipservupd` == 0.0.0.0, глобальное обновление будет невозможно (загорится светодиод ERROR). ================================================================================ 8. ПРОТОКОЛ ОБМЕНА: СПИСОК ПОДДЕРЖИВАЕМЫХ КОМАНД ================================================================================ Сервер отправляет устройству структуру `from_serv_update_t`, содержащую поле `cmd`. НАБОР А (Основные операции с встроенной Flash CPU): - CMD_NOP (0) - Пустая команда (тест связи). - CMD_ACTIVATE_BL (1) - Войти в режим ожидания команд (защищенный режим). - CMD_UNBLOCK_FLASH (2) - Программная разблокировка Flash (обязательна перед стиранием). - CMD_ERASE_UP_FLASH (3) - Стереть область приложения UP1 (120 КБ). - CMD_SET_PASS_BIN (4) - Передать пароль разрешения записи (0x184745BF). Без него CMD_WRITE_UP_FLASH будет отклонена. - CMD_WRITE_UP_FLASH (5) - Записать блок 256 байт во Flash UP1. - CMD_GETCRC_FLASH (6) - Запросить CRC32 области UP1 (для проверки успешности записи). - CMD_JUMP_TO_APP (7) - Выйти из загрузчика и запустить приложение. - CMD_RESET (8) - Аппаратный сброс микроконтроллера. - CMD_GET_CONFIG (9) - Запросить состояние перемычек SB1/SB2 и флагов блокировок. НАБОР B (Операции с внешней SPI Flash памятью W25Q64): - CMD_ERASE_SECTOR_SPI (20) - Стереть сектор 4 КБ во внешней SPI Flash. - CMD_WRITE_PAGE_SPI (21) - Записать страницу 256 байт во внешнюю SPI Flash. - CMD_READ_PAGE_SPI (22) - Прочитать страницу 256 байт из внешней SPI Flash. - CMD_ID_CHIP_SPI (24) - Прочитать идентификатор чипа внешней Flash (должен быть 0xEF16). ================================================================================ 9. РАБОТА С ВНЕШНЕЙ SPI FLASH ПАМЯТЬЮ (W25Q64) ================================================================================ Bootloader поддерживает работу с микросхемой W25Q64 (или совместимой) для хранения данных, параметров или логов. Подключение по интерфейсу SPI2: - FLASH0_CS : PD8 - FLASH0_WP : PD9 (не используется) - FLASH0_R : PD10 (не используется) - SPI2_SCK : PB13 - SPI2_MISO : PB14 - SPI2_MOSI : PB15 Скорость обмена: Тактовая частота SPI / 4. При записи используется предварительная проверка необходимости стирания сектора. ================================================================================ 10. РАЗБОР ТИПОВЫХ НЕИСПРАВНОСТЕЙ ================================================================================ | Симптом | Вероятная причина и решение |------------------------------------------------|---------------------------------------------------------------------------------------------------- | Устройство не выходит в сеть, сразу стартует UP 1. Перемычка SB1 замкнута на GND. Разомкните SB1. Проверьте уровень на пине PC11 (должна быть "1"). | LED ERROR горит постоянно 1. В NVRAM нет настроек для GSU (IP 0.0.0.0). 2. Поврежден CRC структуры в BKP регистрах. 3. Требуется только локальное обновление. Игнорируйте ошибку или запишите корректные настройки. | Медленно мигает BL, но IP не получает (нет DHCP) 1. В сети нет DHCP сервера. 2. Проблема с Ethernet кабелем/свитчом. Через 5 секунд загрузчик перейдет на статический IP 192.168.0.251. | Сервер не видит устройство 1. Брандмауэр Windows блокирует порт 5008/UDP (для LSU) или 5008/TCP (для GSU). 2. Устройство и сервер в разных подсетях (актуально для LSU). | Запись прошивки прерывается ошибкой OP_ERR_PASS 1. Сервер не отправил команду CMD_SET_PASS_BIN с правильным паролем (0x184745BF) перед отправкой блоков. | После записи устройство не стартует (светодиоды горят) 1. Прошивка UP1 собрана с неправильным адресом ROM (не 0x08010000). 2. Прошивка повреждена (CRC не совпал при записи). 3. Не хватает размера стека или RAM в настройках UP1. | Не стирается/пишется Flash CPU 1. Сработала аппаратная защита записи (Option Bytes WRPR). Необходимо снять защиту с помощью утилиты WCH-LinkUtility. ================================================================================ КОНЕЦ ИНСТРУКЦИИ ================================================================================