Перейти к содержанию
    

Прошивка STM32F7 через другой STM32F7 (UART)

Добрый день! Повторюсь в этой ветке, так как в основном работа с ARM

 

Возникла необходимость прошивки микроконтроллера STM32F7 другим микроконтроллером STM32F7 подключенный к нему через UART, а также прошивки Atmega328P подключенного по SPI. Необходимость возникла по причине того, что SoM на Allwinere страдает кучей недостатков в том числе отсутствием необходимого количества UART.

Постараюсь описать кратко идею:

Есть несколько микроконтроллеров STM32F7 общающихся между собой по UART и один Atmega328P подключенный к STMке по SPI, из них:

 

а) 1-й Микроконтроллер STM32F7: Концентратор на базе STM32F7 он собирает данные с разных микроконтроллеров по UART пакует их в пакет и отправляет по Wi-Fi пользователю через модуль ESP-01 или ESP-06 (UART+2xGPIO). Также данный контроллер имеет слот под microSD подключенный по SDIO и FRAM по SPI.

 

б) 2-е...5-е Микроконтроллеры STM32F7 (4 штуки): собирают различную цифровую и аналоговую информацию, обрабатывают ее и отправляют на концентратор (см. пункт а)), который в свою очередь ее упаковывает и отправляет в сеть.

 

в) Микроконтроллер Atmega328P: Следит за уровнем заряда батареи, управляет вкл и выкл систем питания, и в теории программирует по i2c две микросхемы BQ25892 (устанавливает настройки).

 

Как все это должно работать в теории:

 

1. Вставляем в microSD слот карту памяти с папкой, например, Firmware, и контроллер (концентратор stm32 из пункта а)) просматривает файлы и в случае, если находит в ней прошивку старше загруженной шьется сам и шьет все остальные контроллеры включая Atmega328P. Затем удаляет все исходники из папки Firmware. Все папка пуста.

 

2. Подключается по wifi к сети интернет, заходит по ссылке в сети интернет смотрит версии прошивки и если есть прошивки старше загруженной качает ее на microSD карту в папку Firmware, перезагружается, и затем как в варианте с microSD шьется сам и шьет все остальные контроллеры включая Atmega328P. Затем удаляет все исходники из папки Firmware. Все папка пуста.

 

Теперь вопросы - это возможно реализовать на практике?

 

И "ДА" - Естественно все микроконтроллеры имеют необходимый bootloader и все прошивки скомпилированы в бин или хекс.

 

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

Поэтому спрашиваю это физически возможно?

Если да то прошу помощи - пример как это сделать, включая схему подключения между контроллерами. Ведь голый uart не пойдет нужно с концентратора еще и gpio подводить к ногам boot0 и boot1 и RST ведомых микроконтроллеров (для avr также)

 

П.С. Если кто-то готов помочь, но нет времени я готов оплатить это время. Но вот только в бюджетах я ограничен. Если кому интересно пишите в личку, может договоримся.

 

Спасибо.

Изменено пользователем AVStech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может прошивка ведомых ведущим? не?

 

Исчерпывающий ответ на мой вопрос :)

 

Поправил. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мелкий 8ми битный МК, за питанием следить и рубить его остальным, кто спать сам нормально не умеет - ещё как-то понять можно, если бы не:

4 штуки stm32f7, да ещё один который просто данные с уартов собирает - вот это уже слишком.

вы что-то явно делаете не так, особенно учитывая уровень остальных вопросов.

 

а физически сделать конечно можно, даже без boot0/1 и ресета.

читайте AN4657

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы что-то явно делаете не так, особенно учитывая уровень остальных вопросов.

а физически сделать конечно можно, даже без boot0/1 и ресета.

читайте AN4657

 

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

 

За AN4657 правда спасибо, если не найду решения почитаю!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимость возникла по причине того, что SoM на Allwinere страдает кучей недостатков в том числе отсутствием необходимого количества UART.

 

Не понятно, какой аллвиннер имеется ввиду, например в А10 уартов аж 8 штук!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь вопросы - это возможно реализовать на практике?

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

 

У меня одна проблема

Я не нашел ни одного примера

Не правда, в интернетах полно примеров загрузчиков.

 

Я могу взять чужой пример и переделать его

Скажем так. Любая задача не имеет универсального подхода к решению. Все равно придется подпиливать для себя. Поэтому, даже если Вы найдете рабочий загрузчик в интернете, или тут кто-нибудь скинет (хотя загрузчик на UART-е пишется за пару часов работы с Reference Manual-ом и компилятором), Вы вряд ли так сходу адаптируете его под свою функциональность и нужды. Я почитал, что Вам требуется и могу сказать, что это делается за полдня, без выкачки по сети Интернет. Над второй частью придется посидеть подольше. Однако криминала не вижу все равно.

 

P.S. Но браться не буду.

Изменено пользователем Arlleex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понятно, какой аллвиннер имеется ввиду, например в А10 уартов аж 8 штук!

Добрый!

