LINUX.ORG.RU

st-flash write не работает

 


0

1

У меня плата NUCLEO-L073RZ. Создал пример с HAL, скомпилировал, получился bin. Когда я эту плату соединяю с компьютером, появляется флешка. Я в эту флешку закинул этот bin, всё сработало, лампочка моргает как положено. Теперь хочу через st-flash записать. Не получается.

$ st-info --probe
Found 1 stlink programmers
  version:    V2J38S27
  serial:     066CFF494849887767255731
  flash:      196608 (pagesize: 128)
  sram:       20480
  chipid:     0x0447
  descr:      L0xx Category 5

$ st-flash write build/stm32cubetest.bin 0x8000000
st-flash 1.7.0
2021-11-03T00:55:19 INFO common.c: L0xx Category 5: 20 KiB SRAM, 192 KiB flash in at least 128 byte pages.
file build/stm32cubetest.bin md5 checksum: 887f85a4d767f3f16d13668ae959e72, stlink checksum: 0x0006629a
2021-11-03T00:55:19 INFO common.c: Attempting to write 4748 (0x128c) bytes to stm32 address: 134217728 (0x8000000)
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08000000 erased
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08000080 erased
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08000100 erased
...
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08001180 erased
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08001200 erased
2021-11-03T00:55:20 INFO common.c: Flash page at addr: 0x08001280 erased
2021-11-03T00:55:20 INFO common.c: Finished erasing 38 pages of 128 (0x80) bytes
2021-11-03T00:55:20 INFO common.c: Starting Flash write for L0
2021-11-03T00:55:20 INFO common.c: Starting Half page flash write for STM32L core id
2021-11-03T00:55:20 INFO flash_loader.c: Successfully loaded flash loader in sram
2021-11-03T00:55:20 INFO flash_loader.c: Clear DFSR
2021-11-03T00:55:20 ERROR flash_loader.c: Flash loader run error
2021-11-03T00:55:20 WARN flash_loader.c: Loader state: R2 0x0 R15 0x0
2021-11-03T00:55:20 WARN flash_loader.c: MCU state: DHCSR 0x1080009 DFSR 0x0 CFSR 0x0 HFSR 0x0
2021-11-03T00:55:20 WARN common.c: l1_stlink_flash_loader_run(0x8000000) failed! == -1
2021-11-03T00:55:20 WARN common.c: 
write_half_pages failed == -1
тут оно висит
^C
[!] send_recv send request failed: LIBUSB_ERROR_BUSY
[!] send_recv STLINK_DEBUG_READREG
2021-11-03T00:55:56 INFO common.c: Go to Thumb mode
[!] send_recv send request failed: LIBUSB_ERROR_BUSY
[!] send_recv STLINK_DEBUG_WRITEREG
[!] send_recv send request failed: LIBUSB_ERROR_BUSY
[!] send_recv STLINK_JTAG_WRITEDEBUG_32BIT
[!] send_recv send request failed: LIBUSB_ERROR_BUSY
[!] send_recv STLINK_JTAG_WRITEDEBUG_32BIT
libusb: error [do_close] Device handle closed while transfer was still being processed, but the device is still connected as far as we know
libusb: error [do_close] A cancellation hasn't even been scheduled on the transfer for which the device is closing
st-flash: os/threads_posix.h:58: usbi_mutex_destroy: Assertion `pthread_mutex_destroy(mutex) == 0' failed.
Aborted (core dumped)

После этого девайс вообще не отвечает и даже reset не помогает, только перетыкивание из USB.

STM32Programmer у меня не запускается, жава падает с коре дампом. Предполагаю, что из-за wayland, пока хочу без него обойтись.

Возможно я неправильно указываю параметр ADDR, но во всех примерах указывают 0x8000000, никаких инструкций по поиску правильного адреса я не нашёл.

Прошивку на st-link который на плате я обновил до последней версии.

stlink у меня из дистрибутива, версия 1.7.0. Судя по гитхабу это последняя.

★★★★★

Последнее исправление: Legioner (всего исправлений: 1)

О, у меня подобное было. Помогло Ctrl+C -> перевытаскивание -> повторный запуск st-flash, после этого бинарник нормально записывался на плату

x86-
()

Странно прям. С st-flash у меня были проблемы, но не такого плана. Попробуй может в рамках плясок с бубном перед записью прошивки erase сделать.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от izzholtik

Я CubeMX установил и сгенерировал проект с Makefile, дальше уже через vim ковыряюсь. IDE пока не пробовал ставить, в целом мне их тулкит не очень нравится, хочу с консольными тулзами всё делать.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от apt_install_lrzsz

erase сделал, нормально отработал. write висит точно так же.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

CLion вроде умеет в интеграцию с их тулзами, но у меня летом не заработало.
Мя к тому, что обычно оно работает изкоробки, неплохо бы чекнуть исправность штуковин из рекомендуемой среды.

izzholtik ★★★
()

но во всех примерах указывают 0x8000000

Судя по reference manual, так оно и есть. Ты не ошибся.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от izzholtik

Ты имеешь ввиду запустить IDE и прошить оттуда, а потом выудить, с какими параметрами оно прошиватор запускает, если всё нормально прошло?

Ну, поддерживаю. Может помочь.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от izzholtik

Да, кстати, плюсую. ТС, надо бы обновить версию ПО программатора, если она не последняя. А что именно за программатор ты используешь?

И на всякий случай глянь, что dmesg показывает в плане ошибок при подключении платы.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от apt_install_lrzsz

Версию программатора я обновил. Программатор ST-Link, который на самой плате встроен. dmesg ничего особого не показывает.

Legioner ★★★★★
() автор топика

Ужасно, что в наше время люди - такие идиоты…

anonymous
()

В общем так и не разобрался с Cube IDE, долго колдовал, вроде он запускает проект, но лампочка моргать не начинает. Ошибок каких-то не заметил. Пробовал с gdb и openocd.

В итоге с консоли написал

openocd -f board/st_nucleo_l073rz.cfg -c 'program build/stm32cubetest.elf verify reset exit'

и всё заработало. Буду эту команду использовать, не знаю, чем она от st-flash принципиально отличается. Видимо в st-flash нет поддержки этого процессора.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Harald

Провод комплектный, не длинный. Так он у меня в хабе, но пробовал и включать отдельно, без разницы.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от izzholtik

Ты калокод читал, который этим говном генерится? И сравни теперь с нормальным кодом на CMSIS.

Нет, калокуб - удел дегенератов-абдуринщиков.

anonymous
()
Ответ на: комментарий от apt_install_lrzsz

Понятно, что дело в кривых руках. Но надо же идиота пристыдить!

Скорей всего, у него там в прошивке swd отключен, а то и весь jtag. Либо ещё что нарукожопил. Мало ли, что там калокуб сгенерит?

anonymous
()

Понятно

Скорей всего

а то и

Либо ещё что

Мало ли

Эдуард, завязывай заливаться боярой с утра, а то на глазах откисаешь.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от apt_install_lrzsz

Ты б лучше ТСа посрамил! Сколько, интересно, этому долбодятлу лет?

Но, блин, калокуб — это ж та же самая абдурина! Ничего хорошего таким способом не напрограммируешь. Помнится, один чувак на быдлохабре написал статейку, мол, у STM32 говеный USB, на что я ему посоветовал проверить некалокубовские реализации. И тут до чувака, видимо, дошло, что ожидать от быдлокодеров ST вменяемого кода дольше, чем ждать, когда рак на горе свистнет!

anonymous
()
Ответ на: комментарий от anonymous

Не хочу кормить троля, но всё же покормлю, скучно, пока тут жаба лопатит гигабайты. Это была моя первая программа на стм32 и всё, что мне сейчас хочется - это увидеть, что она работает. Если бы ты внимательно прочитал тему, то увидел бы, что хал и прочие тулзы от stm мне не особо нравятся. Но лучше начинать с чего-то, что хоть как-то работает, потому, что этот хал это обычные сишные функции, в которые я могу залезть, посмотреть, как они написаны и переписать по-своему, если захочу без него обойтись. От мигания диодом до usb мне очень далеко. А ты со своим cmsis-ом тут лезешь. К чему он мне, я не знаю, что с ним делать. В идеале я бы все эти ваши эмбеддед либы выкинул, все они написаны через одно место и писал бы на обычном С++. Но до этого уровня мне пока далеко.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

Ну и начни с мигания светодиодом! Для начала собери в кучу стартап, линкер-скрипт и нужные заголовочные файлы. Напиши makefile. И простенький blink.c.

Примеров в сети навалом, на том же гитхабе! Но нет, он полез в калокуб...

На С++ тоже можно. Я встречал на форумах пару человек, которые на крестах пишут. Но тебе придется по сути минимум полгода убить на то, чтобы написать себе header-only шаблонную библиотеку. И лишь потом ты сможешь этим пользоваться.

На сях же сразу взял, да написал! Скачай с сайта ST сниппеты под F0 - пригодятся.

И да, я тебя не троллю. Просто жалко долбоеба молодого.

anonymous
()
Ответ на: комментарий от Legioner

Ну тащемта использование CMSIS – это и есть

бы все эти ваши эмбеддед либы выкинул

Потому как это не библиотека в обычном понимании, а громадная простыня define’ов адресов регистров и некоторых полезных макросов.

А куб как задумка может и хорош был, но реализация днище ещё то.

apt_install_lrzsz ★★★
()

получился bin

Возможно я неправильно указываю параметр ADDR, но во всех примерах указывают 0x8000000

Лучше hex или, если прошивальщик умеет, то оставить ELF. Тогда бы не пришлось указывать этот адрес.

anonymous
()
Ответ на: комментарий от apt_install_lrzsz

Из кодогенератора никогда ничего хорошего не выйдет!

Что до ST, то единственное, что они полезного сделали — это набор сниппетов для STM32F0. Я их активно использую, параллельно накапливая свои сниппеты. Жаль, что они не продолжили делать сниппеты под другие серии, а замутили всякий кал: сначала SPL, а потом HAL.

Я вообще поражаюсь: ну, если им не хочется на С++ писать шаблоны, то неужто они не знают, что такое true inline функции, а то и вообще тупо макросы? Зачем было этот маразм со 100500 функциями лепить? В итоге получили свистопердящее нечто. Даже USB CDC не смогли под свои же камни сделать нормально! Если уж у меня - того еще рукожопа - CDC получилась шустрей, чем у этой армии индусов?

anonymous
()
Ответ на: комментарий от anonymous

Я, конечно, в плане плюсов не настоящий сварщик, но, как мне кажется, индусский код из 100500 функций на си всё же терпимее, чем фарш из плюсовых шаблонов или сишных многоярусных макросов от тех же самых индусов.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от apt_install_lrzsz

Ты просто другого не пробовал. Посмотри хотя бы, какой лаконичный код на С++ получается. Но, конечно, нужно весь нижний уровень самому сделать, чтобы и бинарник генерировался полноценным, таким, какой сам на асме бы написал!

Но лично я считаю, что самый идеал - заголовочные файлы от ST + базовый набор CMSIS, и всË!

anonymous
()
Ответ на: комментарий от Legioner

От мигания диодом до usb мне очень далеко.

Это если с кубом. Причём ещё и USB, как вон Эдик правильно замечает, получишь неполноценный. На CMSIS всё намного проще, разница между миганием светодиодом и посылкой USB-пакета не такая уж и большая. Регистры настроил, дескриптор написал — и шли что хочешь. Сколько вот твой блинки на кубе занимает? В то время, как на CMSIS прошивку для какого-нибудь USB ACМ легко можно в пару килобайт упихать, что говорит об объёме сишного кода.

Вот и думай, нужна ли тебе та кривая дорожка.

anonymous
()
Ответ на: комментарий от anonymous

На CMSIS всё намного проще, разница между миганием светодиодом и посылкой USB-пакета не такая уж и большая. Регистры настроил, дескриптор написал — и шли что хочешь.

Ага, щас. USB все-таки штука сложная, даже имея под рукой нормальную реализацию придется неплохо знать теорию чтобы хоть что-то отправилось.

Сколько вот твой блинки на кубе занимает?

Тут уже обсуждали:

stm32f103c8/TIM3 (комментарий)

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Ну там бред написан. Моя программа на кубе собирается секунд 5 может. Размер точно не помню, позже могу написать, но что-то вроде 1.3 КБ.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Еще одно дерьмище.

Ну зачем ты в это говно лезешь? Есть даташит, есть мануал. Читай - пиши. Все!!!

anonymous
()
Ответ на: комментарий от COKPOWEHEU

USB все-таки штука сложная

Ну конечно, это не блинки, но не такая уж, чтобы прям сложная. С основными понятиями можно за вечер разобраться, если читать вдумчиво. Потом читаешь RM, пишешь дескриптор, настраиваешь EP0, пара условий в обработчике прерывания — и ты уже шлёшь байтики.

Помигать СД, знаешь ли, тоже бывает непросто. Помнится тут чел бегал, полгода не мог ШИМ настроить. И вот такие потом ноют на форумах, что всё плохо, сложно, непроходимо, отбивая тем самым стремление у нормальных людей. А на самом деле даже низкоуровневые интерфейсы МК продуманны для людей, с мыслью о том, что программировать контроллеры будут именно через регистры. Все мануалы пишутся именно под такой интерфейс, с объяснением каждого битика. Никакой куб с его раздутыми абстракциями тебе не даст такой простоты и понимания МК.

anonymous
()
Ответ на: комментарий от Legioner

собирается секунд 5

Боже, как ты это терпишь?

anonymous
()
Ответ на: комментарий от Legioner

А что насчёт platformio скажешь?

Не знаю. Мне хватает дефайнов из CMSIS.

anonymous
()
Ответ на: комментарий от anonymous

А стандарт WebUSB так получится поддержать? Я в этом ничего не понимаю но я хочу свой теоретический девайс из жаваскрипта настраивать через браузер. По-моему это очень круто и удобно.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

из жаваскрипта настраивать через браузер

Что это за бред? Какой идиот мог вообще такое придумать? Что может быть проще настройки из терминала?

anonymous
()
Ответ на: комментарий от anonymous

Ну конечно, это не блинки, но не такая уж, чтобы прям сложная. С основными понятиями можно за вечер разобраться, если читать вдумчиво.

Я разбирался около полугода. Не непрерывно, понятное дело, и далеко не каждый день. Но информации там освоить надо немало. Там одного общего описания 500 страниц, не говоря про конкретные классы. А ведь еще надо понять как это реализовали ST, продраться сквозь их описания и наркоманские регистры.

Помигать СД, знаешь ли, тоже бывает непросто. Помнится тут чел бегал, полгода не мог ШИМ настроить.

Тот «чел» даже в мыслях не имел разобраться с контроллером. ШИМ настраивается строк в десять, и то половину можно опустить, поскольку дефолтные значения регистров позволяют.

Все мануалы пишутся именно под такой интерфейс, с объяснением каждого битика.

В этом мне RISC-V понравился (gd32vf103), там гораздо лучше сделана нумерация периферии. Например SPI_CTL0(0) вместо SPI1->CR1. Очень удобно выносить номера модулей в константы. Ну и нумерация с нуля, конечно.

COKPOWEHEU
()
Ответ на: комментарий от Legioner

Что может быть проще настройки из терминала?

У конечных пользователей плохие навыки работы в консоли.

Ну изобразите флешку с конфиг-файлом. Или CDC-ACM с диалоговым режимом

COKPOWEHEU
()
Ответ на: комментарий от Legioner

А чем это лучше WebUSB?

Тем, что я толком не знаю что такое webusb :)

Насколько я понял, оно для доступа к USB из браузера, то есть фактически доступ к вашему компьютеру откуда-то из сети. Не нравится мне такая штука…

Что такое CDC ACM я честно говоря даже не знаю.

Виртуальный COM-порт грубо говоря.

Если точнее, то какое-то подмножество модемов. Если с дескриптором не повезет, устройство опознается в системе именно как модем и будет захвачено соответствующим драйвером, который будет в него слать всякий мусор.

Насколько я помню, Эдди это настолько огорчило, что он реализовал протокол какого-то китайского переходника, pl2302. Но мне такое решение не понравилось, поскольку не позволяет совмещать несколько устройств в одном. Либо я просто не разобрался как это сделать.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Когда вставляешь устройство, вылазит уведомление. Щёлкаешь по нему и у тебя открывается сайт. Жаваскрипт просит доступ к этому устройству и далее может обмениваться с ним данными. Данные никуда не уходят (ну конечно как напишешь жаваскрипт, но само устройство общается исключительно с браузером).

С точки зрения жаваскрипта я понимаю как это работает, а с точки зрения железа не совсем. В частности как я понимаю у USB есть куча версий и вероятно ранние версии проще в реализации, чем поздние. Завязан ли WebUSB например на USB 3 или нет, вот это я не понимаю.

Так-то всегда можно просто последовательный порт эмулировать как я понимаю. К нему у браузера тоже доступ можно попросить. Но там не так красиво будет.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

А тебе не плевать ли на конченных пользователей?

anonymous
()
Ответ на: комментарий от Legioner

И чем это удобней кошерной консоли? Открываешь терминальный клиент (любой понравившийся). И работаешь. Можно вообще файл конфигурации тупо при помощи cat скормить железке:

cat file.config > /dev/ttyUSB0

Вот, у меня, например: вводишь неправильную команду или help и получаешь список возможных команд. Так как я все это дело отлаживаю, то стараюсь использовать понятные команды. А потом уже можно написать демон, который с устройством будет работать. У меня, например, CANopen устройства так обслуживаются через мой переходник CAN-USB: демон открывает сокет и работает с клиентами, сообщения выстраивает в очередь и пишет в порт, что оттуда пришло - передает потоку-обработчику (который данный CANID ждет), если CANID никто не ждет, то сообщение уходит в /dev/null.

anonymous
()
Ответ на: комментарий от Legioner
$ make clean
rm -fR build
$ time make
...

real	0m4.180s
user	0m3.209s
sys	0m0.927s
$ touch Core/Src/main.c 
$ time make
...

real	0m0.247s
user	0m0.151s
sys	0m0.082s
$ ls -l build/stm32cubetest.bin
-rwxrwxr-x. 1 Legioner Legioner 4748 Nov  3 22:26 build/stm32cubetest.bin

Да, размер великоват.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Когда вставляешь устройство, вылазит уведомление. Щёлкаешь по нему и у тебя открывается сайт.

Откуда этот сайт берется? Не буду же я для какого-то одноразового устройства создавать специальный сайт, регистрировать домен и все в этом роде.

COKPOWEHEU
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.