diff --git a/README.md b/README.md index 4c5694c..c76a27b 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ Пакет поддержки плат на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE. -## Установка пакета в ArduinoIDE +## Установка пакета в ArduinoIDE и подготовка к работе Для установки пакета в параметрах ArduinoIDE необходимо добавить ссылку `https://elron.tech/files/package_elbear_beta_index.json` в поле "Дополнительные ссылки для Менеджера плат". -Подробные шаги по установке и начальной настройке описаны в [инструкции](./docs/Instructions.md). +Подробные шаги по установке, начальной настройке и записи начального загрузчика для всех поддерживаемых плат описаны в [инструкции](./docs/Instructions.md). ## Платы, входящие в состав пакета Пакет включает в себя поддержку следующих плат: @@ -73,13 +73,14 @@ Список модулей и шилдов, работа которых была протестирована на платах, входящих в состав пакета поддержки, доступен [здесь](./docs/tested_shields.md). ## Режим отладки -Для всех плат, входящих в состав пакета, доступен режим отладки скетча в ArduinoIDE версии 2. Подготовка к работе в режиме отладки описана в [инструкции.](./docs/debug_description.md) +Для всех плат, входящих в состав пакета, доступен режим отладки скетча в Arduino IDE версии 2.3.4 на Windows 10 x64. Подготовка к работе в режиме отладки описана в [инструкции.](./docs/debug_description.md) Функция отладки является экспериментальной. -# Полезные ссылки +## Полезные ссылки * [Описание плат ELBEAR](https://elron.tech/russian-arduino-compatible-board/) -* [Материалы по платам ELBEAR](https://elron.tech/support/#elbear) +* [Материалы по платам ELBEAR ACE-UNO](https://elron.tech/support/#elbear) +* [Материалы по платам ELBEAR ACE-NANO](https://elron.tech/support/#elbearacenano) * [Материалы по платам ELSOMIK](https://elron.tech/support/#elsomik) -* [Материалы по плате START-MIK32](https://wiki.mik32.ru/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%A1%D1%82%D0%B0%D1%80%D1%82) +* [Материалы по плате START-MIK32](https://docs.mikron.ru/wiki/boards/start.html) * [Телеграмм-канал компании](https://t.me/elrontech) При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). diff --git a/docs/Elbear_description.md b/docs/Elbear_description.md index 7379833..7d2e3e8 100644 --- a/docs/Elbear_description.md +++ b/docs/Elbear_description.md @@ -50,4 +50,5 @@ Интерфейс I2C1 доступен на выводах SDA и SCL, для работы с ним используется экземпляр класса под названием `Wire`. ## Драйверы -Для работы с платой по интерфейсу USB необходим драйвер для микросхемы CH340С, его можно скачать [здесь](https://www.wch-ic.com/downloads/CH341SER_ZIP.html). \ No newline at end of file +Для работы с платой по интерфейсу USB необходим драйвер для микросхемы CH340С, его можно скачать [здесь](https://www.wch-ic.com/downloads/CH341SER_ZIP.html). +Подготовка к работе по интерфейсу JTAG и инструкция по записи начального загрузчика есть [здесь](Instructions.md). \ No newline at end of file diff --git a/docs/Flash_project_jtag.png b/docs/Flash_project_jtag.png new file mode 100644 index 0000000..815cc15 Binary files /dev/null and b/docs/Flash_project_jtag.png differ diff --git a/docs/Instructions.md b/docs/Instructions.md index 3e024fa..f3051cf 100644 --- a/docs/Instructions.md +++ b/docs/Instructions.md @@ -1,3 +1,4 @@ +# Установка пакета и предварительная подготовка к работе ## Установка пакета в ArduinoIDE 1. Установите [Arduino IDE](https://www.arduino.cc/en/software). 2. Откройте меню `Файл -> Параметры`. @@ -18,11 +19,12 @@ Для записи начального загрузчика: 1. Подключите плату к ПК по интерфейсу JTAG. Для подключения плат ELBEAR, ELSOMIK потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). -Для подключения платы START-MIK32 необходимо перевести переключатель режима программатора в положение JTAG и подключить плату к ПК через USB разъем. -2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. +Для подключения платы START-MIK32 необходимо на плате перевести переключатель режима программатора (COM/JTAG) в положение JTAG и подключить плату к ПК через USB разъем. +2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. +![programmer](programmer.png) 3. Для записи начального загрузчика выберите `Инструменты -> Записать Загрузчик`. ![Bootloader](Bootloader_.png) -4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO или с [документацией](https://wiki.mik32.ru/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%A1%D1%82%D0%B0%D1%80%D1%82) по запуску платы START-MIK32. +4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO или с [документацией](https://docs.mikron.ru/wiki/boards/start.html) по запуску платы START-MIK32 (ссылки на документацию по плате START-MIK32 актуальны на июль 2025 года, если они не действительны, возможно найти актуальную информацию на сайте производителя - https://mikron.ru/). Теперь можно загружать скетчи в плату по USB. ## Начало работы @@ -40,4 +42,16 @@ 6. Загрузите полученную прошивку на плату. ![Flash_project](Flash_project_.png) 7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого добавьте в скетч работу с интерфейсом и после загрузки прошивки выберите `Инструменты -> Монитор порта`. -![Monitor](Monitor_.png) \ No newline at end of file +![Monitor](Monitor_.png) + +## Загрузка скетчей через программатор +ArduinoIDE позволяет так же загружать скетчи через программатор. Для этого: +1. Подключите плату к ПК по интерфейсу JTAG. +Для подключения плат ELBEAR, ELSOMIK потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). +Для подключения платы START-MIK32 необходимо на плате перевести переключатель режима программатора (COM/JTAG) в положение JTAG и подключить плату к ПК через USB разъем. +2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`. +3. Выберите активную плату - `Инструменты -> Плата`. +4. Выберите программатор - `Инструменты -> Программатор -> mik32 uploader`. +5. Проверьте скетч, нажав соответствующую кнопку. +6. Для загрузки скетча через программатор выберите - `Скетч -> Загрузить на плату при помощи программатора`. +![Flash_project_jtag](Flash_project_jtag.png) \ No newline at end of file diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index 5520583..8fcbfb1 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -4,7 +4,10 @@ ![Start_V1_pinout.png](Start_V1_pinout.png) ### Загрузка скетчей -Для загрузки скетчей в ArduinoIDE необходимо передвинуть переключатель режима программатора на плате в положение `COM`. Так же необходимо установить две перемычки на разъем 5 - первой перемычкой замкнуть выводы `COM_RX` и `MCU_TX`, а второй - выводы `COM_TX` и `MCU_RX`. +Для загрузки скетчей в ArduinoIDE необходимо передвинуть переключатель режима программатора на плате в положение `COM`. Так же необходимо установить две перемычки на разъем 5 - первой перемычкой замкнуть выводы `COM_RX` и `MCU_TX`, а второй - выводы `COM_TX` и `MCU_RX`. +Для работы с платой по интерфейсу USB не требуется установка дополнительных драйверов. +Подготовка к работе по интерфейсу JTAG и инструкция по записи начального загрузчика есть [здесь](Instructions.md). + ### Цифровые выводы Выводы на плате START-MIK32 пронумерованы в соответствии с их принадлежностью к определенному GPIO-порту и конкретному пину внутри порта. Чтобы использовать цифровой вывод, необходимо передать в функцию номер порта и номер пина в формате `P0_1`, где "0" — это номер порта, а "1" — номер пина внутри порта. Например, для инициализации вывода 5 порта 2 на выход необходимо вызвать функцию `pinMode(P2_5, OUTPUT)`. Для использования доступны следующие выводы: `P0_0 ... P0_15, P1_0 ... P1_15, P2_0 ... P2_7`. diff --git a/docs/elsomik_description.md b/docs/elsomik_description.md index 8f68718..e78a432 100644 --- a/docs/elsomik_description.md +++ b/docs/elsomik_description.md @@ -6,8 +6,9 @@ ![pinout_Elsomik_SE.png](pinout_ElsomikSE.png) ### Загрузка скетчей -На плате отсутствуют встроенные преобразователи, позволяющие загружать скетчи по USB через COM-порт, однако каждая плата поставляется с предварительно записанным начальным загрузчиком. Для записи скетчей через USB потребуется использование внешнего USB-UART преобразователя, подключаемого к выводам платы P0_5 (RX0) и P0_6 (TX0), которые соответствуют интерфейсу UART0. -Перед загрузкой скетча необходимо кратковременно ввести контроллер в состояние RESET. Если используется USB-UART преобразователь с выведенным сигналом DTR, необходимо соединить DTR с выводом RST на плате через керамический конденсатор емкостью от 0,47 мкФ до 2,2 мкФ. В случае отсутствия сигнала DTR, необходимо вручную соединить вывод RST платы с землей и отпустить его непосредственно перед началом записи скетча. +На плате отсутствуют встроенные преобразователи, позволяющие загружать скетчи по USB через COM-порт, однако каждая плата поставляется с предварительно записанным начальным загрузчиком. Для записи скетчей через USB потребуется использование внешнего USB-UART преобразователя, подключаемого к выводам платы P0_5 (RX0) и P0_6 (TX0), которые соответствуют интерфейсу UART0. Для корректной работы так же может потребоваться установка на ПК драйвера для микросхемы, используемой в преобразователе USB-UART. +Перед загрузкой скетча необходимо кратковременно ввести контроллер в состояние RESET. Если используется USB-UART преобразователь с выведенным сигналом DTR, необходимо соединить DTR с выводом RST на плате через керамический конденсатор емкостью от 0,47 мкФ до 2,2 мкФ. В случае отсутствия сигнала DTR, необходимо вручную соединить вывод RST платы с землей и отпустить его непосредственно перед началом записи скетча. +Для записи начального загрузчика или загрузки скетчей с помощью программатора необходимо подключить программатор (например, [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/)) к выводам TDO, TDI, TCK, TMS, TRST, GND, 3V3. Инструкцию по использованию программатора в Arduino IDE можно найти [здесь](Instructions.md). ### Цифровые выводы Выводы на плате ELSOMIK пронумерованы в соответствии с их принадлежностью к определенному GPIO-порту и конкретному пину внутри порта. Чтобы использовать цифровой вывод, необходимо передать в функцию номер порта и номер пина в формате `P0_1`, где "0" — это номер порта, а "1" — номер пина внутри порта. Например, для инициализации вывода 5 порта 1 на выход необходимо вызвать функцию `pinMode(P1_5, OUTPUT)`. Для использования доступны следующие выводы: `P0_0 ... P0_15, P1_0 ... P1_15, P2_6, P2_7`. Выводы `P0_11 ... P0_15` на плате обозначены иначе, ниже представлена таблица соответствия: diff --git a/docs/nano_description.md b/docs/nano_description.md index f5b92c3..d09bb5a 100644 --- a/docs/nano_description.md +++ b/docs/nano_description.md @@ -53,4 +53,5 @@ Интерфейс I2C1 доступен на выводах A4 и A5, для работы с ним используется экземпляр класса под названием `Wire`. ## Драйверы -Для работы с платой по интерфейсу USB необходим драйвер для микросхемы CH343P, его можно скачать [здесь](https://www.wch-ic.com/downloads/CH343SER_ZIP.html). \ No newline at end of file +Для работы с платой по интерфейсу USB необходим драйвер для микросхемы CH343P, его можно скачать [здесь](https://www.wch-ic.com/downloads/CH343SER_ZIP.html). +Подготовка к работе по интерфейсу JTAG и инструкция по записи начального загрузчика есть [здесь](Instructions.md). \ No newline at end of file diff --git a/docs/programmer.png b/docs/programmer.png new file mode 100644 index 0000000..0746917 Binary files /dev/null and b/docs/programmer.png differ diff --git a/platform.txt b/platform.txt index 2920a9b..93dcef1 100644 --- a/platform.txt +++ b/platform.txt @@ -33,7 +33,7 @@ compiler.optimization_flags.release=-Os compiler.optimization_flags.debug=-Og -g3 compiler.extra_flags = -march=rv32imc_zicsr_zifencei -mabi=ilp32 -mcmodel=medlow -Wall -fsigned-char -ffunction-sections -compiler.S.flags = {compiler.extra_flags} -x assembler-with-cpp {compiler.define} -I"{runtime.platform.path}/libraries/FreeRTOS/src" {compiler.optimization_flags} {compiler.warning_flags} {compiler.MIK32_Amur.extra_include} +compiler.S.flags = {compiler.extra_flags} -x assembler-with-cpp {compiler.define} "-I{runtime.platform.path}/libraries/FreeRTOS/src" {compiler.optimization_flags} {compiler.warning_flags} {compiler.MIK32_Amur.extra_include} compiler.c.flags = -c -std=gnu11 -Werror=return-type {compiler.extra_flags} {compiler.define} {compiler.warning_flags} {compiler.optimization_flags} {compiler.MIK32_Amur.extra_include} compiler.cpp.flags = -c -std=gnu++17 -fabi-version=0 -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics -Werror=return-type {compiler.extra_flags} {compiler.define} {compiler.warning_flags} {compiler.optimization_flags} {compiler.MIK32_Amur.extra_include} compiler.c.elf.flags = -march=rv32imc_zicsr_zifencei -mabi=ilp32 -mcmodel=medlow -nostartfiles -Xlinker @@ -51,7 +51,7 @@ archive_file_path={build.path}/{archive_file} recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}" # Combine gc-sections, archives, and objects -recipe.c.combine.pattern= "{compiler.path}{compiler.c.elf.cmd}" -o "{build.path}/{build.project_name}.elf" -T "{build.core.path}/mik32/shared/ldscripts/{build.ldscript}" {compiler.c.elf.flags} -Map={build.path}/{build.project_name}.map -Wl,--gc-sections -Wl,--no-warn-rwx-segments "-L{build.path}" -Wl,--start-group {object_files} -Wl,--whole-archive "{archive_file_path}" -Wl,--no-whole-archive -lc -Wl,--end-group +recipe.c.combine.pattern= "{compiler.path}{compiler.c.elf.cmd}" -o "{build.path}/{build.project_name}.elf" -T "{build.core.path}/mik32/shared/ldscripts/{build.ldscript}" {compiler.c.elf.flags} "-Map={build.path}/{build.project_name}.map" -Wl,--gc-sections -Wl,--no-warn-rwx-segments "-L{build.path}" -Wl,--start-group {object_files} -Wl,--whole-archive "{archive_file_path}" -Wl,--no-whole-archive -lc -Wl,--end-group # Create output (.bin file) recipe.objcopy.bin.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.elf2bin.flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.bin" @@ -105,7 +105,7 @@ debug.additional_config=debug_config.mik32 tools.elbear_uploader.cmd=elbear_uploader tools.elbear_uploader.cmd.windows=elbear_uploader.exe tools.elbear_uploader.path={runtime.tools.elbear_uploader.path} -tools.elbear_uploader.upload.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --com={serial.port} --baudrate={upload.speed} +tools.elbear_uploader.upload.pattern="{path}/{cmd}" "{build.path}/{build.project_name}.hex" --com={serial.port} --baudrate={upload.speed} tools.elbear_uploader.upload.params.quiet= tools.elbear_uploader.upload.params.verbose= @@ -126,10 +126,10 @@ tools.mik32_upload.erase.params.quiet= tools.mik32_upload.erase.params.verbose= # For Tools > Burn Bootloader -tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootloaders/{bootloader.file} --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg +tools.mik32_upload.bootloader.pattern="{path}/{cmd}" "{runtime.platform.path}/bootloaders/{bootloader.file}" --run-openocd --no-driver --openocd-exec "{runtime.tools.openocd.path}/bin/openocd{cmd.extension}" --openocd-interface "{path}/openocd-scripts/interface/{bootloader.interface}" --openocd-target "{path}/openocd-scripts/target/mik32.cfg" tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg +tools.mik32_upload.program.pattern="{path}/{cmd}" "{build.path}/{build.project_name}.hex" --run-openocd --no-driver --openocd-exec "{runtime.tools.openocd.path}/bin/openocd{cmd.extension}" --openocd-interface "{path}/openocd-scripts/interface/{bootloader.interface}" --openocd-target "{path}/openocd-scripts/target/mik32.cfg" tools.mik32_upload.program.params.quiet= -tools.mik32_upload.program.params.verbose= +tools.mik32_upload.program.params.verbose= \ No newline at end of file diff --git a/variants/elbear_ace_nano/variant.c b/variants/elbear_ace_nano/variant.c index 9847f3b..3333412 100644 --- a/variants/elbear_ace_nano/variant.c +++ b/variants/elbear_ace_nano/variant.c @@ -131,6 +131,11 @@ void additionalPinsInit(uint32_t PinNumber) HAL_GPIO_PinConfig(SELA_A_PORT, SELA_A_PIN, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); // SELA_B HAL_GPIO_PinConfig(SELA_B_PORT, SELA_B_PIN, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + + // select A7 via switches selaA, selaB to allow using A4 and A5 as digital outputs + HAL_GPIO_WritePin(SELA_A_PORT, SELA_A_PIN, GPIO_PIN_HIGH); + HAL_GPIO_WritePin(SELA_B_PORT, SELA_B_PIN, GPIO_PIN_HIGH); + selaSwitchesIsInited = true; }