суббота, 6 июля 2013 г.

Урок 3. Использование Bootloader'a

<< Назад к оглавлению

Окей, это будет первый шаг к освоению USB интерфейса.
Есть такая интересная штука. Называется бутлоадер. Что это такое?
Это программа, которая вшивается в начало памяти контроллера и позволяет его программировать.
То есть, для того, чтобы прошить контроллер теперь не нужно будет подключать программатор. Но мы с вами при этом расплатимся памятью программ, так как 0x1000 ячеек будет занято бутлоадером. Итак, к делу.
Интерфейс USB довольно капризный, так что все, что связано со стабильностью USB должно быть собрано очень аккуратно. Кварц должен быть добротно соединен с ножками контроллера.
Я вообще советую вам купить USB розетку, примонтировать ее на плату, чтобы всегда быть уверенным, что контроллер качественно соединен с портом USB.
на всякий случай даю вам распиновку порта
Взято из википедии.
Схема подключения контроллера pic18f2550

Сразу поясню, что когда мы выключатель sw2 замыкаем на землю, наш контроллер будет входить в режим бутлоадера, то есть прошивать. А если sw2 переключен на +5 то, контроллер будет пытаться запустить нашу программу
Схема подключения контроллера pic18f4550

Прошиваем контроллер следующим файлом
для pic18f2550 ссылка
для pic18f4550 ссылка
это прошивки, скомпилированные из исходников из официального пакета microchip solutions. Правда я поменял некоторые настройки.
Теперь качаем программу для работы с бутлоадером
linux ссылка
Для линукса я пока что не проверил.
Так вот, запускаем эту программу и в идеале мы должны увидеть это:
Кроме того, контроллер должен замигать светодиодом. Если программа не определяет ваш контроллер, то проверьте полярности и ищите ошибку в схеме.

Теперь о том, как это работает. Мы попробуем запустить нашу программу из урока №2. Только ее нужно немного изменить. 
Если бутлоадер получает команду запустить нашу с вами программу (sw2 замкнут на +), то он делает переход на адрес 0x1000 откуда, и будет начинаться теперь наша программа. А векторы прерывание соответственно будут перемещены из 0x8 в 0x1008 и из 0x18 в 0x1018
для того, чтобы изменить нашу программу нужно поменять 
org 0 на org 0x1000
и org 0x28 на org 0x1028
И программа теперь будет начинаться в аккурат после бутлоадера
Вот исходный код новой программы
Причем мы можем использовать для прошивки этих двух контроллеров через бутлоадер один и тот же HEX файл, так как он не будет проверять соответствие контроллера и не будет менять конфигурационные биты.
Если у вас все получилось, то у вас при запуске контроллера должен мигать светодиод на порту RA2 как в уроке 2. 
Для того, чтобы снова прошить контроллер через бутлоадер, замкните переключатель sw2 на землю.
Чтобы прошить выбираем
File->import firmware image 
выбираем hex файл
После этого нажимаем program->Erase/Program/Verify device
перезагружаем контроллер
Поздравляю - у вас работает первая USB программа, хоть пока что и написанная не вами

Собрать бутлоадер самому

На всякий случай выложу готовый проект, по которому можно собрать бутлоадер самому. Вдруг вам нужно изменить USBDIV конфигурационное слово, если у вас кварц не 20МГц, или кнопку, на которую надо нажать для пуска бутлоадера.
Пару слов о проекте. Это бутлоадер из MLA 2015_08_10. Microchip добавили такую опцию - при удачной прошивке по адресу 0x1006 записывается подпись. Это слово GOOD (0x600D). Расчет идет на то, что компилятор обычно ничего не хранит в этом адресе, а делает GOTO на основную часть программы. Тем не менее, это проблема, если вы пишете на ассемблере. Поэтому, если вы хотите нетронутую версию бутлоадера - установите MLA и соберите из него.
Еще одно. Бутлоадер собирается только с XC8 компилятором версии PRO. А воровать его с какого-нибудь всем известного сайта - это ай-яй-яй.
Ссылка на проект бутлоадера
https://yadi.sk/d/xYAFgZaDjFr4V

5 комментариев:

  1. При ковырянии в прошивке бутлоадера выяснилось, что на ногу RC1 можно повесить еще один светодиод, так же как на RC0. В режиме бутлоадера они будут перемигиваться.

    ОтветитьУдалить
  2. ссылки на бутлоадер не рабочие :(

    ОтветитьУдалить
    Ответы
    1. Странно, у меня работают. Добавил зеркала

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить