Автономная прошивка arduino от другой arduino

saskiuhia
Offline
Зарегистрирован: 10.06.2014

День добрый. Простите за грубость, сам не люблю обращатся на форумы, но возник неразрешимый вопрос. Про возможность прошить одну arduino через другую (используя как программатор) я знаю. Но вот как автономно (без ПК) прошить arduino от другой, я без понятия (нагуглить не смог, наверное неправильно излагаю мысли). Как это реализовать понятия не имею, могу лишь сказать, что имею в арсенале Arduino Pro Mini которая должна прошить своего собрата. Реализацию вижу туманно, нечто вроде: прошивка лежит на SD карте прошивающего устройства, подключаются некоторые порты прошивающего устройства к прошиваемому и дальше магия. Заранее благодарен за ваши мысли и дельные ответы ^^

art100
Offline
Зарегистрирован: 09.03.2014

зачем?

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

art100 пишет:

зачем?

*почему.

у него нет нетбука за 200$

__Alexander
Offline
Зарегистрирован: 24.10.2012

а дальше не магия, а открывается даташит на контроллер и читается раздел Serial Programming. И если прошивка меньше чем флеш

минус ~1кб, то прошивку можно хранить во флеше, не надо никаких SD.

saskiuhia
Offline
Зарегистрирован: 10.06.2014

Почитано, просмотрено, но не дошло

Тем более не понимаю как и в чем хранить файл прошивки и как его подготовить. Прошу разжевать тему по подробнее

leshak
Offline
Зарегистрирован: 29.09.2011

Первое что вы должны решить: по какому каналу вы собираетесь шить. По Serial или по SPI.

SPI (пять проводков) - это значит что ваш "прошивальщик" будет именно "программатором". Сможет прошивать голый камень (без бутлоадера), менять фьюзы и т.д.

По Serial (rx/tx+gnd) - это значит, что ваш "прошивальщик" будет изображать из себя "комьютер" (ArduinoIDE/Avrdude). В этом случае наличие в целевом камне предварительно уже должен быть зашит бутлоадер (другими словами целевое устройство должно быть именно ардуиной :) ) и не будет возможности выставить/поменять фьюзы (другими словами шансы превратить целевое устройство в мертвый камень близки к нулю).

 

toc
Offline
Зарегистрирован: 09.02.2013
saskiuhia
Offline
Зарегистрирован: 10.06.2014

Однозначно по Serial, дабы уменьшить риски кирпичей (ну и минимизировать кол-во проводов).

leshak
Offline
Зарегистрирован: 29.09.2011

>Однозначно по 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 и платы в которую идет заливка. Просто что-бы "иметь живой пример перед глазами".

Ну и исходники бутлоадеров можно посмотреть, там тоже должен быть видена реализация протокола заливки. Так сказать "ответная часть", того что вам нужно реализовать в программаторе.

 

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

Вот, к примеру, расписано как общаются между собой avrdude и целевая плата.

http://baldwisdom.com/bootloading/