Closed dvv closed 8 years ago
Привет :) Всё забываю выложить код бутлоадера. Основная проблема в том, что для прошивки по сети требуется ещё устройство, которое соединяет CLUNET-сеть с USB, софт под Linux, который это устройство обслуживает, и софт под Windows, который парсит HEX файл и прошивает устройство. Если уж всё это выкладывать, то надо всё хорошо документировать и прокомментировать. Нет, с 1-wire он несовместим, хотя и похож на него. Проблема 1-wire в том, что обязательно требуется мастер-устройство, по инициативе которого выполняется вся передача данных.
Ясно.
Нет, с 1-wire он несовместим Там не industrial 1-wire. Просто "один-провод". Вот и думаю, это электрически совместимо с clunet?
Выложил бутлоадер: https://github.com/ClusterM/clunet/tree/master/demo_project/clunet_bootloader Как я уже говорил, хорошо бы прокомментировать и почистить код, попозже займусь. Софт для прошивки пока не выкладываю, но при желании можно самому его написать.
Теперь, когда сеть заработала и пины для шины можно выбирать произвольно, хочется уйти от avrdude, использовать обычно занятые UARTом TX/RX под clunet и прошивку доверить тоже clunet. Разобраться с лоадером силенок пока маловато, использую выложенный, таки может быть поделишься прошивателем? Либо алгоритмом. tia
Мой прошиватель завязан на мой линукс-сервер, который завязан на мой переходник. Чтобы он работал, надо воссоздать всю эту схему. Я могу выслать Вам код, но так с ходу всё это не заработает.
Алгоритм работы с бутлоадером такой: 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 - это завершает работу бутлоадера и запускает только что прошитый код.
Да, вечор вкуривал clunet_bootloader. Осознал, что в нем нет зависимости на int-driven clunet.c. Смысл понятен. Для 328р только надо будет размер страницы не ограничивать 64 байтами. Думаю над своим шлюзом в clunet. Смотрю на вариант с ttyS*, но непонятно пока, как обеспечить 8-bit "чистоту" (рядовые команды будут текстовые, а вот прошивка может содержать любые октеты). Разберемся. Спасибо!
В бутлоадере полный минимализм, чтобы уместиться в 1к. При передаче слишком большого пакета могут возникать проблемы, поэтому страницу лучше записывать по частям.
Удалось собрать и для 328p. Первоначально превышало 1200 октетов, удалось ужать. Если отработает, пришлю обезжиривающий патчик.
рвоначально превышало 1200 октетов, удалось ужать. Если отработает, пришлю обезжиривающий патчик.
могли бы вы выложить код для 328p ? Мне и думаю другим было бы инересно)
Господа! У меня план!
зачем это нужно я ещё не придумал, но наверняка пригодится!
Привет!
Замечательный проект. Чистый код.
Пара вопросов:
Спасибо, --Владимир