Hubris-это операционная среда микроконтроллера, предназначенная для глубоко встроенных систем с требованиями к надежности. Его дизайн был первоначально предложен в RFD41, но с тех пор значительно развивался.
Документация разработчика находится в Asciidoc в doc/
Directory. Он отображается через страницы GitHub и доступен по адресу https://oxidecomputer.github.io/hubris.
Репо изложено следующим образом.
app/
Is Is Is Dize Bircal Binaring для приложений для приложений, например, app/gimlet
содержит ящик для прошивки для Gimlet. Вообще говоря, если вы хотите создать изображение для чего -то, посмотрите здесь.
build/
содержит систему сборки и вспомогательные ящики.
chip/
содержит периферийные определения и отладку файлов поддержки для отдельных микроконтроллеров.
doc/
содержит документацию разработчика.
drv/
содержит драйверы, сочетание простых ящиков для водителей и полностью откровенных ящиков для бин сервера. Текущее соглашение заключается в том, что drv/SYSTEM-DEVICE
является драйвером для DEVICE
в SYSTEM
(где SYSTEM
обычно является именем SOC), тогда как drv/SYSTEM-DEVICE-server
является ящиком для бин сервера.
idl/
содержит определения интерфейса, написанные на идоле
lib/
содержит различные коммунальные библиотеки, которые мы написали. Если вам нужно сделать многоразовый ящик, который не вписывается в один из других каталогов, он, вероятно, принадлежит здесь.
stage0/
это загрузчик/ гиповизор, в первую очередь для LPC55.
support/
содержит некоторые файлы поддержки интерфейса и программирования, такие как поддельные сертификаты и изображения прошивки программиста.
sys/
содержит «системные» биты гордыня, а именно ядро ( sys/kern
), общий ящик, определяющий ABI ( sys/abi
), и библиотека пользователей, используемая задачами ( sys/userlib
).
task/
содержит повторные задачи, которые не являются драйверами. Различие между вещами, которые живут в task
против drv/something-server
нечетко. Используйте свое суждение.
test/
содержит тестовую структуру и бинарные ящики для построения его для различных досок.
website/
содержит исходный код для веб -сайта Hubris
В настоящее время мы поддерживаем Linux и Windows в качестве платформ первого уровня. MacOS также ежедневно используется сотрудниками оксида, но не тестируется в CI. Сборка, вероятно, также работает на Illumos; Если кто -то захочет подняться, чтобы поддерживать поддержку и непрерывную сборку для Illumos или MacOS, мы бы хотели помощи.
Чтобы отправить изменения для рассмотрения, подтолкните их в филиал в вилке и отправьте запрос на притяжение, чтобы объединить эту ветвь в master
. Для получения подробной информации см. CONTRIBUTING.md
.
Вам понадобится:
Набор инструментов на основе rustup
. rustup
позаботится об автоматической установке нашей закрепленной версии инструментального оборудования и целевых показателей перекрестной компиляции, когда вы впервые пытаетесь построить.
openocd
(в идеале 0,11) или (если использование LPC55) pyocd
(0,27 или более поздней). Обратите внимание, что выпуск 0,10 OpenOCD предшествует Stlink V3. Люди используют различные после 0,10, до 0,11 сборки, предоставленные менеджерами системных пакетов, с некоторым успехом, но если ваша система еще не упаковывает 0,11, их привлекло. Если вы собираетесь использовать HomeBrew на MacOS для установки OpenOCD, вам нужно использовать brew install --head openocd
для создания кончика основной ветви, а не использования последнего бинарного выпуска. Если вам нужно построить из источника, вы можете найти здесь openocd v0.11.0. При запуске ./configure
убедитесь, что вы видите, что ST-Link Programmer
установлен (что должно быть по умолчанию).
Libusb, обычно встречающийся из менеджера пакетов вашей системы как libusb-1.0.0
или аналогично.
libfdti1, найден как libftdi1-dev
или аналогичный.
Если вы будете запускать GDB, вы должны установить arm-none-eabi-gdb
. Обычно это из менеджера пакетов вашей системы с названием пакета, такого как arm-none-eabi-gdb
или gdb-multiarch
. Пользователи MacOS могут запустить brew install --cask gcc-arm-embedded
для установки официальных двоичных файлов ARM.
Отладчик гордости, смирение. Обратите внимание, что cargo install
странно взаимодействует с файлом rust-toolchain.toml
присутствующим в корне этого репозитория; Если вы запускаете следующую дословную команду для установки смирения, сделайте это из другого каталога:
cargo install --git https://github.com/oxidecomputer/humility.git --locked humility
cargo-readme
в качестве зависимости: cargo install cargo-readme
Есть три альтернативных способа установки OpenOcd:
Смотрите здесь, чтобы получить источник openocd
или получить неофициальные двоичные файлы.
В качестве альтернативы, вы можете установить с шоколадным:
> choco install openocd
Наконец, вы можете установить openocd
со Scoop:
> scoop bucket add extras
> scoop install openocd
Примечание: openocd
, установленная через scoop
, оказалась проблематичной для некоторых пользователей. Если вы испытываете проблемы, попробуйте установить через choco
или из Source (см. Выше).
Чтобы использовать программист ST-Link, вам, вероятно, нужно установить этот драйвер.
Нет необходимости строить и запускать высокочасовую, но если вы хотите общаться по серийной ссылке (и это не поддерживается вашим терминалом), вы захотите использовать замазку; Это руководство делает хорошую работу по объяснению, как.
Мы не используем cargo build
или cargo run
напрямую, потому что они слишком негибкие для наших целей. У нас есть сложная многоархитектура, которая немного за ними.
Вместо этого репо включает расширение груза под названием xtask
, которое называет наши пользовательские команды сборки.
cargo xtask dist TOMLFILE
создает распределительное изображение для приложения, описанного файлом TOML.
cargo xtask dist app/demo-stm32f4-discovery/app.toml
-STM32F4-Discoverycargo xtask dist app/demo-stm32f4-discovery/app-f3.toml
-STM32F3-Discoverycargo xtask dist app/lpc55xpresso/app.toml
- LPCXPRESSO55S69cargo xtask dist app/demo-stm32g0-nucleo/app-g031.toml
-STM32G031-NUCLEOcargo xtask dist app/demo-stm32g0-nucleo/app-g070.toml
-STM32G070-NUCLEOcargo xtask dist app/demo-stm32h7-nucleo/app-h743.toml
-NUCLEO-IH743ZI2cargo xtask dist app/demo-stm32h7-nucleo/app-h753.toml
-NUCLEO-IH753ZIcargo xtask dist app/gemini-bu/app.toml
- Доска для привлечения Gemini Поскольку полная сборка изображения может занять 10 секунд или более, в зависимости от того, что вы изменили, когда вы итерации на задаче или ядре, вы, вероятно, захотите построить его отдельно. Это то, для чего нужна cargo xtask build
.
Например, для создания task-ping
, как это было бы встроено на одном из изображений, но не создавая оставшуюся часть демонстрации, запустите:
$ cargo xtask build app/gimletlet/app.toml ping
clippy
cargo xtask clippy
Subcommand можно использовать для запуска clippy
против одной или нескольких задач в контексте конкретного изображения:
$ cargo xtask clippy app/gimletlet/app.toml ping pong
rust-analyzer
Система сборки Hubris не будет работать с rust-analyzer
из коробки.
Тем не менее, cargo xtask lsp
здесь, чтобы помочь: он принимает в качестве аргумента файл ржавчины и возвращает кодируемую JSON конфигурацию для того, как настроить rust-analyzer
.
Чтобы использовать эти данные, требуется некоторая конфигурация редактора!
(Мы еще не делали плагины, но это, безусловно, было бы возможно)
Используя Neovim и rust-tools
, вот пример конфигурации:
-- monkeypatch rust-tools to correctly detect our custom rust-analyzer
require ' rust-tools.utils.utils ' . is_ra_server = function ( client )
local name = client . name
local target = " rust_analyzer "
return string.sub ( client . name , 1 , string.len ( target )) == target
or client . name == " rust_analyzer-standalone "
end
-- Configure LSP through rust-tools.nvim plugin, with lots of bonus
-- content for Hubris compatibility
local cache = {}
local clients = {}
require ' rust-tools ' . setup {
tools = { -- rust-tools options
autoSetHints = true ,
inlay_hints = {
show_parameter_hints = false ,
parameter_hints_prefix = " " ,
other_hints_prefix = " " ,
-- do other configuration here as desired
},
},
server = {
on_new_config = function ( new_config , new_root_dir )
local bufnr = vim . api . nvim_get_current_buf ()
local bufname = vim . api . nvim_buf_get_name ( bufnr )
local dir = new_config . root_dir ()
if string.find ( dir , " hubris " ) then
-- Run `xtask lsp` for the target file, which gives us a JSON
-- dictionary with bonus configuration.
local prev_cwd = vim . fn . getcwd ()
vim . cmd ( " cd " .. dir )
local cmd = dir .. " /target/debug/xtask lsp "
-- Notify `xtask lsp` of existing clients in the CLI invocation,
-- so it can check against them first (which would mean a faster
-- attach)
for _ , v in pairs ( clients ) do
local c = vim . fn . escape ( vim . json . encode ( v ), ' " ' )
cmd = cmd .. ' -c" ' .. c .. ' " '
end
local handle = io.popen ( cmd .. bufname )
handle : flush ()
local result = handle : read ( " *a " )
handle : close ()
vim . cmd ( " cd " .. prev_cwd )
-- If `xtask` doesn't know about `lsp`, then it will print an error to
-- stderr and return nothing on stdout.
if result == " " then
vim . notify ( " recompile `xtask` for `lsp` support " , vim . log . levels . WARN )
end
-- If the given file should be handled with special care, then
-- we give the rust-analyzer client a custom name (to prevent
-- multiple buffers from attaching to it), then cache the JSON in
-- a local variable for use in `on_attach`
local json = vim . json . decode ( result )
if json [ " Ok " ] ~= nil then
new_config . name = " rust_analyzer_ " .. json . Ok . hash
cache [ bufnr ] = json
table.insert ( clients , { toml = json . Ok . app , task = json . Ok . task })
else
-- TODO:
-- vim.notify(vim.inspect(json.Err), vim.log.levels.ERROR)
end
end
end ,
on_attach = function ( client , bufnr )
local json = cache [ bufnr ]
if json ~= nil then
local config = vim . deepcopy ( client . config )
local ra = config . settings [ " rust-analyzer " ]
-- Do rust-analyzer builds in a separate folder to avoid blocking
-- the main build with a file lock.
table.insert ( json . Ok . buildOverrideCommand , " --target-dir " )
table.insert ( json . Ok . buildOverrideCommand , " target/rust-analyzer " )
ra . cargo = {
extraEnv = json . Ok . extraEnv ,
features = json . Ok . features ,
noDefaultFeatures = true ,
target = json . Ok . target ,
buildScripts = {
overrideCommand = json . Ok . buildOverrideCommand ,
},
}
ra . check = {
overrideCommand = json . Ok . buildOverrideCommand ,
}
config . lspinfo = function ()
return { " Hubris app: " .. json . Ok . app ,
" Hubris task: " .. json . Ok . task }
end
client . config = config
end
end ,
settings = {
[ " rust-analyzer " ] = {
-- enable clippy on save
checkOnSave = {
command = " clippy " ,
extraArgs = { ' --target-dir ' , ' target/rust-analyzer ' },
},
diagnostics = {
disabled = { " inactive-code " },
},
}
}
},
}
end
Когда создается новая конфигурация LSP ( on_new_config
), мы запускаем cargo xtask lsp
в целевом файле. Конфигурация JSON включает хэш конфигурации; Мы используем этот хэш для изменения имени клиента от rust_analyzer
на rust_analyzer_$HASH
. Это мешает Neovim попытаться повторно использовать существующего клиента, который обычно осуществляется по имени клиента и корневым каталогам рабочего пространства; В Hubris мы хотим, чтобы несколько клиентов сосуществовали с тем же корнем рабочего пространства, поэтому им нужны разные имена. Затем мы спрятаем оставшуюся часть конфигурации в локальной переменной ( cache
) и записываем существование этого клиента в clients
.
При подключении к LSP мы стараемся вытащить конфигурацию из cache
. Если кто -то существует, то мы знаем, что имеем дело с буфером гордыня; Скопируйте соответствующие части конфигурации.
Обратите внимание, что это не xtask
для вас; Предполагается, что он уже существует в target/debug/xtask
. Это должно быть правдой, если вы регулярно используете гордость, и сохраняет значительные количества времени при открытии нового файла.
Чтобы создать свою собственную задачу, самый простой метод - это:
task/template
новое имя.Cargo.toml
с вашим именем и новым названием пакета.Cargo.toml
.app.toml
.cargo xtask build
чтобы скомпилировать его. Типичная запись app.toml
[ tasks . name_for_task_in_this_image ]
name = " my-task-target-name "
priority = 1
requires = { flash = 1024 , ram = 1024 }
start = true
Можно сгенерировать график, который показывает отношения различных задач и их приоритетов. Полученный файл находится в формате dot
Graphviz. Источник Dot
может быть включен в источник Asciidoctor или приведен в различные форматы.
Чтобы создать и просмотреть график SVG для gimletlet
на Ubuntu, убедитесь, что пакет graphviz
установлен. Затем генерируйте график:
$ cargo xtask graph -o gimletlet.dot app/gimletlet/app.toml
$ dot -Tsvg gimletlet.dot > gimletlet.svg
$ xdg-open gimletlet.svg
Команды Bash для генерации всех графиков:
APPS=( $(find app -name '*.toml' ! -name Cargo.toml) )
for app in "${APPS[@]}"
do
out=$(basename ${app////_} .toml).dot
svg=$(basename $out .dot).svg
cargo xtask graph -o $out $app
dot -Tsvg $out > $svg
done
first="${APPS[0]}"
out="$(basename ${first////_} .toml).dot"
svg="$(basename $out .dot).svg"
xdg-open "${svg}"
Если eog
является зрителем по умолчанию, открытие первого SVG в каталоге позволит ездить на велосипеде через все доступные графики, используя одно и то же окно.
Hubris тесно связан с его отладчиком, смирением, которое используется для команд ниже, либо неявно (в cargo xtask flash
), либо явно (в cargo xtask humility
).
Если двоичный файл humility
недоступен на вашем $PATH
, переменная среды HUBRIS_HUMILITY_PATH
может использоваться для обеспечения пути к бинарному.
Изображение в архиве гордыня можно вспыхнуть непосредственно на целевую плату, запустив cargo xtask flash
и указав соответствующий файл TOML. Это запустит cargo xtask dist
, а затем передаст полученный архив сборки в humility flash
. humility
вызовет либо OpenOCD, либо PYOCD, чтобы вспыхивать изображение; Точный вызов зависит от доски и кодируется в архиве сборки.
cargo xtask flash app/lpc55xpresso/app.toml
cargo xtask flash app/demo-stm32f4-discovery/app.toml
cargo xtask flash app/demo-stm32h7-nucleo/app-h743.toml
cargo xtask flash app/demo-stm32h7-nucleo/app-h753.toml
cargo xtask flash app/gemini-bu/app.toml
Смирение запускается на месте , указав архив на непосредственно подключенной плате или посмерти, указав дамп. В качестве удобства для разработки смирение также можно запустить in situ , указав соответствующий Toml, например, на машине с прикрепленной платой обнаружения STM32F4:
$ cargo xtask humility app/demo-stm32f4-discovery/app.toml -- tasks
Finished dev [optimized + debuginfo] target(s) in 0.17s
Running `target/debug/xtask humility demo/app.toml -- tasks`
humility: attached via ST-Link
ID ADDR TASK GEN STATE
0 20000108 jefe 0 Healthy(InRecv(None))
1 20000178 rcc_driver 0 Healthy(InRecv(None))
2 200001e8 usart_driver 0 Healthy(InRecv(None))
3 20000258 user_leds 0 Healthy(Runnable) <-
4 200002c8 ping 48 Healthy(Runnable)
5 20000338 pong 0 Healthy(InRecv(None))
6 200003a8 idle 0 Healthy(Runnable)
humility
включает в себя подкоманду gdb
, которая прикрепляется к работающей системе с использованием arm-none-eabi-gdb
, необязательно запускающего свой собственный экземпляр openocd
на основе данных конфигурации в архиве сборки.
Для удобства, есть также cargo xtask gdb
фасад, который называет humility
с помощью соответствующего архива сборки:
$ cargo xtask gdb app/demo-stm32f4-discovery/app.toml -- --run-openocd
# ... lots of output elided ...
task_idle::main () at task/idle/src/main.rs:14
14 loop {
Breakpoint 1 at 0x800434c: file /crates.io/cortex-m-rt-0.6.15/src/lib.rs, line 560.
Note: automatically using hardware breakpoints for read-only addresses.
semihosting is enabled
semihosting is enabled
(gdb)
Обратите внимание, что cargo xtask gdb
(по умолчанию) также запускает dist
и flash
, чтобы убедиться, что изображение на чипе актуально. Вариант -n
/ --noflash
пропускает эти шаги.
Ядро высокомерие испытывается с помощью специального тестового изображения , которое включает в себя тестовый бегун, помощник и тестовый набор. Тестовое изображение излучает свои результаты через ITM. Хотя эти результаты можно интерпретировать вручную, humility test
автоматизирует это. Сам humility test
наиболее легко запускается с помощью cargo xtask test
, который запускает эквивалент cargo xtask dist
, cargo xtask flash
и cargo xtask humility test
. Точный вызов зависит от доски:
cargo xtask test test/tests-lpc55xpresso/app.toml
cargo xtask test test/tests-stm32fx/app-f3.toml
cargo xtask test test/tests-stm32fx/app.toml
cargo xtask test test/tests-stm32h7/app-h743.toml
H743ZI2.cargo xtask test test/tests-stm32h7/app-h753.toml
ПРИМЕЧАНИЕ. cargo xtask humility test
работает OpenOCD для подключения к устройству. Вы должны выйти из любых других экземпляров OpenOcd, которые вы подключили к устройству перед запуском тестов.
См. Документацию на humility test
для получения подробной информации о результатах теста.
Выход из тестов захвачен humility test
; sys_log!()
Вызовы к тестам могут быть добавлены, а затем захвачены в дампе humility test
. Чтобы захватить дамп из тестов, которые проходят в противном случае, используйте cargo xtask humility
напрямую и передайте флаг -d
, например:
$ cargo xtask humility test/tests-stm32fx/app.toml -- test -d
...
humility: attached via ST-Link
humility: TPIU sync packet found at offset 1
humility: ITM synchronization packet found at offset 12
humility: expecting 22 cases
humility: running test_send ... ok
...
humility: running test_timer_notify ... ok
humility: running test_timer_notify_past ... ok
humility: tests completed: pass
humility: test output dumped to hubris.testout.2
Если нужно запустить GDB и тестовый набор, используйте cargo xtask gdb
с помощью TOML тестового изображения и соответствующего файла GDB, а затем поместите точки останова в интересующем тестовом испытании.
См. Документы о рождении Близнецов (внутреннее оксидное репо)
Для совета по обнаружению STM32F3 SB10 должен быть припаян, чтобы ITM работал! Этот паяный мост по умолчанию будет открытым, что оставляет SWO отключенным. См. Руководство пользователя Discovery STM32F3 (UM1570) для схемы и деталей.
Чтобы использовать LPCXPRESSO55S69, вам понадобится PYOCD, версия 0,27,0 или более поздней версии.
LPCXPresso55S69-это в чем-то беспорядок, потому что встроенный встроенный отладчик, LPC-Link2, неправильно поддерживает SWO/SWV
Если у вас есть акции LPC-Link2, он сообщит о себе через pyocd list
:
$ pyocd list
# Probe Unique ID
-----------------------------------------------------------------
0 NXP Semiconductors LPC-LINK2 CMSIS-DAP V5.361 JSAQCQIQ
Также возможно, что у вас есть прошивка Segger J-Link-прошивка, которая сделает его одиозное присутствие известным, чтобы вы побуждали вас принимать условия лицензии при запуске pyocd list
!
$ pyocd list
# Probe Unique ID
-----------------------------------------------------------------------------
0 Segger J-Link LPCXpresso V2 compiled Apr 4 2019 16:54:03 726424936
В любом из этих случаев вы должны-в качестве единовременного шага-установить новую прошивку на LPC-Link2. Новая прошивка представляет собой сборку Daplink (с открытым исходным кодом), которую мы с любовью называем Ricklink в честь инженера, которому удалось построить все это - немалый подвиг!
Есть два файла, которые вам понадобятся, оба содержатся в репозитории гордыня:
Вам также понадобится программа LPCScrypt от NXP.
Вот шаги по установке Ricklink:
Установите джемпер DFU. Это можно найти рядом с заголовком SWD на левой стороне доски; Это помечено «DFU».
Запустить scripts/boot_lpcscrypt
из установленного программного обеспечения LPCScrypt:
$ /usr/local/lpcscrypt/scripts/boot_lpcscrypt
Looking for DFU devices with VID 1fc9 PID 000c ...
dfu-util -d 1fc9:000c -c 1 -i 0 -t 2048 -R -D /usr/local/lpcscrypt/scripts/../bin/LPCScrypt_228.bin.hdr
Booted LPCScrypt target (1fc9:000c) with /usr/local/lpcscrypt/scripts/../bin/LPCScrypt_228.bin.hdr
$
lpcscrypt clockslow
: $ /usr/local/lpcscrypt/bin/lpcscrypt clockslow
$
lpcscrypt program +w1 0x0 BankA
чтобы перезаписать существующую прошивку $ /usr/local/lpcscrypt/bin/lpcscrypt program +w1 0x0 BankA
................
Programmed 524288 bytes to 0x1a000000 in 2.610s (196.165KB/sec)
$
lpcscrypt program +c <path-to-lpc4322_bl_crc.bin> BankA
: $ /usr/local/lpcscrypt/bin/lpcscrypt program +c ~ /hubris/support/lpc4322_bl_crc.bin BankA
..
Programmed 57344 bytes to 0x1a000000 in 0.827s (67.717KB/sec)
$
Предполагая, что он успешно, удалите джампер DFU и отключите/переопределите USB
Теперь должно быть USB -устройства для хранения с названием MAINTENANCE
# fdisk -l
Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: Micron 2200S NVMe 512GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A8653F99-39AB-4F67-A9C9-524A2864856E
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 967393279 966342656 460.8G Linux filesystem
/dev/nvme0n1p3 967393280 1000214527 32821248 15.7G Linux swap
Disk /dev/sda: 64.1 MiB, 67174400 bytes, 131200 sectors
Disk model: VFS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
# mount /dev/sda /mnt
# ls /mnt
DETAILS.TXT PRODINFO.HTM
# cat /mnt/DETAILS.TXT
# DAPLink Firmware - see https://mbed.com/daplink
Unique ID: 02360b000d96e4fc00000000000000000000000097969905
HIC ID: 97969905
Auto Reset: 1
Automation allowed: 1
Overflow detection: 1
Daplink Mode: Interface
Interface Version: 0254
Bootloader Version: 0254
Git SHA: f499eb6ec4a847a2b78831fe1acc856fd8eb2f28
Local Mods: 1
USB Interfaces: MSD, CDC, HID, WebUSB
Bootloader CRC: 0x09974fb3
Interface CRC: 0x7174ab4c
Remount count: 0
URL: https://os.mbed.com/platforms/LPCXpresso55S69/
lpc4322_lpc55s69xpresso_if_rla_swo_hacks.bin
на USB -диск $ sudo cp ~ /hubris/support/lpc4322_lpc55s69xpresso_if_rla_swo_hacks.bin /mnt
$
# umount /mnt
#
Убедитесь, что вы находитесь в новой прошивке, запустив pyocd list
:
$ pyocd list
# Probe Unique ID
-------------------------------------------------------------------------------------
0 LPCXpresso55S69 [lpc55s69] 02360b000d96e4fc00000000000000000000000097969905
Обратите внимание, что Ricklink, работающий на LPCXPresso55S69, также может использоваться в качестве отладчика для LPC55S28 на доске носителей Близнецов. Чтобы сделать это, сначала следуйте всем инструкциям выше, чтобы доставить Ricklink на ваш LPCXPresso55s69. Затем:
Используя паяльный железо, припаяйте двухконтактный заголовок на J5. J5 можно найти слева от P1 и ниже перемычки «отладчика» (J3).
Поместите перемычку на новый заголовок
Переместите перемычку «Debugger» (J3) в «Ext».
Используйте кабель SWD (10-контактный кабель 2X5 1,27 мм), чтобы подключить SWD на LPCXPresso55S69 к SWD под платой-носителями на Близнецах (J202)
(Чтобы ваш Ricklink еще раз отладил свой локальный LPC55S69, удалите перемычку на J5 и переместите J3 в «LOC».)
Если прикреплены несколько зондов, инструменты могут изо всех сил пытаться найти правильный в нужное время. В частности, OpenOCD выберет первый, который он находит; Чтобы заставить OpenOcd выбрать конкретный зонд, вы можете установить серийное число зонда (например, из humility probe
), а затем указать, что серийный номер в соответствующем openocd.cfg
добавив, например:
interface hla
hla_serial 271828182845904523536028
(Где 271828182845904523536028
является серийным номером зонда.)
Обычно, что отладка ключей, а также доски для разработки со встроенным оборудованием отладки, такими как серия Nucleo, поставляются со старой прошивкой.
Вы не сможете использовать униженную прошивку ST-Link. Смирение скажет вам, что это так, например, при попытке использовать humility test
:
...
Warn : Adding extra erase range, 0x08020060 .. 0x0803ffff
** Programming Finished **
** Verify Started **
** Verified OK **
** Resetting Target **
humility: test failed: The firmware on the probe is outdated
Error: test failed
Следуйте этой ссылке «Обновление прошивки ST-Link», чтобы найти программное обеспечение и инструкции, необходимые для установки текущей прошивки.