Автономная прошивка arduino от другой arduino
- Войдите на сайт для отправки комментариев
Втр, 10/06/2014 - 21:49
День добрый. Простите за грубость, сам не люблю обращатся на форумы, но возник неразрешимый вопрос. Про возможность прошить одну arduino через другую (используя как программатор) я знаю. Но вот как автономно (без ПК) прошить arduino от другой, я без понятия (нагуглить не смог, наверное неправильно излагаю мысли). Как это реализовать понятия не имею, могу лишь сказать, что имею в арсенале Arduino Pro Mini которая должна прошить своего собрата. Реализацию вижу туманно, нечто вроде: прошивка лежит на SD карте прошивающего устройства, подключаются некоторые порты прошивающего устройства к прошиваемому и дальше магия. Заранее благодарен за ваши мысли и дельные ответы ^^
зачем?
зачем?
*почему.
у него нет нетбука за 200$
а дальше не магия, а открывается даташит на контроллер и читается раздел Serial Programming. И если прошивка меньше чем флеш
минус ~1кб, то прошивку можно хранить во флеше, не надо никаких SD.
Почитано, просмотрено, но не дошло
Тем более не понимаю как и в чем хранить файл прошивки и как его подготовить. Прошу разжевать тему по подробнее
Первое что вы должны решить: по какому каналу вы собираетесь шить. По Serial или по SPI.
SPI (пять проводков) - это значит что ваш "прошивальщик" будет именно "программатором". Сможет прошивать голый камень (без бутлоадера), менять фьюзы и т.д.
По Serial (rx/tx+gnd) - это значит, что ваш "прошивальщик" будет изображать из себя "комьютер" (ArduinoIDE/Avrdude). В этом случае наличие в целевом камне предварительно уже должен быть зашит бутлоадер (другими словами целевое устройство должно быть именно ардуиной :) ) и не будет возможности выставить/поменять фьюзы (другими словами шансы превратить целевое устройство в мертвый камень близки к нулю).
saskiuhia, мой вариант: http://arduino.ru/forum/proekty/sdelal-obnovlenie-programmy-v-mk-cherez-...
Однозначно по Serial, дабы уменьшить риски кирпичей (ну и минимизировать кол-во проводов).
>Однозначно по Serial
Тогда открываете файлик boards.txt, находите там свою плату (целевую, в которую заливать хотите). Смотрите что у нее написанно в [ИМЯ-ПЛАТЫ].upload.protocol=[имя-протокола]
там будет написанно что-то типа arduino/stk500/stk500v2
так же смотрите на какой скорости туда нужно заливать [ИМЯ-ПЛАТЫ].upload.speed=[СКОРОСТЬ-ЗАЛИВКИ]
теоретически, stk500 и arduino - это одно и тоже... (где-то слышал это), но на практике сталкивался что при stk500 у меня не заливалось, а по "arduino" - заливалось.
После чего гуглите этот описание этого протокола... и вдумчиво его читаете. Вам нужно будет его реализовать (или попытатся найти реализацию). В конечном итоге вам нужно:
1. "програматором", придавать к земле и отпустить reset-пин целевой платы (она войдет в режим бутлоадера и начнет ждать прошивку на serial).
2. выставить, в скетче программатора serial.begin(СКОРОСТЬ-ЗАЛИВКИ) (которую вы узнали из boards.txt) и...
3. Начать читать с SD карты прошивку и отправлять ее по Serial в соотвествии с протоколом...
4. Дернуть еще раз reset-пин целевой (перегрузить плату).
Ну и всякие мелочи типа: проверить, перед тем как передавать прошивку что она именно для той платы которая ответила готовностью к прошивке, что подходит по размеру и т.п.
Вообщем сделать все то, что делает avrdude (имеено ее вызывает ArduinoIDE когда делает заливку). Поэтому думаю полазить по ее исходникам http://savannah.nongnu.org/svn/?group=avrdude тоже не помешает.
Так же, можно еще попытатся записать каким-нибудь сниффером для ком-портов програмным (или второй ардуиной) сеанс общения avrdude и платы в которую идет заливка. Просто что-бы "иметь живой пример перед глазами".
Ну и исходники бутлоадеров можно посмотреть, там тоже должен быть видена реализация протокола заливки. Так сказать "ответная часть", того что вам нужно реализовать в программаторе.
Вот, к примеру, расписано как общаются между собой avrdude и целевая плата.
http://baldwisdom.com/bootloading/