Skip to Content

AN3927 Freescale USB Mass Storage Device Bootloader Application Note Rev. 0, 11/2009

USB Mass Storage Device Bootloader.

Содержание


  1. Введение

  2. Функциональное описание
    2.1 Общее описание
    2.2 Режимы загрузчика и приложения
    2.3 Опознание USB устройств
    2.4 Псевдо FAT
    2.5 Разбор записей формата S19
    2.6 Повторное опознание устройства
    2.7 Статус загрузчика
    2.8 Защита программной памяти
    2.9 Переадресация таблицы векторов прерываний
    2.10 Использование стека и оперативной памяти
    2.11 Карты распределения памяти
    2.12 Использование ресурсов
     
  3. Структура проекта
    3.1 Структура каталогов проекта
    3.2 Структура проекта для ColdFire V2
    3.3 Структура проекта для ColdFire V1
    3.4 Структура проекта для MC9S08
     
  4. Использование загрузчика
    4.1 Предупреждение перекрёстных вызовов
    4.2 Использование загрузчика с отладочными платами
    4.3 Создание нового проекта с загрузчиком
    4.4 Добавление загрузчика в проект для ColdFire V2
    4.5 Добавление загрузчика в проект для ColdFire V1
    4.6 Добавление загрузчика в проект для MC9S08
    4.7 Перенос загрузчика на другие контроллеры
     
  5. Устранение неисправностей
    5.1 Вектор сброса
    5.2 Вектор пользователя
    5.3 Прерывания
    5.4 Загрузчик затирает собственный код
    5.5 Ошибки перекрытия сегментов при компоновке
    5.6 USB диск не появляется в управляющей системе
    5.7 Ошибка до начала записи файла
    5.8 Ошибки при стирании/записи программной памяти
    5.9 Перекрёстные вызовы
     
  6. Заключение


1 Введение

Freescale предлагает широкую гамму контроллеров с USB-портами. Использование USB в изделии позволяет легко обновлять внутреннее программное обеспечение в "полевых" условиях. Данная статья описывает USB загрузчик в виде съёмного носителя данных, пригодный для работы на нескольких семействах контроллеров Freescale. Устройство с загрузчиком подключается к управляющему компьютеру и опознаётся им как новый диск. Новое программное обеспечение копируется на этот диск, после чего устройство программирует само себя.

Компания Freescale предлагает и другие варианты, например, описаный в статье "USB загрузчик для MC9S08JM60" (AN3561) для семейства Flexis JM.

Загрузчик в виде съёмного носителя данных имеет следующие преимущества:

  • не требуется установка драйверов на управляющем компьютере;
  • не требуется запуск специальных приложений для обновления программы;
  • не требуются специальные знания и обучение. Единственная необходимая операция - копирование файла на диск;
  • совместимость со многими операционными системами.

Представляемая программа специально писалась под несколько семейств контроллеров Freescale, использующих сходные периферийные модули USB. Эти семейства включают Flexis JM, MC9S08JS и модели с портом USB из семейства ColdFire V2 MCF522xx. Предлагаемый код должен работать на всех этих контроллерах с минимальными правками. Примеры были написаны и проверены на следующем оборудовании:

Проверенные контроллеры Freescale:

MCF52259 32-х битный ColdFire V2;
MCF51JM128 32-х битный ColdFire V1, входит в семейство Flexis JM;
MC9S08JM60 8-и битный S08, входит в семейство Flexis JM;
 

Проверенные отладочные платы:

M52259DEMO отладочная плата под семейство MCF5225x;
DEMOJM отладочная плата под семейство Flexis JM;
 

Проверенные операционные системы:

Windows XP Pro, Service Pack 2;
Windows Vista business, 32-bit, Service Pack 1;
Fedora 8 с ядром Linux 2.6.26.
 



2 Функциональное описание


2.1 Общее описание

Загрузчик объединён с целевым приложением, реализующим основные функции устройства. Загрузчик запускается сразу после сброса контроллера и проводит несколько простых проверок для выбора между переходом к выполнению основного цикла загрузчика или стартом рабочей программы устройства. Если выбрано продолжение работы загрузчика, то устройство опознаётся подсистемой USB управляющего компьютера. В процессе опознания устройство декларирует себя как съёмный носитель данных, после чего управляющий компьютер монтирует в системе новый диск. Пользователь может копировать на этот диск файл в формате S19, вызывая тем самым процесс обновления программной памяти устройства.

