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)

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

не позволяет совмещать несколько устройств в одном

Позволяет. Все там ОК.

Подробностей не помню, но какая-то проблема там была.

Можете показать конфиг-дескриптор хотя бы для сдвоенного USB-CDC устройства?

COKPOWEHEU
()
Ответ на: комментарий от Legioner
$ make clean
rm -fR build
$ time make
$ make clean
rm -rf res
rm -rf build
$ time make 2>1 > /dev/null

real    0m0,292s
user    0m0,248s
sys     0m0,045s
$ touch src/main.c 
$ time make 2>1 > /dev/null

real    0m0,156s
user    0m0,114s
sys     0m0,043s
$ arm-none-eabi-size res/firmware.elf
   text    data     bss     dec     hex filename
   3456      12    1112    4580    11e4 res/firmware.elf
$ 

Это USB-ACM на stm32l1

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

Откуда этот сайт берется?

Устройство присылает через USB его URL.

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

Господи, на github за 2 секунды сайт выставляется, не надо ничего регистрировать.

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

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

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

Господи, на github за 2 секунды сайт выставляется, не надо ничего регистрировать.

Идея с гитхабом мне нравится, надо будет над ней помедитировать.

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

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

Муть какая-то с этим вебусб. Ссылку на сайт ты прошиваешь в дескрипторе своего устройства (забыл заплатить за сайт и сменил домен — адью!). Само устройство по сути — DFU. И браузер в себе содержит основы dfu-util, так что может прошить устройство.

Вообще дичь лютая. Ведь намного проще в любимой консольке набрать make flash или make boot (ну или make dfuboot; в поделках на STM32F072 я нынче вообще не развожу ни SWD, ни USART1, если в том нет необходимости: в терминале выбираешь пункт «DFU mode», и устройство переходит в DFU, а дальше — make dfuboot и жамкаешь на кнопку reset или питание отрубаешь/включаешь: dfu-util не умеет перезагружать МК после прошивки).

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

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

Ну я не настаиваю же, лично я считаю, что ничего удобней Web UI сейчас нет. Вот уж на каком-нибудь Qt писать и собирать под 3 ОСи и несколько архитектур клиента я точно не буду. А на жаваскрипте за несколько часов можно простенький UI нарисовать. Ну консоль, конечно, хорошо, но не для всех.

Там один существенный минус - фаерфокс это вроде не поддерживает.

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

Если просто CDC, то у меня на гитхабе лежит код «семь CDC в одном STM32F103». А вот совмещать PL2303 с чем-то я еще не пробовал — не было нужды.

А зачем вообще составное устройство делать (кроме разве что нескольких CDC - типа stdin/out и stderr)?

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

Вот уж на каком-нибудь Qt писать и собирать под 3 ОСи и несколько архитектур клиента я точно не буду

Вот же тебе делать нечего! Пишешь консольного клиента под линукс и готово! А вантузоиды пусть идут в жопу!

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

У меня вообще такое мнение: не-линуксоиды == не люди! И незачем вообще задумываться об их существовании!!!

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

Ну я не настаиваю же, лично я считаю, что ничего удобней Web UI сейчас нет

Ваше право. Мне подобный вендор-лок не нравится. Но это не значит, что он не имеет права на жизнь. А, скажем, вашу задачу я и вовсе не знаю - что именно вы там собрались конфигурировать. Свои идеи я высказал, рекомендую их обдумать даже если не собираетесь пользоваться.

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

Если просто CDC, то у меня на гитхабе лежит код «семь CDC в одном STM32F103». А вот совмещать PL2303 с чем-то я еще не пробовал — не было нужды.

А зачем вообще составное устройство делать (кроме разве что нескольких CDC - типа stdin/out и stderr)?

Я недавно делал 2*CDC + HID + Audio, такой себе программатор-симулятор периферии для RISC-V. У него какие-то проблемы с прошивкой через JTAG, но через stm32flash работает нормально. Соответственно первый CDC программатор, второй отладочный порт, ну а HID и Audio для управления периферией - виртуальной матричной клавиатурой и «микрофон» чтобы ЦАП/ШИМ тестировать.

Так что с обычными USB-ACM проблемы как раз нет. Проблема была с pl2303. То ли он обязательно должен идти первым, то ли вообще единственным, то ли еще что-то.

Вот же тебе делать нечего! Пишешь консольного клиента под линукс и готово!

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

Пару лет назад делал игрушечный пульсомер, измерение с 8 датчиков и отображение в виде графика. Для отладки хватило cat /dev/ttyUSB0 | awk '{...}' | feedgnuplot ... . Но вот когда отдавал заказчику, пришлось реализовывать и общение с COM-портом, и вывод графика и все остальное.

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

