12.11.2012

Апгрейдим Netduino

Перед тем, как пройти процедуру апгрейда прошивки в Netduino, несколько слов о структуре firmware, надо которым мы собираемся надругаться.

Оно состоит из двух фрагментов:
  1. TinyBooter - бутлоадер;
  2. TinyCLR - .NET Micro Framework runtime.
Бутлоадер запускается сразу после включения питания, грузит TinyCLR, который, в свою очередь - запускает ваше приложение из flash-памяти.

Итак, сначала надо найти интересующую прошивку, например в wiki. Важно скачать именно тот вариант, который относится к вашему типу платы (т.е. прошивки для Netduino и Netduino Plus отличаются).

Если требуется апдейтить только TinyCLR (еще это называют minor-апдейтом, то есть незначительными исправлениями), используют утилиту MFDeploy (ее можно найти через меню "Пуск": .Net Micro Framework SDK | Tools). После запуска установите в боке Device USB и Netduino_netduino и нажмите Ping:



Как видите, если устройство подключено, оно должно откликнуться и хоть что-то сообщить. Чтобы получить более подробную информацию о выбранном устройстве, используйте команду Device Capabilities (Ctrl+Shift+C), там можно разглядеть текущую прошитую версию TinyCLR:



Если Netduino все-таки не отзывается, нажмите расположенную на нем кнопку сброса, и, не отпуская, переподключите плату к шине (отключите, а потом снова воткните в USB - после 20 секунд плата войдет в специальный failsafe-режим), при этом на Ping она будет отвечать "TinyBoot".

Теперь в боксе Image File надо выбрать файлы для прошивания. Обычно их два - ER_CONFIG и ER_FLASH. Можете добавить сразу оба, после этого можно нажать Deploy.



Дождитесь завершения процесса и еще раз нажмите Ctrl+Shift+C -  информация с номерами прошивок должна измениться.

Для более значимых апгрейдов (например, с 4.1 до 4.2) требуется замена TinyBooter. В этом случае надо прибегнуть к фирменной атмеловской утилите "SAM-BA CDC" (можно скачать бесплатно с сайта ATMEL, правда придется заполнить несложную регистрационную форму), но для начала надо полностью похерить содержимое флеш-памяти:
Подключите Netduino к источнику питания, затем соедините Erase Pad (небольшая токопроводящая площадочка рядом с пином D0) с питанием +3.3В на более чем полсекунды. Готово! Если и было там какое-то firmware, то теперь оно стерто.

Переподключите плату - теперь вы увидите в списке устройств неизвестное устройство  c VID=03EB и PID=6124. Если указать мастеру установки поискать драйвера в папке инсталлированной атмеловской утилиты, должен установиться виртуальный последовательный порт (запомните его номер!):



Самое время запустить SAM-BA-CDC Tool, выбрать номер свежеустановленного последовательного порта, тип платы "at91sam7x512-ek" и нажать Connect:



Теперь последовательно проделаем следующие действия:
  1. Выберите в выпадающем списке Scripts "Boot from Flash (GPNVM2)", затем нажмите кнопку Execute;
  2. Выберите там же "Enable Flash Access", затем опять нажмите Execute;
  3. Выберите файл для зашивания (кнопка рядом с полем Send File Name), выберите файл TinyBooterDecompressor.bin;
  4. Нажмите Send File и подождите завершения (всего пара секунд);
  5. В окне с вопросом о залочивании областей (lock regions) откажитесь - ответьте No;
  6. По желанию, можно проверить записанный файл - поправьте размер файла в поле size (receivedfile) путем добавления 2-3 нулей в конце и нажмите "Compare sent file with memory". Должно появиться "match".
После этого можно закрыть  SAM-BA-CDC Tool и переподключить Netduino к источнику питания - новый TinyBooter будет ожидать загрузки нового TinyCLR, как это делать - см. выше.

От себя добавлю - после обновления до .Net Micro Framework 4.2 все мои нарекания по работе с Visual Studio исчезли. Только не забудьте после апгрейда выбрать в свойствах проекта .Net целевую версию 4.2, иначе Deploy вашего приложения из студии будет завершаться неуспехом:



Ну и вот ради чего все это было проделано ;) Пошаговая отладка великолепно работает в виртуальной машине: