Цель работы - изучить порядок работы со средой создания программного обеспечения, освоить правила настройки портов ввода-вывода микроконтроллера ESP32-C3. Задачи:
ESP32-C3VSCode для разработки микроконтроллерных приложений.GPIO.Презентация к блоку "Микроконтроллеры RISC-V"
В настоящее время на рынке представлены микросхемы микроконтроллеров с архитектурой RISC-V различных производителей, например, 32 разрядные контроллеры SweRV Core (Western Digital); FE310 (SiFive); RV32M1 (NXP); MHS001 Huangshan (HUAMI); GD32VF103 (GigaDevice); CH32V103 (WCH); К1986ВК025 (Миландр); ESP32-C3 (Espressif); MIK32 (Микрон).
Перечисленные ядра, исполняющее инструкции RISC-V, разных производителей отличаются: глубиной конвейера, размерами и организацией кэша данных и команд, реализацией схем предсказаний переходов. При этом все ядра используют общую ISA (Instruction Set Architecture).
Описание использованного ядра RISC-V
Предлагаемый практикум ориентирован на работу с микроконтроллером ESP-RISC-V (ESP32-C3) компании Espressif Systems. Архитектура микроконтроллера показана на Рис. 13.1.
CPU and Memory. Процессорное ядро ESP-RISC-V представляет собой 32-разрядное ядро, основанное на RISC-V ISA, называемой "I" с префиксом RV32 или RV64 в зависимости от ширины целочисленного регистра. Эта базовая ISA реализует целочисленные вычислительные инструкции, целочисленные инструкции загрузки, сохранения и управления и является обязательной для всех реализаций RISC-V. Кроме того в ядре реализованы стандартные расширения: инструкций целочисленного умножения и деления ("M") и расширение набора сжатых инструкций стандарта RISC-V ("C"). Для реализации операций умножения и деления предусмотрены соответствующие 32-битные модули. Ядро имеет 4-х ступенчатый скалярный конвейер, оптимизированный по площади, мощности и производительности и поддерживающий тактовую частоту до 160 МГц. В состав процессорного ядра входят контроллер прерываний (INTC), обеспечивающий обработку 32 векторизованных прерываний с семью уровнями приоритета; модуль отладки (JTAG); и системная шина (SYS BUS) для доступа к памяти и периферийным устройствам.
(рис 13.1) Архитектура микроконтроллера ESP-RISC-V (ESP32-C3)
Внутренняя память ESP32-C3 разделена на три сегмента: внутреннее ПЗУ (384 КБ), внутренняя SRAM (400 КБ) и Real Time Clock (RTC) FAST Memory (8 КБ).
ПЗУ (384 КБ). ПЗУ содержит программные инструкции и некоторые данные низкоуровневых системных программ.SRAM (400 КБ). Внутреннее статическое ОЗУ- это энергозависимая память, к которой процессор может быстро получить доступ в течение одного такта работы. Часть SRAM может быть настроена на работу в качестве кэша для доступа к внешней памяти. Доступ к некоторым частям SRAM возможен только через шину инструкций процессор, а к некоторым можно обращаться как через шину команд процессора, так и через шину данных процессора.RTC (Real Time Clock). RTC реализована в виде статического ОЗУ (SRAM), поэтому является волатильной, однако устойчивой в глубоком сне. RTC FAST Memory (8 КБ): к памяти RTC FAST может обращаться только центральный процессор, и она обычно используется для хранения инструкций и данных, которые должны сохраняться во время глубокого сна.Внутри каждого сегмента могут существовать различные ограничения доступа к шине (например, некоторые части сегмента могут быть доступны только по шине данных процессора), поэтому каждый сегмент также дополнительно делится на части. Части внутренней памяти и диапазоны их адресов на шине данных и/или шине команд приведены в Таблице 13.1.
| Тип шины | Границы адресов | Размер | Применение | |
|---|---|---|---|---|
| Младший адрес | Старший адрес | |||
| Data bus | 0x3FF0_0000 |
0x3FF1_FFFF |
128 | Internal ROM 0 |
0x3FC8_0000 |
0x3FCD_FFFF |
384 | Internal SRAM |
|
| Instruction bus | 0x4000_0000 |
0x4003_FFFF |
256 | Internal ROM |
0x4004_0000 |
0x4005_FFFF |
128 | Internal ROM 1 |
|
0x4037_C000 |
0x4037_FFFF |
16 | Internal SRAM 0 |
|
0x4038_0000 |
0x403D_FFFF |
384 | Internal SRAM 1 |
|
| Data/Instruction bus | 0x5000_0000 |
0x5000_1FFF |
8 | RTC FAST Memory |
Общая структура и разделение адресов памяти показаны на Рис. 13.2.
Кэш-память (Cache), доступная только для чтения, представляет собой восьмистороннюю ассоциативную память, ее размер составляет 16 КБ, размер блока - 32 байта. Когда кэш активен, он занимает часть пространства внутренней памяти. Кэш единый для инструкций и данных, но одновременно может реализовывать кеширование либо инструкций, либо данных. При возникновении промаха кэш-памяти контроллер кэша инициирует запрос к внешней памяти по отношению к ядру памяти.
Обращение процессора к внешней памяти через кэш показано на Рис. 13.2. В соответствии с настройками MMU (блок управления памятью) кэш сопоставляет адрес процессора с физическим адресом внешней памяти. Благодаря такому сопоставлению адресов ESP32-C3 может адресовать до 16 МБ внешней флэш-памяти.
Блок Peripherals содержит следующие модули:
GDMA (General Direct Memory Access) - общий контроллер прямого доступа к памяти, он обеспечивает передачу данных от периферийных устройств в память без участия центрального процессора, что позволяет снизить нагрузку на ЦП.ESP32-C3 имеет 22 вывода GPIO, которым можно назначить различные функции путем конфигурирования соответствующих регистров. Некоторые GPIO могут использоваться для аналоговых функций, например, для подключения входного сигнала АЦП. Все GPIO имеют возможность выбора внутреннего подтягивания или отвода, или могут быть установлены в высокоимпедансное состояние. Когда GPIO сконфигурированы как входные, входное значение может быть считано программно через регистр. Входные GPIO также могут быть настроены для генерации прерываний процессора по фронту или по уровню. Все цифровые выводы ввода-вывода являются двунаправленными, неинвертирующими и трехпозиционными, включая входные и выходные буферы с трехпозиционным управлением. Эти выводы могут быть мультиплексированы с другими функциями, такими как UART, SPI и т.д. Для работы с низким энергопотреблением GPIO могут быть переведены в состояние удержания. Для маршрутизации сигналов от периферийных устройств к выводам GPIO используются IO MUX и матрица GPIO, обеспечивая высококонфигурируемый ввод/вывод.
(рис 13.2) Распределение адресного пространства ESP32-C3
В кристалле реализованы контроллеры последовательных интерфейсов.
SPI (Serial Peripheral Interface) - синхронный последовательный интерфейс, используемый для связи с внешними периферийными устройствами. В ESP32-C3 интегрированы три контроллера SPI: SPI0, SPI1, предназначенные в основном для внутреннего использования и SPI2 (GP-SPI2 или General Purpose SPI2), обладающий широкими возможностями коммуникации. На рис. 13.3 показаны варианты организации обмена данными с устройствами SPI.
(рис 13.3) Подключение SPI контроллеров ESP32-C3
ESP32-C3 имеет два контроллера универсального асинхронного приемника/передатчика UART: UART0 и UART1, контроллер интерфейса I2S и шины I2C (Inter-Integrated Circuit). Для автомобильных и промышленных приложений в кристалл ESP32-C3 встроен двухпроводной автомобильный контроллер TWAI®. Для программирования флэш-памяти системы, для чтения выходных данных программы, а также для подключения отладчика в кристалле ESP32-C3 встроен контроллер USB Serial/JTAG, объединяющий функциональность USB-последовательного преобразователя и адаптера USB-to-JTAG, что исключает необходимость внешних адаптеров. В кристалле имеется устройство дистанционного управления RMT (Remote Control Peripheral), поддерживающее два канала инфракрасной дистанционной передачи и два канала инфракрасного дистанционного приема.
Для обработки аналоговых сигналов в микроконтроллере предусмотрены два 12-битных аналого-цифровых преобразователя ADC (Analog-to-Digital Converter) последовательного приближения (SAR ADC), которые могут обрабатывать аналоговые сигналы с шести выводов.
ШИМ-контроллер LED LED PWM может генерировать независимые цифровые сигналы по шести каналам. ШИМ контроллер используется для управления свечением светодиодов, при котором при котором длительность единичного широтно-импульсно-модулированного сигнала определяет яркость свечения за счет мерцания. Контроллер может генерировать цифровые сигналы с настраиваемыми периодами и рабочим циклом с точностью до 18 бит, поддерживая плавное увеличение или уменьшение рабочего цикла. При этом можно использовать несколько источников синхронизации, включая внешний кристалл. Контроллер может работать даже тогда, когда процессор находится в спящем режиме.
Температурный датчик (Temperature Sensor) предназначен для определения температуры внутри микросхемы. Температура определяется такими факторами, как тактовая частота микроконтроллера или нагрузка на входы/выходы. Выходной сигнал датчика представляет собой напряжение, которое преобразуется АЦП в цифровое значение.
Для реализации различных вариантов контроля времени в микросхеме предусмотрен широкий набор таймеров.
Блок Security содержит модули, реализующие защиту: контроль разрешений на доступ к внутренней и внешней памяти; модули шифрования и дешифрования памяти; средства криптографического аппаратного ускорения, реализованные на алгоритме симметричного шифрования AES (Advanced Encryption Standard), алгоритме безопасного хеширования SHA (Secure Hash Algorithm ) и криптографическом алгоритме с открытым ключом RSA (Rivest, Shamir и Adleman), генератор случайных чисел RNG (Random Number Generator) и средства проверки подлинности сообщений, использующий односторонние хеш-функции HMAC (Hash-based Message Authentication Code).
Блок Wireless digital circuit содержит следующие модули, обеспечивающие передачу данных по радиоканалам. Приемник 2,4 ГГц, демодулирующий радиочастотный сигнал 2,4 ГГц в квадратурные сигналы базовой полосы и преобразующий их в цифровую форму с помощью двух высокоскоростных АЦП высокого разрешения. В приемник интегрированы ВЧ-фильтры, средства автоматической регулировки усиления сигнала, схемы подавления смещения по постоянному току и фильтры базовой полосы. Передатчик 2,4 ГГц модулирующий квадратурные сигналы базовой полосы в радиочастотный сигнал 2,4 ГГц и управляющий антенной с помощью мощных фильтров. Встроенные средства цифровой калибровки дополнительно улучшают линейность усилителя мощности. Тактовый генератор, вырабатывающий квадратурные тактовые сигналы 2,4 ГГц как для приемника, так и для передатчика.
Модуль Wi-Fi MAC реализует полный MAC-протокол Wi-Fi 802.11 b/g/n, поддерживая базовый набор услуг (BSS) STA и SoftAP под управлением функции распределенного управления.
Модуль Bluetooth поддерживает оба существующих протокола: классический с базовой скоростью и повышенной скоростью передачи данных Bluetooth 4.2 BR/EDR (Basic Rate / Enhanced Data Rate) и Bluetooth LE (Low Energy) с низким энергопотреблением. Для подключения и настройки радиомодулей используются функции API Wi-Fi, предоставляемые производителем микроконтроллера.
Для выполнения макетных экспериментов используется плата CORE ESP32, разработанная на основе Espressif Systems ESP32-C3. Основная плата поддерживает UART, GPIO, SPI, I2C, ADC, PWM и другие интерфейсы, которые можно выбрать и настраивать в соответствии с решаемой задачей. Описание внешних контактов платы приведено на рис. 13.4.
(рис 13.4) Отладочная плата Core-ESP32
Питание платы CORE-ESP32-C3 можно обеспечить следующими способами:
USB Type-C, этот способ используется по умолчанию и предпочтителен во время отладки;5 В и GND;3V3 и GND.На плате CORE ESP32 установлены:
BOOT, кнопка RST может реализовать функцию сброса, контакты для подключения к кнопкам показаны в таблице 13.3.| Cветодиод | GPIO |
Описание |
|---|---|---|
D4 |
IO12 |
Активный высокий уровень |
D5 |
IO13 |
Активный высокий уровень |
| Кнопка | Функция контакта | Описание |
|---|---|---|
BOOT /GPIO9 |
При нажатии кнопки микроконтроллер переходит в режим загрузки | Активный низкий уровень |
RST |
При нажатии кнопки происходит сброс микроконтроллера | Активный низкий уровень |
При работе с платой необходимо учитывать следующие особенности:
BOOT (IO09) Нельзя допустить подачу на контакт IO09 нуля до включения питания, микроконтроллер перейдет в режим загрузки.IO08, а прямое внешнее подключение не рекомендуется, поскольку при загрузке и записи на выводе IO08 низкий уровень, а последовательный порт нельзя использовать для загрузки.DIO - хост SPI использует технологию "быстрого чтения двойного ввода-вывода". Два контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: требуется вдвое меньше тактов по сравнению со стандартным SPI.DOUT - хост SPI использует "быстрое чтение с двумя выходами". Два контакта SPI используются для чтения данных флэш-памяти. Немного медленнее, чем DIO, поскольку адрес записывается через один вывод данных MOSI (Master Out Slave In).QIO - хост SPI использует технологию "Quad I/O Fast Read". Четыре контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: этим фазам требуется четверть тактового цикла по сравнению со стандартным SPI.QOUT - хост SPI использует функцию быстрого чтения с четырьмя выходами. Четыре контакта SPI используются для считывания данных флэш-памяти. Немного медленнее, чем QIO, поскольку адрес записывается через один вывод данных MOSI.QIO сигналы SPI SPIHD (IO12) и SPIWP (IO13) мультиплексируются. Чтобы увеличить количество доступных GPIO, плата разработки выбирает режим DIO с использованием 2-проводного SPI и в этом случае контакты IO12 и IO13 не подключены к флэш-памяти.VDD внешней флэш-памяти SPI подключен к системе питания 3,3 В. Во время использования не требуется настраивать другие источники питания. Применяется общий 2-проводной режим связи SPI.VDD флэш-памяти SPI подключен к GPIO11, и для его использования в качестве GPIO необходимо выполнить его перенастройку.Для проектирования под выбранный микроконтроллер необходимо иметь следующие инструменты:
ESP32;CMake и Ninja) для создания полноценного приложения для ESP32;ESP-IDF, которая содержит API (библиотеки программного обеспечения и исходный код) для ESP32 и сценарии для работы с набором инструментов разработки.В качестве сред разработки можно использовать среду на основе Eclipse или VSCode (Visual Studio Code) с соответствующими расширениями. В текущей работе будет использован VSCode, для подготовки среды необходимо выполнить его установку, воспользовавшись ссылкой. После установки VSCode необходимо активизировать расширение ESP-IDF для работы с микроконтроллером. По указанной ссылке находится подробная инструкция по установке расширения Espressif IDF.
После завершения установки рекомендуется открыть шаблон проекта командой Open Folder. В левой части окна VS Code (рис. 13.5) размещена панель управления, содержащая следующие основные элементы:
Git, просмотра изменений в коде и разных его версий.VS Code.
(рис 13.5) Рабочее окно VS Code
В строке, расположенной внизу окна необходимо выполнить следующие настройки:
(рис 13.6) Меню выбора способа загрузки
После загрузки проекта в плату в окне монитора можно отслеживать статус процессов сборки и загрузки, а также контролировать процесс работы программы.
На рис. 13.7 показана общая схема работы IO MUX и матрицы GPIO.
(рис 13.7) IO MUX и матрица GPIO
Матрица GPIO обеспечивает переключение между входными/выходными сигналами периферийных устройств и контактами. 42 входных сигнала периферийных устройств могут быть подключены к любым выводам GPIO, также, как и любой из 78 периферийных выходных сигналов могут быть скоммутированы на любой контакт GPIO. Поддерживается синхронизация сигналов периферийных входов на основе тактовой шины APB.
IO MUX конфигурируется через регистр IO_MUX_GPIOn_REG для каждого вывода GPIO. Контакт может быть настроен на функцию, маршрутизируемую матрицей GPIO, или подключен, минуя матрицу GPIO. Обход матрицы актуален для улучшения частоты работы высокоскоростных цифровых сигналов (SPI, JTAG, UART), поскольку в этом случае IO MUX используется для прямого подключения выводов к периферийным устройствам.
Электрический интерфейс между логикой микросхемы и выводом GPIO показан на рис. 13.8. Схема управляется с помощью сигналов разрешения входа (IE), разрешение выхода (OE), WPU и WPD подключения подтягивающих резисторов (pull-up и pull-down). Bonding pad - точка, используемая для физического подключения от корпуса микросхемы к выводу GPIO.
(рис 13.8) Внутренняя структура подключения к контакту микросхемы
Для считывания данных с контакта GPIO X в периферийный сигнал Y, необходимо выполнить следующие действия:
GPIO_FUNCY_IN_SEL_CFG_REG, соответствующий периферийному сигналу Y в матрице GPIO:
GPIO_SIGY_IN_SEL, чтобы разрешить ввод периферийного сигнала через матрицу GPIO;GPIO_FUNCX_IN_SEL на нужный вывод GPIO.Некоторые периферийные сигналы не имеют действительного бита GPIO_SIGy_IN_SEL, а именно, эти периферийные устройства могут только получать входные сигналы через матрицу GPIO.
IO_MUX_GPIOX_FILTER_EN. Фильтровать можно только сигналы длительностью более двух тактов.GPIO, установив GPIO_PINX_REG, соответствующий выводу GPIO X, следующим образом:
GPIO_PINX_SYNC1_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или по спадающему фронту;GPIO_PINX_SYNC2_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или спадающему фронту во втором такте.IO MUX для включения входного сигнала внешнего контакта. Для этого установить IO_MUX_GPIOX_REG соответствующий выводу GPIO X, следующим образом:
IO_MUX_GPIOX_FUN_IE для разрешения входа;IO_MUX_GPIOX_FUN_WPU и IO_MUX_GPIOX_FUN_WPD, чтобы включить или отключить подтягивающие и отводящие резисторы.Пример: подключение контакта I2S_MCLK_in, индекс сигнала 12 к GPIO7 (MTDO), будет выглядеть следующим образом:
GPIO_SIG12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG, чтобы разрешить ввод периферийного сигнала через матрицу GPIO.GPIO_FUNC12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG равным 7.IO_MUX_GPIO7_FUN_IE в регистре IO_MUX_GPIO7_REG, чтобы разрешить ввод пинов.Для вывода сигнала Y из периферийного устройства в порт X GPIO, а затем в IO MUX и далее на внешний контакт нужно выполнить следующие действия.
GPIO_FUNCX_OUT_SEL_CFG_REG и GPIO_ENABLE_REG[X], соответствующие конкретному выводу GPIO в матрице GPIO (рекомендуется использовать регистры W1TS (запись 1 для установки) и W1TC (запись 1 для сброса) для установки или сброса GPIO_ENABLE_REG.
GPIO_FUNCX_OUT_SEL в регистре GPIO_FUNCX_OUT_SEL_CFG_REG на индекс нужного периферийного выходного сигнала Y.GPIO_FUNCX_OEN_SEL в регистре GPIO_FUNCX_OUT_SEL_CFG_REG и бит в регистре GPIO_ENABLE_W1TS_REG, соответствующий выводу GPIO X. Чтобы сигнал разрешения выхода определялся внутренней логикой.GPIO_ENABLE_W1TC_REG, чтобы отключить выходной сигнал с контакта GPIO вывод.GPIO_PINX_PAD_DRIVER в регистре GPIO_PINX_REG, соответствующем выводу GPIO X.IO MUX для включения выхода через матрицу GPIO. Установить IO_MUX_GPIOX_REG, соответствующий выводу GPIO X, следующим образом:
IO_MUX_GPIOX_MCU_SEL желаемую функцию IO MUX, соответствующую выводу GPIO X. Эта функция GPIO должна иметь числовое значение 1, для всех выводов.IO_MUX_GPIOX_FUN_DRV требуемое значение силы тока выходного сигнала (0 ~ 3). Чем выше числовое значение, тем больший ток может быть получен от внешнего контакта. При настройках следует ориентироваться на следующие значения
Если используется режим открытого стока, следует установить/очистить биты IO_MUX_GPIOX_FUN_WPU и IO_MUX_GPIOX_FUN_WPD для включения/выключения внутренних подтягивающих/отключающих резисторов.
Некоторые высокоскоростные сигналы (SPI и JTAG) могут обходить матрицу GPIO для улучшения высокочастотных цифровых характеристик. В этом случае IO MUX используется для прямого подключения этих выводов к периферийным устройствам.
Этот вариант менее гибок, чем маршрутизация сигналов через матрицу GPIO, поскольку регистр IO MUX для каждого вывода GPIO может только выбрать из ограниченного числа функций, но при этом можно улучшить высокочастотные цифровые характеристики.
Для обхода матрицы GPIO для входных периферийных сигналов необходимо настроить два регистра:
IO_MUX_GPIOn_MCU_SEL для пина GPIO должен быть установлен на требуемую функцию пина. Список функций контактов функций см. в разделе 5.12.GPIO_SIGn_IN_SEL, чтобы направить входной сигнал непосредственно на периферийное устройство.Чтобы обойти матрицу GPIO для выходных сигналов периферийного устройства, IO_MUX_GPIOn_MCU_SEL для пина GPIO должен быть установлен на требуемую функцию пина.
Некоторые выводы GPIO в ESP32-C3 обеспечивают аналоговые функции. Если вывод используется для аналоговых целей, необходимо отключить подтягивающие и понижающие резисторы, выполнив следующие действия:
IO_MUX_GPIOn_MCU_SEL в 1, и очистить IO_MUX_GPIOn_FUN_IE, IO_MUX_GPIOn_FUN_WPU, IO_MUX_GPIOn_FUN_WPD.GPIO_ENABLE_W1TC[n], чтобы снять разрешение на вывод.Настройка регистров осуществляется с использованием функций API. При выполнении работы будут использованы следующие функции:
gpio_reset_pin (gpio_num_t gpio_num) сбрасывает настройки пина gpio_num к стандартным (если на этом пине есть возможность подключения к разным периферийным устройствам, то выбрана функция GPIO, подключено подтягивание, отключен ввод и вывод). Её необходимо использовать перед настройкой.gpio_set_direction (gpio_num_t gpio_num, gpio_mode_t mode) устанавливает на пин gpio_num режим работы mode. Доступные режимы:
GPIO_MODE_DEF_DISABLE - ввод и вывод отключены;GPIO_MODE_DEF_INPUT - только ввод;GPIO_MODE_DEF_OUTPUT - только вывод;GPIO_MODE_DEF_OD - выход с открытым коллектором.(GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT), разрешает чтение и запись.gpio_set_level (gpio_num_t gpio_num, uint32_t level) устанавливает заданный уровень level на выход пина gpio_num. Уровень может принимать значения 0(low) или 1(high).vTaskDelay (500/portTICK_PERIOD_MS) откладывает выполнение программы на заданное количество тиков. Для перевода значения в миллисекунды его нужно разделить на константу portTICK_PERIOD_MS.Подготовить программу, обеспечивающую управление светодиодами в соответствии с заданным вариантом.
Open Folder. В качестве шаблона для первого проекта можно использовать проект Sample_project, находящийся в каталоге esp\ esp-idf\examples\get-started\
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "led_strip.h"
#define LED1 12
static uint8_t s_led_state;
static void blink_led(void)
{
gpio_set_level(LED1, s_led_state);
}
static void configure_led(void)
{
gpio_reset_pin(LED1);
gpio_set_direction(LED1, GPIO_MODE_OUTPUT);
}
void app_main(void)
{
s_led_state = 0;
configure_led();
while (1) {
blink_led();
s_led_state = !s_led_state;
vTaskDelay(500/portTICK_PERIOD_MS);
}
}
Цель работы - изучить порядок работы со средой создания программного обеспечения, освоить правила настройки портов ввода-вывода микроконтроллера ESP32-C3. Задачи:
ESP32-C3VSCode для разработки микроконтроллерных приложений.GPIO.Презентация к блоку "Микроконтроллеры RISC-V"
В настоящее время на рынке представлены микросхемы микроконтроллеров с архитектурой RISC-V различных производителей, например, 32 разрядные контроллеры SweRV Core (Western Digital); FE310 (SiFive); RV32M1 (NXP); MHS001 Huangshan (HUAMI); GD32VF103 (GigaDevice); CH32V103 (WCH); К1986ВК025 (Миландр); ESP32-C3 (Espressif); MIK32 (Микрон).
Перечисленные ядра, исполняющее инструкции RISC-V, разных производителей отличаются: глубиной конвейера, размерами и организацией кэша данных и команд, реализацией схем предсказаний переходов. При этом все ядра используют общую ISA (Instruction Set Architecture).
Описание использованного ядра RISC-V
Предлагаемый практикум ориентирован на работу с микроконтроллером ESP-RISC-V (ESP32-C3) компании Espressif Systems. Архитектура микроконтроллера показана на Рис. 13.1.
CPU and Memory. Процессорное ядро ESP-RISC-V представляет собой 32-разрядное ядро, основанное на RISC-V ISA, называемой "I" с префиксом RV32 или RV64 в зависимости от ширины целочисленного регистра. Эта базовая ISA реализует целочисленные вычислительные инструкции, целочисленные инструкции загрузки, сохранения и управления и является обязательной для всех реализаций RISC-V. Кроме того в ядре реализованы стандартные расширения: инструкций целочисленного умножения и деления ("M") и расширение набора сжатых инструкций стандарта RISC-V ("C"). Для реализации операций умножения и деления предусмотрены соответствующие 32-битные модули. Ядро имеет 4-х ступенчатый скалярный конвейер, оптимизированный по площади, мощности и производительности и поддерживающий тактовую частоту до 160 МГц. В состав процессорного ядра входят контроллер прерываний (INTC), обеспечивающий обработку 32 векторизованных прерываний с семью уровнями приоритета; модуль отладки (JTAG); и системная шина (SYS BUS) для доступа к памяти и периферийным устройствам.
(рис 13.1) Архитектура микроконтроллера ESP-RISC-V (ESP32-C3)
Внутренняя память ESP32-C3 разделена на три сегмента: внутреннее ПЗУ (384 КБ), внутренняя SRAM (400 КБ) и Real Time Clock (RTC) FAST Memory (8 КБ).
ПЗУ (384 КБ). ПЗУ содержит программные инструкции и некоторые данные низкоуровневых системных программ.SRAM (400 КБ). Внутреннее статическое ОЗУ- это энергозависимая память, к которой процессор может быстро получить доступ в течение одного такта работы. Часть SRAM может быть настроена на работу в качестве кэша для доступа к внешней памяти. Доступ к некоторым частям SRAM возможен только через шину инструкций процессор, а к некоторым можно обращаться как через шину команд процессора, так и через шину данных процессора.RTC (Real Time Clock). RTC реализована в виде статического ОЗУ (SRAM), поэтому является волатильной, однако устойчивой в глубоком сне. RTC FAST Memory (8 КБ): к памяти RTC FAST может обращаться только центральный процессор, и она обычно используется для хранения инструкций и данных, которые должны сохраняться во время глубокого сна.Внутри каждого сегмента могут существовать различные ограничения доступа к шине (например, некоторые части сегмента могут быть доступны только по шине данных процессора), поэтому каждый сегмент также дополнительно делится на части. Части внутренней памяти и диапазоны их адресов на шине данных и/или шине команд приведены в Таблице 13.1.
| Тип шины | Границы адресов | Размер | Применение | |
|---|---|---|---|---|
| Младший адрес | Старший адрес | |||
| Data bus | 0x3FF0_0000 |
0x3FF1_FFFF |
128 | Internal ROM 0 |
0x3FC8_0000 |
0x3FCD_FFFF |
384 | Internal SRAM |
|
| Instruction bus | 0x4000_0000 |
0x4003_FFFF |
256 | Internal ROM |
0x4004_0000 |
0x4005_FFFF |
128 | Internal ROM 1 |
|
0x4037_C000 |
0x4037_FFFF |
16 | Internal SRAM 0 |
|
0x4038_0000 |
0x403D_FFFF |
384 | Internal SRAM 1 |
|
| Data/Instruction bus | 0x5000_0000 |
0x5000_1FFF |
8 | RTC FAST Memory |
Общая структура и разделение адресов памяти показаны на Рис. 13.2.
Кэш-память (Cache), доступная только для чтения, представляет собой восьмистороннюю ассоциативную память, ее размер составляет 16 КБ, размер блока - 32 байта. Когда кэш активен, он занимает часть пространства внутренней памяти. Кэш единый для инструкций и данных, но одновременно может реализовывать кеширование либо инструкций, либо данных. При возникновении промаха кэш-памяти контроллер кэша инициирует запрос к внешней памяти по отношению к ядру памяти.
Обращение процессора к внешней памяти через кэш показано на Рис. 13.2. В соответствии с настройками MMU (блок управления памятью) кэш сопоставляет адрес процессора с физическим адресом внешней памяти. Благодаря такому сопоставлению адресов ESP32-C3 может адресовать до 16 МБ внешней флэш-памяти.
Блок Peripherals содержит следующие модули:
GDMA (General Direct Memory Access) - общий контроллер прямого доступа к памяти, он обеспечивает передачу данных от периферийных устройств в память без участия центрального процессора, что позволяет снизить нагрузку на ЦП.ESP32-C3 имеет 22 вывода GPIO, которым можно назначить различные функции путем конфигурирования соответствующих регистров. Некоторые GPIO могут использоваться для аналоговых функций, например, для подключения входного сигнала АЦП. Все GPIO имеют возможность выбора внутреннего подтягивания или отвода, или могут быть установлены в высокоимпедансное состояние. Когда GPIO сконфигурированы как входные, входное значение может быть считано программно через регистр. Входные GPIO также могут быть настроены для генерации прерываний процессора по фронту или по уровню. Все цифровые выводы ввода-вывода являются двунаправленными, неинвертирующими и трехпозиционными, включая входные и выходные буферы с трехпозиционным управлением. Эти выводы могут быть мультиплексированы с другими функциями, такими как UART, SPI и т.д. Для работы с низким энергопотреблением GPIO могут быть переведены в состояние удержания. Для маршрутизации сигналов от периферийных устройств к выводам GPIO используются IO MUX и матрица GPIO, обеспечивая высококонфигурируемый ввод/вывод.
(рис 13.2) Распределение адресного пространства ESP32-C3
В кристалле реализованы контроллеры последовательных интерфейсов.
SPI (Serial Peripheral Interface) - синхронный последовательный интерфейс, используемый для связи с внешними периферийными устройствами. В ESP32-C3 интегрированы три контроллера SPI: SPI0, SPI1, предназначенные в основном для внутреннего использования и SPI2 (GP-SPI2 или General Purpose SPI2), обладающий широкими возможностями коммуникации. На рис. 13.3 показаны варианты организации обмена данными с устройствами SPI.
(рис 13.3) Подключение SPI контроллеров ESP32-C3
ESP32-C3 имеет два контроллера универсального асинхронного приемника/передатчика UART: UART0 и UART1, контроллер интерфейса I2S и шины I2C (Inter-Integrated Circuit). Для автомобильных и промышленных приложений в кристалл ESP32-C3 встроен двухпроводной автомобильный контроллер TWAI®. Для программирования флэш-памяти системы, для чтения выходных данных программы, а также для подключения отладчика в кристалле ESP32-C3 встроен контроллер USB Serial/JTAG, объединяющий функциональность USB-последовательного преобразователя и адаптера USB-to-JTAG, что исключает необходимость внешних адаптеров. В кристалле имеется устройство дистанционного управления RMT (Remote Control Peripheral), поддерживающее два канала инфракрасной дистанционной передачи и два канала инфракрасного дистанционного приема.
Для обработки аналоговых сигналов в микроконтроллере предусмотрены два 12-битных аналого-цифровых преобразователя ADC (Analog-to-Digital Converter) последовательного приближения (SAR ADC), которые могут обрабатывать аналоговые сигналы с шести выводов.
ШИМ-контроллер LED LED PWM может генерировать независимые цифровые сигналы по шести каналам. ШИМ контроллер используется для управления свечением светодиодов, при котором при котором длительность единичного широтно-импульсно-модулированного сигнала определяет яркость свечения за счет мерцания. Контроллер может генерировать цифровые сигналы с настраиваемыми периодами и рабочим циклом с точностью до 18 бит, поддерживая плавное увеличение или уменьшение рабочего цикла. При этом можно использовать несколько источников синхронизации, включая внешний кристалл. Контроллер может работать даже тогда, когда процессор находится в спящем режиме.
Температурный датчик (Temperature Sensor) предназначен для определения температуры внутри микросхемы. Температура определяется такими факторами, как тактовая частота микроконтроллера или нагрузка на входы/выходы. Выходной сигнал датчика представляет собой напряжение, которое преобразуется АЦП в цифровое значение.
Для реализации различных вариантов контроля времени в микросхеме предусмотрен широкий набор таймеров.
Блок Security содержит модули, реализующие защиту: контроль разрешений на доступ к внутренней и внешней памяти; модули шифрования и дешифрования памяти; средства криптографического аппаратного ускорения, реализованные на алгоритме симметричного шифрования AES (Advanced Encryption Standard), алгоритме безопасного хеширования SHA (Secure Hash Algorithm ) и криптографическом алгоритме с открытым ключом RSA (Rivest, Shamir и Adleman), генератор случайных чисел RNG (Random Number Generator) и средства проверки подлинности сообщений, использующий односторонние хеш-функции HMAC (Hash-based Message Authentication Code).
Блок Wireless digital circuit содержит следующие модули, обеспечивающие передачу данных по радиоканалам. Приемник 2,4 ГГц, демодулирующий радиочастотный сигнал 2,4 ГГц в квадратурные сигналы базовой полосы и преобразующий их в цифровую форму с помощью двух высокоскоростных АЦП высокого разрешения. В приемник интегрированы ВЧ-фильтры, средства автоматической регулировки усиления сигнала, схемы подавления смещения по постоянному току и фильтры базовой полосы. Передатчик 2,4 ГГц модулирующий квадратурные сигналы базовой полосы в радиочастотный сигнал 2,4 ГГц и управляющий антенной с помощью мощных фильтров. Встроенные средства цифровой калибровки дополнительно улучшают линейность усилителя мощности. Тактовый генератор, вырабатывающий квадратурные тактовые сигналы 2,4 ГГц как для приемника, так и для передатчика.
Модуль Wi-Fi MAC реализует полный MAC-протокол Wi-Fi 802.11 b/g/n, поддерживая базовый набор услуг (BSS) STA и SoftAP под управлением функции распределенного управления.
Модуль Bluetooth поддерживает оба существующих протокола: классический с базовой скоростью и повышенной скоростью передачи данных Bluetooth 4.2 BR/EDR (Basic Rate / Enhanced Data Rate) и Bluetooth LE (Low Energy) с низким энергопотреблением. Для подключения и настройки радиомодулей используются функции API Wi-Fi, предоставляемые производителем микроконтроллера.
Для выполнения макетных экспериментов используется плата CORE ESP32, разработанная на основе Espressif Systems ESP32-C3. Основная плата поддерживает UART, GPIO, SPI, I2C, ADC, PWM и другие интерфейсы, которые можно выбрать и настраивать в соответствии с решаемой задачей. Описание внешних контактов платы приведено на рис. 13.4.
(рис 13.4) Отладочная плата Core-ESP32
Питание платы CORE-ESP32-C3 можно обеспечить следующими способами:
USB Type-C, этот способ используется по умолчанию и предпочтителен во время отладки;5 В и GND;3V3 и GND.На плате CORE ESP32 установлены:
BOOT, кнопка RST может реализовать функцию сброса, контакты для подключения к кнопкам показаны в таблице 13.3.| Cветодиод | GPIO |
Описание |
|---|---|---|
D4 |
IO12 |
Активный высокий уровень |
D5 |
IO13 |
Активный высокий уровень |
| Кнопка | Функция контакта | Описание |
|---|---|---|
BOOT /GPIO9 |
При нажатии кнопки микроконтроллер переходит в режим загрузки | Активный низкий уровень |
RST |
При нажатии кнопки происходит сброс микроконтроллера | Активный низкий уровень |
При работе с платой необходимо учитывать следующие особенности:
BOOT (IO09) Нельзя допустить подачу на контакт IO09 нуля до включения питания, микроконтроллер перейдет в режим загрузки.IO08, а прямое внешнее подключение не рекомендуется, поскольку при загрузке и записи на выводе IO08 низкий уровень, а последовательный порт нельзя использовать для загрузки.DIO - хост SPI использует технологию "быстрого чтения двойного ввода-вывода". Два контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: требуется вдвое меньше тактов по сравнению со стандартным SPI.DOUT - хост SPI использует "быстрое чтение с двумя выходами". Два контакта SPI используются для чтения данных флэш-памяти. Немного медленнее, чем DIO, поскольку адрес записывается через один вывод данных MOSI (Master Out Slave In).QIO - хост SPI использует технологию "Quad I/O Fast Read". Четыре контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: этим фазам требуется четверть тактового цикла по сравнению со стандартным SPI.QOUT - хост SPI использует функцию быстрого чтения с четырьмя выходами. Четыре контакта SPI используются для считывания данных флэш-памяти. Немного медленнее, чем QIO, поскольку адрес записывается через один вывод данных MOSI.QIO сигналы SPI SPIHD (IO12) и SPIWP (IO13) мультиплексируются. Чтобы увеличить количество доступных GPIO, плата разработки выбирает режим DIO с использованием 2-проводного SPI и в этом случае контакты IO12 и IO13 не подключены к флэш-памяти.VDD внешней флэш-памяти SPI подключен к системе питания 3,3 В. Во время использования не требуется настраивать другие источники питания. Применяется общий 2-проводной режим связи SPI.VDD флэш-памяти SPI подключен к GPIO11, и для его использования в качестве GPIO необходимо выполнить его перенастройку.Для проектирования под выбранный микроконтроллер необходимо иметь следующие инструменты:
ESP32;CMake и Ninja) для создания полноценного приложения для ESP32;ESP-IDF, которая содержит API (библиотеки программного обеспечения и исходный код) для ESP32 и сценарии для работы с набором инструментов разработки.В качестве сред разработки можно использовать среду на основе Eclipse или VSCode (Visual Studio Code) с соответствующими расширениями. В текущей работе будет использован VSCode, для подготовки среды необходимо выполнить его установку, воспользовавшись ссылкой. После установки VSCode необходимо активизировать расширение ESP-IDF для работы с микроконтроллером. По указанной ссылке находится подробная инструкция по установке расширения Espressif IDF.
После завершения установки рекомендуется открыть шаблон проекта командой Open Folder. В левой части окна VS Code (рис. 13.5) размещена панель управления, содержащая следующие основные элементы:
Git, просмотра изменений в коде и разных его версий.VS Code.
(рис 13.5) Рабочее окно VS Code
В строке, расположенной внизу окна необходимо выполнить следующие настройки:
(рис 13.6) Меню выбора способа загрузки
После загрузки проекта в плату в окне монитора можно отслеживать статус процессов сборки и загрузки, а также контролировать процесс работы программы.
На рис. 13.7 показана общая схема работы IO MUX и матрицы GPIO.
(рис 13.7) IO MUX и матрица GPIO
Матрица GPIO обеспечивает переключение между входными/выходными сигналами периферийных устройств и контактами. 42 входных сигнала периферийных устройств могут быть подключены к любым выводам GPIO, также, как и любой из 78 периферийных выходных сигналов могут быть скоммутированы на любой контакт GPIO. Поддерживается синхронизация сигналов периферийных входов на основе тактовой шины APB.
IO MUX конфигурируется через регистр IO_MUX_GPIOn_REG для каждого вывода GPIO. Контакт может быть настроен на функцию, маршрутизируемую матрицей GPIO, или подключен, минуя матрицу GPIO. Обход матрицы актуален для улучшения частоты работы высокоскоростных цифровых сигналов (SPI, JTAG, UART), поскольку в этом случае IO MUX используется для прямого подключения выводов к периферийным устройствам.
Электрический интерфейс между логикой микросхемы и выводом GPIO показан на рис. 13.8. Схема управляется с помощью сигналов разрешения входа (IE), разрешение выхода (OE), WPU и WPD подключения подтягивающих резисторов (pull-up и pull-down). Bonding pad - точка, используемая для физического подключения от корпуса микросхемы к выводу GPIO.
(рис 13.8) Внутренняя структура подключения к контакту микросхемы
Для считывания данных с контакта GPIO X в периферийный сигнал Y, необходимо выполнить следующие действия:
GPIO_FUNCY_IN_SEL_CFG_REG, соответствующий периферийному сигналу Y в матрице GPIO:
GPIO_SIGY_IN_SEL, чтобы разрешить ввод периферийного сигнала через матрицу GPIO;GPIO_FUNCX_IN_SEL на нужный вывод GPIO.Некоторые периферийные сигналы не имеют действительного бита GPIO_SIGy_IN_SEL, а именно, эти периферийные устройства могут только получать входные сигналы через матрицу GPIO.
IO_MUX_GPIOX_FILTER_EN. Фильтровать можно только сигналы длительностью более двух тактов.GPIO, установив GPIO_PINX_REG, соответствующий выводу GPIO X, следующим образом:
GPIO_PINX_SYNC1_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или по спадающему фронту;GPIO_PINX_SYNC2_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или спадающему фронту во втором такте.IO MUX для включения входного сигнала внешнего контакта. Для этого установить IO_MUX_GPIOX_REG соответствующий выводу GPIO X, следующим образом:
IO_MUX_GPIOX_FUN_IE для разрешения входа;IO_MUX_GPIOX_FUN_WPU и IO_MUX_GPIOX_FUN_WPD, чтобы включить или отключить подтягивающие и отводящие резисторы.Пример: подключение контакта I2S_MCLK_in, индекс сигнала 12 к GPIO7 (MTDO), будет выглядеть следующим образом:
GPIO_SIG12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG, чтобы разрешить ввод периферийного сигнала через матрицу GPIO.GPIO_FUNC12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG равным 7.IO_MUX_GPIO7_FUN_IE в регистре IO_MUX_GPIO7_REG, чтобы разрешить ввод пинов.Для вывода сигнала Y из периферийного устройства в порт X GPIO, а затем в IO MUX и далее на внешний контакт нужно выполнить следующие действия.
GPIO_FUNCX_OUT_SEL_CFG_REG и GPIO_ENABLE_REG[X], соответствующие конкретному выводу GPIO в матрице GPIO (рекомендуется использовать регистры W1TS (запись 1 для установки) и W1TC (запись 1 для сброса) для установки или сброса GPIO_ENABLE_REG.
GPIO_FUNCX_OUT_SEL в регистре GPIO_FUNCX_OUT_SEL_CFG_REG на индекс нужного периферийного выходного сигнала Y.GPIO_FUNCX_OEN_SEL в регистре GPIO_FUNCX_OUT_SEL_CFG_REG и бит в регистре GPIO_ENABLE_W1TS_REG, соответствующий выводу GPIO X. Чтобы сигнал разрешения выхода определялся внутренней логикой.GPIO_ENABLE_W1TC_REG, чтобы отключить выходной сигнал с контакта GPIO вывод.GPIO_PINX_PAD_DRIVER в регистре GPIO_PINX_REG, соответствующем выводу GPIO X.IO MUX для включения выхода через матрицу GPIO. Установить IO_MUX_GPIOX_REG, соответствующий выводу GPIO X, следующим образом:
IO_MUX_GPIOX_MCU_SEL желаемую функцию IO MUX, соответствующую выводу GPIO X. Эта функция GPIO должна иметь числовое значение 1, для всех выводов.IO_MUX_GPIOX_FUN_DRV требуемое значение силы тока выходного сигнала (0 ~ 3). Чем выше числовое значение, тем больший ток может быть получен от внешнего контакта. При настройках следует ориентироваться на следующие значения
Если используется режим открытого стока, следует установить/очистить биты IO_MUX_GPIOX_FUN_WPU и IO_MUX_GPIOX_FUN_WPD для включения/выключения внутренних подтягивающих/отключающих резисторов.
Некоторые высокоскоростные сигналы (SPI и JTAG) могут обходить матрицу GPIO для улучшения высокочастотных цифровых характеристик. В этом случае IO MUX используется для прямого подключения этих выводов к периферийным устройствам.
Этот вариант менее гибок, чем маршрутизация сигналов через матрицу GPIO, поскольку регистр IO MUX для каждого вывода GPIO может только выбрать из ограниченного числа функций, но при этом можно улучшить высокочастотные цифровые характеристики.
Для обхода матрицы GPIO для входных периферийных сигналов необходимо настроить два регистра:
IO_MUX_GPIOn_MCU_SEL для пина GPIO должен быть установлен на требуемую функцию пина. Список функций контактов функций см. в разделе 5.12.GPIO_SIGn_IN_SEL, чтобы направить входной сигнал непосредственно на периферийное устройство.Чтобы обойти матрицу GPIO для выходных сигналов периферийного устройства, IO_MUX_GPIOn_MCU_SEL для пина GPIO должен быть установлен на требуемую функцию пина.
Некоторые выводы GPIO в ESP32-C3 обеспечивают аналоговые функции. Если вывод используется для аналоговых целей, необходимо отключить подтягивающие и понижающие резисторы, выполнив следующие действия:
IO_MUX_GPIOn_MCU_SEL в 1, и очистить IO_MUX_GPIOn_FUN_IE, IO_MUX_GPIOn_FUN_WPU, IO_MUX_GPIOn_FUN_WPD.GPIO_ENABLE_W1TC[n], чтобы снять разрешение на вывод.Настройка регистров осуществляется с использованием функций API. При выполнении работы будут использованы следующие функции:
gpio_reset_pin (gpio_num_t gpio_num) сбрасывает настройки пина gpio_num к стандартным (если на этом пине есть возможность подключения к разным периферийным устройствам, то выбрана функция GPIO, подключено подтягивание, отключен ввод и вывод). Её необходимо использовать перед настройкой.gpio_set_direction (gpio_num_t gpio_num, gpio_mode_t mode) устанавливает на пин gpio_num режим работы mode. Доступные режимы:
GPIO_MODE_DEF_DISABLE - ввод и вывод отключены;GPIO_MODE_DEF_INPUT - только ввод;GPIO_MODE_DEF_OUTPUT - только вывод;GPIO_MODE_DEF_OD - выход с открытым коллектором.(GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT), разрешает чтение и запись.gpio_set_level (gpio_num_t gpio_num, uint32_t level) устанавливает заданный уровень level на выход пина gpio_num. Уровень может принимать значения 0(low) или 1(high).vTaskDelay (500/portTICK_PERIOD_MS) откладывает выполнение программы на заданное количество тиков. Для перевода значения в миллисекунды его нужно разделить на константу portTICK_PERIOD_MS.Подготовить программу, обеспечивающую управление светодиодами в соответствии с заданным вариантом.
Open Folder. В качестве шаблона для первого проекта можно использовать проект Sample_project, находящийся в каталоге esp\ esp-idf\examples\get-started\
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "led_strip.h"
#define LED1 12
static uint8_t s_led_state;
static void blink_led(void)
{
gpio_set_level(LED1, s_led_state);
}
static void configure_led(void)
{
gpio_reset_pin(LED1);
gpio_set_direction(LED1, GPIO_MODE_OUTPUT);
}
void app_main(void)
{
s_led_state = 0;
configure_led();
while (1) {
blink_led();
s_led_state = !s_led_state;
vTaskDelay(500/portTICK_PERIOD_MS);
}
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.