Файл в формате S19 - текстовый файл, используемый для хранения содержимого программной памяти устройства. Среда разработки компании Freescale, называемая CodeWarrior, создаёт этот файл автоматически в результате компиляции проекта. Файлы такого формата имеют расширение ".s19" и в дальнейшем будут называться "файл S19".

После завершения передачи файла S19 устройству и окончания процесса обновления программной памяти, устройство перезапускает процедуру опознания нового устройства на шине USB. Файл, находящийся на диске, отражает статус текущей операции.


2.2 Режимы загрузчика и приложения

Загрузчик запускается сразу после сброса контроллера для выяснения в какой из режимов следует переводить устройство. Запуск загрузчика после сброса очень важен для случаев отсутствия или повреждения целевого приложения. При нормальном развитии событий загрузчик пытается перейти в прикладной режим. Каковой переход производится по вектору пользователя, ячейке памяти, расположенной по определённому адресу и содержащей адрес точки входа, то есть начала целевой программы. Вектор используется для предупреждения "перекрёстного вызова" (см. раздел "4.1 Предупреждение перекрёстных вызовов"). Абсолютный адрес начала программы может меняться в процессе правки и перекомпиляции программы, но вектор - адрес ячейки памяти, в которой хранится адрес начала приложения, - неизменен. Таким образом загрузчик всегда переходит по абсолютному адресу вектора пользователя и оттуда на начало целевой программы.

Перед тем, как перейти в прикладной режим, загрузчик производит несколько простых проверок для определения факта существования приложения. Сначала вектор пользователя проверяется на наличие инструкции "JMP". Затем адресный аргумент инструкции проверяется на стёртость. Если адрес назначения инструкции не стёрт, то загрузчик выполняет переход. В противном случае загрузчик переходит к процедуре обновления приложения.

Процедура обновления приложения может быть активирована принудительно в процессе сброса контроллера. Прилагаемые примеры следят за состоянием кнопки и если она нажата в процессе сброса, то загрузчик запускается принудительно, независимо от состояния вектора пользователя. Обозначение кнопки зависит от используемой отладочной платы. Обратитесь к разделу "4.2 Использование загрузчика с отладочными платами" за деталями. Реальные задачи могут потребовать изменения процедуры запуска загрузчика. Сделать это можно модификацией файла "user_entry_xx.c".


2.3 Опознание USB устройств

После того, как загрузчик перешел в режим обновления, он разрешает подсистеме USB контроллера начать обмен с управляющим компьютером. Данное действие запускает процесс опознания нового устройства на шине USB, которое подробно описано в статье "Шина USB и использование стека USB фирмы CMX" (AN3492). В предлагаемом загрузчике используется облегченный стек USB компании Freescale, занимающий очень мало места в памяти. Устройство объявляет себя накопителем данных, посылая управляющей системе соответствующий описатель. Управляющая система монтирует устройство как новый диск и использует для обмена BULK режим. Через BULK сеансы обмена передаются SCSI команды для управления тем, что управляющий компьютер считает съёмным накопителем данных.


2.4. Псевдо FAT

Управляющий компьютер, определивший устройство, как накопитель данных, пытается считать FAT - таблицу размещения файлов и выяснить содержимое диска. Загрузчик отвечает на запросы управляющего компьютера, как диск объёмом 1GB с меткой тома - "BOOTLOADER", в корневом каталоге которого располагается файл "READY.TXT". Подкаталоги отсутствуют. В реальности загрузчик не использует какую-либо файловую систему и только имитирует работу диска. Загрузчик может принимать файлы S19, но тот факт, что он лишь имитирует файловую систему, не позволяет ему изменять FAT когда управляющий компьютер пытается это сделать. Содержимое FAT фиксировано и единственное возможное изменение - изменение имени файла в корневом каталоге, отображающего статус загрузчика. Загрузчик игнорирует любые данные, которые пишутся не в корневой каталог "диска". Если данные пишутся в корневой каталог, то предполагается, что идёт запись файла S19. Факт записи на диск запускает процесс разбора формата S19 для получения нового содержимого программной памяти. После сброса контроллера возможна запись только одного файла. После завершения передачи загрузчик должен быть перезапущен, чтобы он мог принять другой файл.


2.5 Разбор записей формата S19

