ClusterM / clunet

CLUNET library - simple single-wire peer-to-peer network driver for AVR microcontrollers, perfect way to interconnect microcontrollers in your house
The Unlicense
112 stars 21 forks source link

Bootloader #1

Closed dvv closed 8 years ago

dvv commented 10 years ago

Привет!

Замечательный проект. Чистый код.

Пара вопросов:

Спасибо, --Владимир

ClusterM commented 10 years ago

Привет :) Всё забываю выложить код бутлоадера. Основная проблема в том, что для прошивки по сети требуется ещё устройство, которое соединяет CLUNET-сеть с USB, софт под Linux, который это устройство обслуживает, и софт под Windows, который парсит HEX файл и прошивает устройство. Если уж всё это выкладывать, то надо всё хорошо документировать и прокомментировать. Нет, с 1-wire он несовместим, хотя и похож на него. Проблема 1-wire в том, что обязательно требуется мастер-устройство, по инициативе которого выполняется вся передача данных.

dvv commented 10 years ago

Ясно.

Нет, с 1-wire он несовместим Там не industrial 1-wire. Просто "один-провод". Вот и думаю, это электрически совместимо с clunet?

ClusterM commented 10 years ago

Выложил бутлоадер: https://github.com/ClusterM/clunet/tree/master/demo_project/clunet_bootloader Как я уже говорил, хорошо бы прокомментировать и почистить код, попозже займусь. Софт для прошивки пока не выкладываю, но при желании можно самому его написать.

dvv commented 9 years ago

Теперь, когда сеть заработала и пины для шины можно выбирать произвольно, хочется уйти от avrdude, использовать обычно занятые UARTом TX/RX под clunet и прошивку доверить тоже clunet. Разобраться с лоадером силенок пока маловато, использую выложенный, таки может быть поделишься прошивателем? Либо алгоритмом. tia

ClusterM commented 9 years ago

Мой прошиватель завязан на мой линукс-сервер, который завязан на мой переходник. Чтобы он работал, надо воссоздать всю эту схему. Я могу выслать Вам код, но так с ходу всё это не заработает.

Алгоритм работы с бутлоадером такой: 1) При необходимости посылаем CLUNET_COMMAND_REBOOT, чтобы устройство перезагрузилось в бутлоадер. Далее всё взаимодействие идёт через команду CLUNET_COMMAND_BOOT_CONTROL, первый байт в поле данных - код операции. 2) Устройство посылает CLUNET_COMMAND_BOOT_CONTROL, в данных 0. Так мы узнали, что бутлоадер запустился. 3) Сразу же посылаем на адрес устройства CLUNET_COMMAND_BOOT_CONTROL, в данных 1. Это переводит устройство в режим прошивки. 4) Устройство посылает CLUNET_COMMAND_BOOT_CONTROL, первый байт данных - 2, подтверждает, что перешли в режим прошивки. Следующие два байта - это размер страницы. 5) Посылаем в устройство CLUNET_COMMAND_BOOT_CONTROL, первый байт - 3. Это команда на запись страницы прошивки. Байты с 1го по 4й - это смещение от начала прошивки, все остальные байтики - сам кусок прошивки. Этот кусок должен быть равен размеру страницы, который мы получили в пункте 4 (может и не соответствовать реальному, если реальный слишком большой). 6) Устройство посылает CLUNET_COMMAND_BOOT_CONTROL, в данных 4 - это подтверждает, что страница прошита. После этого повторяем пункты 5-6, пока не отправим всю прошивку. 7) Посылаем в устройство CLUNET_COMMAND_BOOT_CONTROL, в данных 7 - это завершает работу бутлоадера и запускает только что прошитый код.

dvv commented 9 years ago

Да, вечор вкуривал clunet_bootloader. Осознал, что в нем нет зависимости на int-driven clunet.c. Смысл понятен. Для 328р только надо будет размер страницы не ограничивать 64 байтами. Думаю над своим шлюзом в clunet. Смотрю на вариант с ttyS*, но непонятно пока, как обеспечить 8-bit "чистоту" (рядовые команды будут текстовые, а вот прошивка может содержать любые октеты). Разберемся. Спасибо!

ClusterM commented 9 years ago

В бутлоадере полный минимализм, чтобы уместиться в 1к. При передаче слишком большого пакета могут возникать проблемы, поэтому страницу лучше записывать по частям.

dvv commented 9 years ago

Удалось собрать и для 328p. Первоначально превышало 1200 октетов, удалось ужать. Если отработает, пришлю обезжиривающий патчик.

zhdan88vadim commented 4 years ago

рвоначально превышало 1200 октетов, удалось ужать. Если отработает, пришлю обезжиривающий патчик.

могли бы вы выложить код для 328p ? Мне и думаю другим было бы инересно)

UncleJey commented 4 years ago

Господа! У меня план!

  1. Отключаем внешнюю камеру видеонаблюдения.
  2. используя этот кабель подключаемся к домашней сети кластера
  3. выкачиваем грязные секреты
  4. заботливо подсаживаем троянчика

зачем это нужно я ещё не придумал, но наверняка пригодится!