Встраиваемое ПО
- СКИФ
- 1892ВМ14Я
- 1892КП1Я
- 1892ВМ206
- 1892ВМ15АФ
- 1892ВМ10Я
- 1657РУ2У
- ELIoT
Как прошить eMMC через SSH
- Загрузить модуль с SD
- Узнать IP платы (
ifconfig
) - Загрузить на ПК:
- rootfs нужного дистрибутива (В данном примере AltLinux)
- tar2dev
- В ыполнить прошивку командой
ssh root@<board_ip> zcat | ROOT=/dev/mmcblk0p1 FDT=mcom03-elvmc03smarc-r1.0-rockpi-n10.dtb \
./tar2dev -s sshd - /dev/mmcblk0 < mcom03-altlinux-rootfs-*.tar.gz
Где:
board_ip - IP адрес платы RockPI
-s sshd - systemd сервисы, которые нужно включить
В результате на eMMC память будет прошит AltLinux и будет включен sshd. Основное руководство - https://dist.elvees.com/mcom03/docs/linux-sdk/latest/components/buildroot.html#sd
Существует ли какой-нибудь документ по запуску "пустой" платы со СКИФом, когда в qSPI и eMMC еще
ничего нет?
Режимы загрузки описаны здесь: https://support.elvees.com/docs/Microchips/SKIF/hw-guide
Спецификация BootROM, отправляется по запросу на почту.
Также есть страница https://dist.elvees.com/mcom03/docs/linux-sdk/2022.09/design/boot-flow.html.
При запуске на модулях ELV-MC03-SMARC-R (RockPI) Buildroot возникает проблема:
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
Reading file would overwrite reserved memory
Failed to load '/boot/extlinux/extlinux.conf'
Error reading config file
SCRIPT FAILED: continuing...
"Synchronous Abort" handler, esr 0x96000005
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
Reading file would overwrite reserved memory
Failed to load '/boot/extlinux/extlinux.conf'
Error reading config file
SCRIPT FAILED: continuing...
"Synchronous Abort" handler, esr 0x96000005
При перепрошивке qspi-flash (https://github.com/elvees/mcom03-flash-tools) эта область не перезаписывается. Поскольку в релизе от сентября изменился объем доступной DDR-памяти, адреса также изменились. Для решения проблемы следует сбросить env. Для этого во время загрузки U-boot нужно зайти в консоль uboot и ввести следующие команды:
env default -a
saveenv
boot
Как измерить время на DSP-ядре ElCore50 в тактах либо в наносекундах?
Можно читать счетчик тактов:
asm volatile("tcd tic_cntr, %0" : "=r"(value) : :);
Можно ли использовать CMOS1_CLK? Или только CMOS0?
Для использования cmos1_clk необходимо в dts для ноды display_encoder в свойстве clocks изменить MEDIA_CMOS0_CLK на MEDIA_CMOS1_CLK. При этом свойство clock-names необходимо оставить без изменений.
Где можно найти информацию как процессор инициализируется во время загрузки?
Обзор загрузки представлен тут - https://dist.elvees.com/mcom03/docs/linux-sdk/latest/components/buildroot.html#boot-flow
Как скомпилировать Qt-проект для запуска на плате?
На нашей плате нет SD-карты. Откуда можно загружаться?
Если у Вас нет возможности загрузить Linux с SD-карты, то Вы можете попробовать загрузить его из другого источника: с USB-носителя, из eMMC (если используете процессорный модуль Салют-ЭЛ24ПМ2), либо по TFTP и NFS.
Как прошить загрузчик в SPI-flash?
Возможно ли использовать для сборки на ПЭВМ дистрибутив Linux, отличный от CentOS 7?
Да, это возможно, однако, работоспособность системы сборки в данном случае не гарантируется. Проверка системы сборки на всём множестве дистрибутивов системы Linux не представляет ся возможной.
Возможно ли использовать виртуальную машину для сборки?
Да, это возможно. Требования к виртуальной машине аналогичны требованиям к ПЭВМ.
Будет ли работать под buildroot микросхема PHY DP83865 без изменений ядра?
Драйвер для DP83865 входит в состав драйвера "Drivers for National Semiconductor PHYs". И в большинстве случаев специальные драйверы phy не требуются, т.к. они стандартные и с ними может работать generic-драйвер.
Обязательно ли прошивать образ U-Boot в SPI-флеш, если я собираю свой образ Buildroot?
Да, обязательно.
Не загружается/некорректно работает ALT Linux/Astra Linux
Убедитесь, что в SPI-флеш прошит правильный загрузчик. Для корректной загрузки ALT Linux и Astra Linux требуется загрузчик U-Boot версии 2017.07.0.14 (соответствует Buildroot v2.9).
Как скомпилировать Qt-проект для запуска на плате?
Не загружается драйвер delcore30m при выполнении команды modprobe delcore30m
modprobe delcore30m
Для корректной загрузки драйвера необходимо выполнить следующую последовательность команд:
modprobe -r avico
echo -n "37220000.dma" > /sys/bus/amba/drivers/dma-pl330/unbind
modprobe -r delcore30m
modprobe delcore30m
Существует ли сборка Buildroot с RT-ядром?
Нет. Если есть необходимость работать с операционной системой реального времени, то предлагаем рассмотреть FreeRTOS и ЗОСРВ "Нейтрино".
Доступно ли описание на открытую часть драйвера графического контроллера 1892ВМ14Я (FrameBuffer)?
Какой компилятор используется в MCStudio для работы с DSP-ядром? Поддерживается ли C++?
Для работы с DSP ELCore-30M используется clang 4.0. Для DSP ELCore-30M не следует писать код на C++. Вычислительные алгоритмы нужно разрабатывать на С и ассемблере.
Где можно посмотреть пример включения L2-кэш?
Отдельного примера включения кэша второго уровня у нас нет. В целом, работа с L2-кэшем не относится к специфике нашего процессора, это вопрос скорее к самой архитектуре ARM.
В демо версии FreeRTOS реализована работа с L2-кэшем (см. файлы arm_cache.s и l2cc.c): https://nc2.elvees.com/index.php/s/AmPg52cfWnTFMyq?path=%2F1892VM14YA%2FFreeRTOS%2Fv1.0%2Fmcom02_freertos_demo
Как наблюдать тестовый паттерн для вывода с камеры?
Введите команду для выбора паттерна (* - номер выхода):
v4l2-ctrl --device /dev/video* --set-ctrl test_pattern=1
После чего выполнить:
v4l2tofb -i 2 -w 1920 -h 1080
Можно ли для DSP ядер писать код на C?
Да, это возможно. Для этого Вам необходимо создать отдельный проект для DSP-ядра в виде библиотеки (File → New → Project…).В проекте есть два файла (func1.s и func2.c) в которых реализуется необходимый код.
В основном проекте для ARM-ядра необходимо указать добавленную библиотеку в DSP Linker и объявить
используемые функции с ключевым словом extern. Данные функции можно вызывать инструкцией JS, дописав
dsp0__
или dsp1__
перед именем функции:
Start_DSP0:
JS dsp0__test_calc
Ядро для исполнения выбирается тем, в регистры для какого ядра записывается указатель на функцию вызова (см. РП глава 4).
Каким образом можно сделать так, чтобы драйвер не проверял наличие tda998x, или любым другим
способом обеспечить нормальную загрузку драйвера?
Обнаружили такую вещь:
На нашей плате при загрузке выпадает вот такое сообщение:
[ 11.570898] vpout-drm 38004000.vpout: failed to bind 0-0070 (ops tda998x_driver_exit [tda998x]): -6
[ 11.584193] vpout-drm 38004000.vpout: master bind failed: -6
Судя по всему, драйвер vpout изначально проверяет, есть ли в системе tda998x, его не находит, после чего драйвер далее не загружается. (я пробовал убирать драйвер и заново вставлять его с помощью modeprobe, при этом папка /dev/dri всё равно не создаётся).
У нас в системе этого конвертера физически нет, нас интересует panel из этого списка.
[ 11.590489] vpout-drm 38004000.vpout: bound 0-0070 (ops tda998x_driver_exit [tda998x])
[ 11.598614] vpout-drm 38004000.vpout: bound panel1 (ops panel_ops [vpout_drm_panel])
[ 11.626745] vpout-drm 38004000.vpout: bound panel0 (ops panel_ops [vpout_drm_panel])
При старте происходит попытка загрузить драйверы для тех устройств, которые прописаны в DTS. Наиболее правильным решением в этом случае будет удалить hdmi из DTS, пересобрать U-Boot и прошить его в SPI-флэш.
С какими заводскими настройками поставляется модуль Салют-ЭЛ24ПМ?
О заводских настройках можно почитать в документе: Спецификация заводских настроек модулей на базе 1892ВМ14Я
В частности, в конце SPI-флешки на модуле есть область памяти, где содержится структура следующего вида:
- factory_eth_mac — Ethernet MAC-адрес модуля. Октеты MAC-адреса разделяются символом двоеточия;
- factory_serial — серийный номер модуля;
- factory_model — модель модуля (например,
elvees,salute-el24d1-r1.3
для модуля Салют-ЭЛ24Д1 r1.3)
Имеет ли модуль Салют-ЭЛ24ПМ предустановленный MAC-адрес?
MAC-адрес прошивается в SPI-флеш в виде заводских настроек. U-Boot читает эти заводские настройки,
сам использует этот MAC-адрес и передаёт его дальше Linux'у. Но пользователь может переопределить
MAC-адрес, если изменит переменную окружения ethaddr
в U-Boot и сохранит переменные через команду
saveenv
.
При переносе ПМ на нашу плату с видеовыходом не наблюдаются сигналы синхронизации. Наша плата не
использует интерфейс I2C для определения типа монитора. По испытаниям на плате ОМ было выяснено, что
при отключённом мониторе программа не запускалась, то есть для запуска обработки графики требовалось
опознавание монитора, мы предполагаем, что проблема именно в этом. Можно ли заблокировать функцию
опознавания монитора и как это сделать?
Линуксу надо сообщить, на какое именно устройство будет выводиться картинка. По умолчанию устройством для вывода графики является порт HDMI. По-хорошему, под Ваше конечное устройство надо пересобрать U-Boot, изменив параметр video в командной строке ядра. Например, "video=ej070na" (название брать из https://github.com/elvees/u-boot/blob/mcom02/arch/arm/dts/mcom02-salute-el24om1-r1.1-1.2.dtsi).
Альтернативно – можно не пересобирать U-Boot, а действовать в соответствии с инструкцией по запуску вывода изображения на LCD https://dist.elvees.com/mcom02/buildroot/v3.1/docs/html/test-guide/index.html
Возможно ли перепрошить загрузчик/поменять переменные окружения U-Boot в SPI-флеш без использования
UART?
Возможно. Есть как минимум два способа:
- Через JTAG. Для этого вам нужно написать код, который вы загрузите по JTAG в память и запустите, а он сделает то, что вам нужно (перепрошьёт весь U-Boot и/или поменяет переменные U-Boot, хранящиеся в памяти SPI).
- Через внешний программатор (например, CH341A). Будьте крайне осторожны с этим способом, т.к. китайские программаторы подают сигналы с уровнем 5В, даже когда написано, что должны подавать 3.3В. Дешёвые необхо димо специально дорабатывать. Мы не несём ответственности за ваши действия, если у вас в микросхеме сгорит SPI-интерфейс.
Есть своя разработанная плата, к которой подключается процессорный модуль Салют-ЭЛ24ПМ. К нашей
плате подключается также внешний дисплей. На нашем оборудовании отсутствует HDMI-трансивер, а вместо
него используется конвертор SN65LVDS93, подключённый напрямую к выходу интерфейса RGB-24 на модуле
«САЛЮТ». Хотелось бы узнать, нет ли у Вас руководства для подключения внешнего дисплея? Может быть
Вы можете дать какие-то рекомендации?
Создать новый DTS на базе https://github.com/elvees/u-boot/blob/mcom02/arch/arm/dts/mcom02-salute-el24om1-r1.1-1.2.dtsi#L170
Удалить из DTS лишние компоненты включая HDMI TDA-передатчик (строка 170). Оставить объявление одного монитора, например, https://github.com/elvees/u-boot/blob/mcom02/arch/arm/dts/mcom02-salute-el24om1-r1.1-1.2.dtsi#L114 Наблюдать переключение сигналов на VPOUT. Исходный код драйвера vpout-drm - https://github.com/elvees/linux/tree/mcom02/drivers/gpu/drm/vpout Краткое описание драйвера - https://dist.elvees.com/mcom02/buildroot/v3.1/docs/html/linux-kernel-manual/index.html#vpout-drm Обратите внимание, что ссылка на github указывает на последнюю версию ядра Linux. В зависимости от дистрибутива может использоваться другой слепок (commit) ядра Linux.
Соответствие ядра Linux и релизов Buildroot приведено в https://dist.elvees.com/mcom02/buildroot/v3.1/docs/html/buildroot-changelog/index.html
Как измерить скорость считываниям данных с eMMC?
Можно использовать команду hdparm: -t /dev/mmcblk0p1
Возможно ли написание собственного ПО?
Не предполагается написание пользователем программы для микросхемы 1892КП1Я. Мы предоставляем управляющее ПО в бинарном виде. Оно прошивается во внешнее ПЗУ, подключённое к выводу nCS[3] (накристального ПЗУ нет), и самостоятельно осуществляет настройку и управление коммутатором. В итоге пользователь получает коммутатор SpaceWire, работающий в полном соответствии с требованиями стандарта.
Как прошивается данное ПЗУ?
Если используется микросхема Flash/EEPROM/etc — она может быть запрограммирована средствами микросхемы 1892КП1Я. Предоставляется утилита MCPROG, которая связывается с микросхемой 1892КП1Я по JTAG (с помощью нашего эмулятора MC-USB-JTAG) и через порт внешней памяти осуществляет запись в эту микросхему. Перечень поддерживаемых типов памяти приведен в документации на MCPROG. Если задействована неподдерживаемая микросхема Flash/EEPROM, можно самостоятельно добавить поддержку микросхемы в исходниках MCPROG.
Как осуществляется конфигурирование таблицы маршрутизации и других настроек коммутатора?
Возможны три варианта:
- настройка через UART. Протокол работы по UART приведен в описании управляющего ПО. Вариант является "отладочным" и как правило неудобен в работе на конечном изделии;
- настройка бинарного файла управляющего ПО. Для этого предоставляется отдельная утилита SpiNSAW. Скорректированный бинарный файл прошивается в ПЗУ, и с этого момента коммутатор по ресету/включению питания всегда инициализируется с одинаковыми настройками;
- настройка через SpaceWire. В любой порт коммутатора надо отправить пакет в формате RMAP, адресованный в нулевой порт (первый байт пакета – ноль). Управляющее ПО поймет, что это конфигурационный пакет, распарсит его содержимое и изменит/прочитает значение по нужному адресу памяти, если указанный в пакете адрес относится к числу разрешенных для работы по RMAP.
Каковы требования к внешнему ПЗУ?
- интерфейс статического асинхронного ОЗУ (SRAM);
- разрядность шины данных — 8 или 32 бита;
- время доступа — не более 1 мкс;
- объем — не менее 256 Кбайт (текущ ая сборка управляющего ПО имеет размер около 40 Кбайт, пока не предвидится существенного увеличения размера файла).
На отладочном модуле MCK-02REM-3U для 1892КП1Я установлена
микросхема SPI-флэш. Можно ли прошить управляющее ПО туда? Можно ли заложить SPI-флэш в
собственное устройство?
В настоящее время не существует и не запланировано сборки управляющего ПО, рассчитанного на загрузку из SPI-флэш. SPI-флэш заложена в отладочный модуль в расчете на появление такой сборки, но пока данная сборка не запланирована. Поэтому заложить в свое устройство SPI-флэш можно, но только в расчете на далекую перспективу. В ближайшее время работать все равно придется с параллельной флэш на nCS[3].
На отладочном модуле MCK-02REM-3U для 1892КП1Я установлено
внешнее ОЗУ. Необходимо ли оно для работы управляющего ПО? Нужно ли ставить его в собственное
устройство?
Внешнее ОЗУ заложено на отладочный модуль на случай существенного расширения функционала управляющего ПО. Для этого же сделаны две сборки управляющего ПО — с использованием внешнего ОЗУ и без него. По функционалу данные сборки друг от друга не отличаются. В настоящее время не запланировано какого-то существенного изменения функционала управляющего ПО. На свое устройство не имеет смысла ставить внешнее ОЗУ.
Oбеспечит ли коммутатор 1892КП1Я (модуль
MCK-02REM-3U) скорость SpaceWire 40 Мбит/с?
Да, обеспечит. Согласно ТУ на микросхему, максимальная скорость передачи данных по каналу SpaceWire составляет 250 Мбит/с.
Есть сеть из 5 устройств. Если одно из устройств перестаёт вычитывать данные из SpaceWire, то
тогда вся сеть перестаёт работать. Какие есть варианты восстановления сети для обмена данными с
другими устройствами? К микросхеме коммутатора есть доступ по UART.
Вследствие того, что используется червячная маршрутизация, когда одно устройство перестаёт работать, то сначала забиваются буферы передатчика того порта, который подключён к нерабочему устройству, потом переполняется приёмный буфер того порта, где подключён источник данных, и затем уже буфер передатчика отправителя.
Остальные порты коммутатора находятся в ожидании, когда можно будет передать данные в неработающее устройство, вследствие чего они также забиваются данными, работа коммутатора по передаче данных приостанавливается.
Управление коммутатором при помощи протокола RMAP. Для решения проблемы предлагаем передавать RMAP пакеты перед отправкой данных для коммутатора (до забитого устройства они все равно недойдут), чтобы убедиться, что требуемый порт не занят. Если выполнять подобную проверку, то можно будет избежать ситуации, когда забиваются все каналы сразу. Также можно будет понять, в каком порту проблема, и устранить её. Таким же способом может быть установлен бит LINK_DISABLED для отключения забитого канала.
Можно ли таким образом отключить линк и через UART? Если контролировать заполнение б уфера через
UART и если буфер заполнен, то после отключения линка через LINK_DISABLED отправленные на этот линк
пакеты должны будут отбрасываться?
Да, всё так. Но в случае, если Вы восстановите соединение с нерабочим устройством, скорее всего оно будет снова не готово принимать данные, и при отсылке данных зависание повторится, так как LINK_DISABLED не выполняет процедуру очистки буферов.
С какого адреса стартует отладочный модуль MCT-06-EM-6U?
Процессор всегда стартует с адреса 0xBFC0_0000 (физического 0x1FC0_0000).
На плате отладочном модуле MCT-06EM-6U выводу nCS[3] подключена параллельная флэш S29GL256P90TFIR10, как видно из описания, старшие адресные биты (25 и 24) не используются. Таким образом, при старте процессора, адрес 0x1FC0_0000 соответствует адресу 0х0х1DC0_0000 на модуле.
Размер памяти, подключенной к CSCON[3], задан аппаратно и равен 64МБ. При использовании памяти меньшего размера (32МБ) адреса будут отображаться зеркально: 0x1C00_0000 на 0x1E00_0000, 0x1DFF_FFFF на 0x1FFF_FFFF.
Как производится проверка и коррекция ошибок по коду Хэмминга при загрузке из внешней памяти?
Проверка и коррекция ошибок по коду Хемминга – выключена для всей памяти по умолчанию, и будет осуществляться только если Вы включите её в настройках регистра CSR_EXT (исходное состояние разрядов MODE[1:0] = 0x0 в таблице 8.17. «Формат регистра CSR_EXT»). Включение проверки и коррекции ошибок по Хеммингу для памяти, подключенной к сигналу выбора nCS[3], производится дополнительно, отдельным разрядом регистра CSR_EXT[4] (ROM). Описание регистра CSR_EXT приведено в п. 8.2.10 «Регистр CSR_EXT» на стр. 183 руководства пользователя на микросхему 1892ВМ206
Должна ли быть в ОППЗУ записана прошивка с учетом кодов Хэмминга?
Нет, если Вы не включаете проверку и коррекцию ошибок по коду Хемминга во время загрузки. Для использования режима проверки и коррекции ошибок при загрузке, ПЗУ должна быть включена в 32-разрядном режиме (выводы BOOT[1:0] = 0x0).
Есть ли какая то утилита, которая из файла прошивки сформирует файл с учетом кодов Хэмминга?
Такой утилиты нет.
Как разместить программу в кэш-памяти?
Расположить программу в кэш-памяти нельзя. Можно расположить ее в кэшируемом сегменте виртуальных адресов и включить кэширование. Кэширование сегмента включается записью нужного значения в соответствующее поле регистра CP0.Config. Часть сегментов виртуальных адресов является некэшируемой. Таким образом, в одном и том же диапазоне физических адресов могут быть расположены как кэшируемые данные/код, так и некэшируемые.
Подробнее о преобразовании адресов и кэшировании можно прочитать в одноименном документе
Как загрузить программу начальной загрузки для процессора 1892ВМ206( плата mct-06em-6u rev.2.2)
через SPI?
По ссылке доступна для скачивания программа mcprog новой версии, в которой поддержана SPI-Flash на MCT-06EM-6U.
Для загрузки нужно будет перевести переключатель SA7 на отладочном модуле в соответствующее положение.
Как разместить программу в кэш-памяти?
Расположить программу в кэш-памяти нельзя. Можно расположить её в кэшируемом сегменте виртуальных адресов и включить кэширование. Кэширование сегмента включается записью нужного значения в соответствующее поле регистра CP0.Config (или CP0.Config1, в зависимости от сегмента). Часть сегментов виртуальных адресов является некэшируемой. Таким образом, в одном и том же диапазоне физических адресов могут быть расположены как кэшируемые данные/код, так и некэшируемые.
Подробнее о преобразовании адресов и кэшировании можно прочитать в одноименном документе.
Как считать/запись значения регистров СР0 в программе на С?
Для работы с регистрами CP0 в языке Си необходимо исполь зовать ассемблерные вставки. Компилятор GCC предусматривает специальные конструкции, упрощающие работу с такими вставками. Они описаны в документации на компилятор, в частности здесь: https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Extended-Asm.html#Extended-Asm
Как сбросить бит EXL регистра CP0 Status?
Сброс бита EXL происходит при переключении из привилегированного режима процессора в обычный режим. Такое переключение осуществляется только командой "eret".
Есть ли пример для работы с DSP на C?
В примерах проектов MCStudio 4 для NVCom-02T существует пример dsp_library_main. При его запуске добавляется папка с примером dsplib. Для работы с ним необходимо сначала собрать проект dsplib, после чего собрать проект dsp_library_main. Отладка производится из проекта dsp_library_main.
В руководстве пользователя на микросхему в разделе 8.4 "Каналы DMA для портов" указано допустимое
число слов данных WN от 8 до 16 слов. Можно ли передавать меньше 8 слов?
Да, меньше 8 слов передать можно. Реальное число слов данных, которое надо передать, задаётся через поле WCX.WN – это длина пачки слов, передаваемой по внутренней шине. Посредством этого параметра можно плавно изменять приоритет каналов DMA относительно других устройств и относительно друг друга.
Возможно ли настроить SPI c автоматическим выставлением сигнала SS[0] (SS_DO = 0), но с заданием
задержки выставления сигнала SS[0] относительно MOSI?
Величиной задержки между падением SS в 0 и началом передачи слова можно управлять через регистр TSS_RATE. Сам по себе этот регистр предназначен для управления задержкой между передачей двух слов (т.е. длительностью пребывания SS в 1). Однако вместе с этой величиной пропорционально изменяются ещё и задержки перед установкой SS в 1 и после его падения в 0.
Как разместить программу в кэш-памяти?
Расположить программу в кэш-памяти нельзя. Можно расположить ее в кэшируемом сегменте виртуальных адресов и включить кэширование. Кэширование сегмента включается записью нужного значения в соответствующее поле регистра CP0.Config (или CP0.Config1, в зависимости от сегмента). Часть сегментов виртуальных адресов является некэшируемой. Таким образом, в одном и том же диапазоне физических адресов могут быть расположены как кэшируемые данные/код, так и некэшируемые. Подробнее о преобразовании адресов и кэшировании можно прочитать на странице.
Необходимо ли вводить такты ожидания?
При частоте SCLK = 80 МГц необходимо введение как минимум одного такта ожидания.

Какие режимы загрузки микросхемы предусмотрены?
Микросхема загружается либо из накристальной флеш-памяти, либо из накристальной OTP-памяти, либо из внешней флеш-памяти.
Предусмотрена ли возможность формирования программных DMA-запросов, т.е. запросов по инициативе
программиста, а не по инициативе связанного с периферийного блока?
Выбор типа запроса (программный/аппаратный) выполняется битами HS_SEL_SRC, HS_SEL_DST регистра CFGx канала DMA.Сами запросы формируются с помощью регистров, описанных в руководстве пльзователя в разделе 23.7.5 "Регистры Интерфейса Запросов".
Какие аппаратные средства предусмотрены для синхронизации работы двух ядер? Например, как обеспечить
монопольный доступ одного ядра к определенной ячейке памяти или периферийному устройству? В
некоторых зарубежных МК для этого предназначены аппаратные семафоры.
Для синхронизации в архитектуре ARM v8-M предусмотрены эксклюзивные обращения (Chapter B7 Synchronization and Semaphores, ARM v8-M Architecture Reference Manual). Подро бнее здесь - https://www.st.com/resource/en/programming_manual/pm0264-stm32-cortexm33-mcus-programming-manual-stmicroelectronics.pdf, 2.3.8 Synchronization primitives. В ELIoT01 эксклюзивные обращения поддерживаются для всех банков SRAM0,1,2,3.
Как отдавать команды SD карте в процессе её инициализации и для записи/чтения данных, в каком
формате записывать данные в FIFO для пересылки между CPU и контроллером, по какому адресу
расположено FIFO?
Для работы с портом SDMMC есть соответствующий драйвер, который также будет входить в состав SDK для отладочного модуля. Данный драйвер включает в себя решение для всех указанных вопросов.
Есть ли встроенный загрузчик для UART?
Возможность загрузки по UART есть: данные можно принимать во встроенную flash по нужному адресу. Загрузкой можно управлять пином GPIO (например, 1 - загрузка во flash, 0 - исполнение программы). Встроенного загрузчика нет.
Возникла проблема с библиотекой для работы с флеш-памятью контроллера. Функция
Flash_WriteWord не записывает данные в память.
Выполнение FLASH_WriteWord из области флеш-памяти невозможно ввиду архитектуры
микросхемы. Следует переместить код FLASH_WriteWord в SRAM-память. Например, с использованием
атрибута .section: __attribute__((__section__(".ramfunc")))
Нужна информацию о процедуре калибровки процесса измерения температуры.
Для тестов ПО можно использовать такие коэффициенты:
wcal = 11'd1311;
tcal = 11'd129;
wtconf = 8'b00111101;
wtcalconf = 4'b0000;