Был взят H2+ но не только в uart-ах была проблема. А в временном лаге между сигналом датчика и отображения данных на экране пользователя, а тауже температурных режимах. И мы не работали с камнем. Мы работали с модулем. А там их было 5 один ушел на дебаг второй на wifi. Соответственно одного не хватало. Сделали mux но это оказалось тупиков. При последующих опытах выяснили что приемлемый лаг получается с использование stm32f7, при условии загрузки до 70%.

 

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

 

 

 

Не правда, в интернетах полно примеров загрузчиков.

 

 

Скажем так. Любая задача не имеет универсального подхода к решению. Все равно придется подпиливать для себя. Поэтому, даже если Вы найдете рабочий загрузчик в интернете, или тут кто-нибудь скинет (хотя загрузчик на UART-е пишется за пару часов работы с Reference Manual-ом и компилятором), Вы вряд ли так сходу адаптируете его под свою функциональность и нужды. Я почитал, что Вам требуется и могу сказать, что это делается за полдня, без выкачки по сети Интернет. Над второй частью придется посидеть подольше. Однако криминала не вижу все равно.

 

P.S. Но браться не буду.

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а посему нельзя использовать собственные загрузчики для 2...5

с 1-го можно управлять только RST на 2..5

точно также можно и AVR прошивать.

И не связываться с BOOT0 и протоколом от ST

 

То есть проблема явно надуманная. Хотя если книг не читать, то может и сложно будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Возникла необходимость прошивки...

 

спрошу аккуратно.

- Это гипотетическая задача или есть такое железо, где это требуется (если можно, для общего развития, обрисуйте в двух словах)?

Ну и классический вопрос

- что произойдёт если допустили ошибку в прошивке прошивальщика при очередном агрэйде кристалла?

 

 

(круглый)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а почему нельзя использовать собственные загрузчики для 2...5

с 1-го можно управлять только RST на 2..5

точно также можно и AVR прошивать.

И не связываться с BOOT0 и протоколом от ST

 

То есть проблема явно надуманная. Хотя если книг не читать, то может и сложно будет.

 

Bootloader'ы будут конечно собственные. Об этом писал в начале. Правильно ли я понимаю, что подключаю только UART между концентратором и ведомым и от концентратора GPIO к RST ведомого?

Судя по всему буду читать книжки...

Спасибо!

 

спрошу аккуратно.

- Это гипотетическая задача или есть такое железо, где это требуется (если можно, для общего развития, обрисуйте в двух словах)?

Ну и классический вопрос

- что произойдёт если допустили ошибку в прошивке прошивальщика при очередном агрэйде кристалла?

 

 

(круглый)

 

Постараюсь также аккуратно ответить:

- это реальное железо, пока в двух экземплярах. Также один ведомый модуль на STM32F7 сейчас в проработке, вот его даже на бумаге нет. В двух словах пользовательское устройство, где все 4 ведомых и концентратор на RTOS. Для понимания Концентратор выполняет еще некоторые вычисления кроме того, чтобы собирать пакеты и отправлять их в сеть. Более сказать не могу.

- для каждого камня выведен отдельный разъем JTAG, в случае сбоя можно перепрошить через него. Сейчас так и делаем, прошиваем каждый модуль отдельно, что не удобно и не возможно для самостоятельной прошивки (обновления) пользователем. Поэтому продолжая Вашу мысль, сначала планируем отработать прошивку на двух эталонах, только после чего выкладывать обновление в сеть. Но если все же произошел сбой, то пользователю придется отправлять устройство изготовителю. Сейчас вообще любая прошивка возможна только изготовителем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда загрузчики свои - вообще не проблема.

UART + RST хватит для обновлений всех подчинённых.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ресет-то зачем?

 

Я так понимаю чтобы выполнить основной принцип IAP :

Принцип из документа:

"Когда происходит сброс (reset), счетчик программ настроен на выполнение драйвера IAP. Это должен быть компактный код, который проверяет конкретное условие, например, что комбинация клавиш нажата, или в моем случае сверяет версии прошивки. Когда стартовое условие выполняется, код драйвера IAP либо обновляет пользовательское приложение (прошивку) или запускает её."

Правда в документе AN4657 указано, что прошивка качается на внутреннюю память камня, мне же желательно работа напрямую с карты памяти, так как если он сначала качнет, если вообще места хватит себе на внутренюю флеш прошивку, потом прошьется, потом проверит все ли норм и удалит старую.

В принципе по данному алгоритму можно сделать собственный bootloader, который будет шить собственный камень. Но как это сделать для камня, который далеко от слота карты памяти ведущего, и у которого нет собственного накопителя, кроме флеша, который к тому же почти под завязку заполнен?

 

Или я опять читаю одно, а понимаю все не верно?

Изменено пользователем AVStech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Туда (в свой бутлоадер, а не встроенный) и программно, по команде от уарта попасть можно, без аппаратного ресета.

И скорее во внутреннюю память(ram) складываются килобайтные куски, так уж ymodem устроен который в данном конкретном случае они использовали.

И куски эти потом сразу пишутся во флэш поверх старой прошивки.

Рама меньше чем флэша, всё не сохранишь перед прошивкой флэша.

Можно ещё флэш пополам поделить и при обновлении писать в другую половину и только после успешного завершения и верификации менять флаг, какую половину использовать. Так старая прошивка не испортится при неудачном обновлении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...