Загрузчик включает в свой состав процедуру разбора файлов в формате S19, позволяющую пересылать их в устройство без предварительной обработки. Пересылаемые загрузчику файлы считаются файлами S19 и после начала приёма файла запускается процесс его разбора. Каждая строка файла проверяется на соответствие формату, проверяется правильность контрольной суммы, принадлежность целевого адреса записи области приложения. Загрузчик проверяет все строки, но игнорирует данные, расположенные вне адресного пространстве целевого приложения. Затем производится запись данных из проверенной строки в программную память. Процесс передачи, проверки и записи прекращается после обнаружения строк с типами "S7", "S8" и "S9", знаменующих собой окончание файла. Если все строки были корректными и запись в программную память безошибочной, процедура разбора возвращает признак успешного выполнения и передаёт управление загрузчику. Если же при проверке какой-либо из строк будет зафиксирована ошибка, процедура разбора возвратит содержимое поля адреса сбойной строки.

Примечание.
Процедура разбора формата S19 не привязана к подсистеме USB или программе загрузчика и может применяться в других приложениях. Если требуется другой способ передачи данных, функция "GetUSBchar()" должна быть заменена новой, принимающей символ через другой интерфейс (UART, CAN и т.д.).


2.6 Повторное опознание устройства

После возврата из процедуры разбора формата S19, загрузчик инициирует повторное опознание устройства для обновления "файла" статуса на "диске" (собственно файл статуса обсуждается в разделе "2.7 Статус загрузчика"). Со стороны управляющего компьютера данный процесс виден, как кратковременное отключение съёмного устройства от шины USB. Через несколько секунд после повторного подключения к шине, устройство определяется системой и диск появляется снова. Файл на диске отражает текущей статус загрузчика.

Повторное опознание требуется из-за того, что некоторые операционные системы кэшируют диски и не обновляют информацию о файлах. К примеру, операционная система "Fedora 8" не пишет файл до момента размонтирования диска. После размонтирования устройство получает файл S19, обновляет содержимое программной памяти, после чего повторно опознаётся для отображения статуса. Операционные системы "XP" и "Vista" кэшируют таблицу размещения файлов на диске и не читают её в дальнейшем, что не позволяет обновить файл статуса. Процедура повторного опознания заставляет операционную систему заново считать FAT с диска и отобразить статус загрузчика.


2.7 Статус загрузчика

Для отображения статуса загрузчик использует драйвер файловой системы управляющего компьютера. Статус отображается именем файла в корневом каталоге диска. Файл не содержит данных и имеет нулевую длину. Данный метод позволяет отображать состояние вне зависимости от наличия устройств индикации в целевом устройстве. Кроме того, при обнаружении ошибки формата S19 статус отображает адрес ошибочного блока данных. Пользователь должен убедиться в наличии файла "READY.TXT" перед тем, как посылать данные в устройство. Результат процесса передачи данных проверяется после повторного опознания устройства по имени файла статуса. Ниже перечисляются возможные варианты:

 
READY.TXT
загрузчик готов к приёму файла в формате S19.
 
SUCCESS.TXT
загрузчик успешно завершил процесс обновления программной памяти.
 
FFAILED.TXT
ошибка операции стирания или записи программной памяти. Данная ошибка возникает при ошибках исполнения соответствующих процедур загрузчика. Обычная причина подобного результата - неправильная настройка тактирования программной памяти, либо выход за допустимый диапазон адресов. Например, адрес не является адресом программной памяти или указывает на защищённую область памяти. Для уточнения конкретных причин следует ставить точку останова на месте формирования сообщения об ошибке в файле "ParseS19.c".
 
SFxxxxxx.TXT
ошибка при разборе строки файла S19. Ошибка возникает в случае неправильного формата строки, ошибки контрольной суммы или некорректного целевого адреса. Содержимое поля адреса из проблемной строки подставляется в имя файла. Например, в случае ошибки в записи для адреса 0x1234 файл будет называться "SF001234.TXT". При появлении данной ошибки надо проверять файл S19 на правильность формата, адреса и контрольной суммы.
 
STARTED.TXT
программный файл для корневого каталога "диска" принят и запущена процедура его разбора. Обычно данный файл конечному пользователю не виден, так как устройство запускает повторную процедуру опознания только после успешного или неуспешного завершения процедуры разбора файла S19 или записи программной памяти. Если данный файл виден, то надо запускать отладчик и выяснять причину.
 

ПредпросмотрВложениеРазмер
an3927_this_text.rar448.8 КБ

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <b> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br> <p> <pre> <strike> <table> <tbody> <tr> <td>
  • Использовать как разделитель страниц.

Подробнее о форматировании