USB все-таки штука сложная, даже имея под рукой нормальную реализацию

Да, чуть не забыл. Вдруг найдутся мазохисты, собирающиеся ковырять USB под виндой, особенно под старыми. Не делайте этого! В процессе отладки неправильные дескрипторы неизбежны, а винда далеко не всегда способна это пережить. Ух сколько я насмотрелся синих экранов на виртуалке! И это для устройства, которое под линуксом уже работало нормально.

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

А стандарт WebUSB так получится поддержать?

Безусловно.

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

Я разбирался около полугода.

Ну что-то уж слишком много на пяток 16-битных регистров, половина функций которых на начальном этапе вообще не нужна. А зачем ты все эти 500 страниц вместе с классами читал? Мне вот хватило USB In Nutshell и главы из RM, ну ещё описание дескрипторов для используемых классов, где в основном таблички. Стандарт USB открыл, полистал, понял, что но мне как программисту контроллера нафиг не нужно и закрыл.

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

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

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

У меня же это хобби,

У меня тоже хобби, поэтому и без спешки.

Ну что-то уж слишком много на пяток 16-битных регистров, половина функций которых на начальном этапе вообще не нужна

Еще бы они писали какие именно функции нужны и для чего, а какие нет. Половину приходится осваивать методом тыка.

Хотя с USB они хоть немного усилий приложили. С тачсенсором в STM32L1 все хуже: вменяемой документации нет вообще. Но там хоть алгоритм простой, догадаться можно.

ну ещё описание дескрипторов для используемых классов, где в основном таблички

Когда общая логика становится понятна, там конечно, быстрее идет. Но по началу обилие информации и незнание с чего начать здорово взрывает мозг.

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

А с языком у тебя как? Я на английском часто читаю и смотрю видео. Техническую литературу, естественно, тоже легко могу читать. Может быть из-за недостатка инфы на русском у тебя это отняло столько времени?

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

С английским у меня плохо: читать техническую литературу могу, но видео - уже нет. Впрочем, учить программирование по видео в любом случае плохая идея.

COKPOWEHEU
()

У меня такая фигня недавно возникла на STM32F0 только при отладке (st-util не могла сделать load).

Эксперименты показали, что помогает полное стирание флеша, в итоге это:

shell st-util & disown
set remotetimeout 60000

стало вот этим:

shell st-flash erase
shell st-util & disown
set remotetimeout 60000

Попробуй так же.

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

Честно говоря я ничего не понял из того, что ты написал. Эти команды где надо вбивать? На bash не похоже.

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

Это пробовал, не работает, результат был точно такой же. Сработало только через openocd: st-flash write не работает (комментарий)

До gdb я пока не добрался.

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

Поломали код для прошивки значит. Ну делай через openocd, если работает.

shkolnick-kun ★★★★★
()

Ужоснах, чо тут нафлудили.

@Legioner, отметь пожалуйста следующее, прежде чем делать выводы о данной сфере:

  • куб – частный случай конкретного производителя, который может помочь, но не может являться хорошей базой для серьёзного проекта,
  • для разработки электронных плат нужны знания, выходящие за рамки образования программиста,
  • это не сакральные знания, этому можно научиться,
  • arduino – не плохая платформа, она уровня примерно начальной школы профильного образования,
  • не все эмбедшики – поехавшие старпёры, жрушие водяру круглый год,
  • ошибки stlink – комяк, но не все МК используют его.

Короче говоря, это как оффтоп по сравнению с линуксом: конструктор, но можно освоить при должной мотивации. Зато знаешь, как работает аппаратура, и (в случае не всех МК) полностью открытый код, который можно полностью изучить меньше, чем за всю жизнь.

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

чет как-то тебе не очень помогают. впрочем как всегда тут. ты на какой архитектуре пытаешься собрать программку и прошить МК? на x86 или на aarch64?

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

вот так правильно должно все быть. Так объяснили люди.

arm-none-eabi-as Youfile.s -o Youfile.o
arm-none-eabi-ld Youfile.o -Ttext=0x08000000 -o Youfile.elf
arm-none-eabi-objcopy -O binary Youfile.elf Youfile.bin

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

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

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

чет как-то тебе не очень помогают

А что тут помогать, если я всё правильно делаю. Если бы не правильно делал, написали бы. Значит тупо баг или недоработка в программке. Бывает. Чип у меня не самый популярный, видимо.

ты на какой архитектуре пытаешься собрать программку и прошить МК? на x86 или на aarch64?

Обычный ноутбук на Intel Core i3, ничего экзотического.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.