CAN бутлоадер SAM-BA для микроконтроллеров AT91SAM |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Перевод описания стандартного бутлоадера CAN (SAM-BA™ Boot4CAN), который рекомендует Atmel для загрузки firmware в микроконтроллеры семейства AT91SAM. Оригинал документа см. AT91SAM CAN Bootloader User Notes site:atmel.com. [1. Описание] Бутлоадер CAN системы SAM-BA™ Boot4CAN позволяет пользователю программировать различные области памяти и регистры любого микроконтроллера, принадлежащего серии AT91SAM, который имеет аппаратуру CAN без удаления его из системы, и без необходимости иметь специально запрограммированное приложение. Бутлоадер CAN управляет обменом данными с внешним устройством (хостом) через сеть CAN. Он интерпретирует протокол CAN, который транслирует последовательные коммуникационные фреймы CAN в доступ к памяти и регистрам микроконтроллера. [2. Ключевые особенности] Ключевые особенности бутлоадера AT91SAM CAN Bootloader следующие: • Совместимость с семейством ARM® Thumb® [3. Конфигурация бутлоадера] В таблице 3-1 перечислены различные конфигурационные байты, используемые бутлоадером. Их значения доступны через команды установки. См. раздел 6.2.8 Специальные команды.
Табл. 3-1. Описание байтов конфигурации. Все конфигурационные байты размещены в памяти FLASH начиная с адреса 0x100F00. Перед первым соединением узла CAN в режиме точка-точка пользователь должен иметь в виду, что значения по умолчанию этих байт равны 0xFF (см. раздел 7. Аппаратные и программные ограничения). [4. Инициализация устройства] При инициализации происходят следующие шаги: 1. Настройка стека ARM в режиме супервизора (supervisor mode) [5. Автоматический выбор скорости CAN (CAN Autobaudrate)] Поддерживаемые скорости - 100 килобит/сек, 125 килобит/сек, 250 килобит/сек, 500 килобит/сек и 1 мегабит/сек. 5.1 Ограничения автовыбора скорости Автоопределение скорости, реализованное в SAM-BA Boot4CAN, эффективно работает только при соединении точка-точка. Причина в том, что в этом случае передача сообщения CAN будет повторяться, пока приемник не выполнит аппаратное подтверждение сообщения. Эта конфигурация соответствует тому, что хост пытается отправлять фреймы CAN, пока узел CAN с запущенным SAM-BA Boot4CAN не выдаст подтверждение (рис. 6-3). Бутлоадер может подтвердить входящий фрейм CAN только тогда, когда найдена подходящая конфигурация. Такая функциональность не гарантируется для сети, в которой присутствуют несколько узлов CAN. [6. Бутлоадер SAM-BA Boot4CAN] Эта секция описывает, как запустить бутлоадер CAN и протоколы верхнего уровня через CAN, который называется SAM-BA Boot4CAN. CAN используется для передачи информации и имеет следующую конфигурацию: 6.1 Инициализация бутлоадера SAM-BA Boot4CAN SAM-BA Boot4CAN initialization работает по следующему принципу: Имеется два способа инициализации контроллера CAN: Конфигурационные байты используются пользователем соответственно для следующих целей: Внимание: обратитесь к полному даташиту на используемый микроконтроллер для получения дополнительной информации по настройке и программированию длительностей бит шины CAN (CAN Bit Timing Programmation). Выбор между этими двумя решениями может быть сделан через байт конфигурации ABM: Рис. 6-1. Инициализация SAM-BA Boot4CAN. 6.2 Протокол SAM-BA Boot4CAN Этот протокол используется для следующего: 6.2.1 Описание стандартного фрейма данных CAN (Generic CAN Data Frame)
– Identifier: идентифицирует фрейм. Используется только стандартный режим (11 бит). 6.2.2 Описание команд Как только завершится инициализация SAM-BA Boot4CAN, то он запустится в бесконечном цикле в ожидании прихода различных команд (таблица 6-1). В таблице 6-1 перечислены идентификаторы сообщения CAN, заданные для управления протоколом.
Табл. 6-1. Команды, которые воспринимает бутлоадер SAM-BA Boot4CAN Можно выделить новое значение для идентификаторов CAN ISP, путем записи байта CRIS базовым значением для группы идентификаторов (см. рис. 6-2). Максимально допустимое значение для CRIS равно 0x7F. Все значения свыше 0x7F считаются как значения 0x00. Рис. 6-2. Переназначение идентификатора CAN (CAN Identifier Remapping) 6.2.3 Открытие и закрытие соединения Соединение с устройством (узлом CAN, на котором работает бутлоадер SAM-BA Boot4CAN) должно быть предварительно открыто для инициализации любого взаимодействия (обмена командами и данными). Для открытия обмена с устройством хост должен отправить сообщение CAN "соединение" ("connecting", CAN_ID_SELECT_NODE), с переданным в параметре номером узла (node number, NNB). Если переданный номер равен 0xFF, то CAN bootloader принимает соединение (см. рис 6-3). Рис. 6-3. Соединение точка-точка. В противном случае переданный номер узла должен быть равен локальному номеру узла (local Node Number, NNB), см. рис. 6-4. Рис. 6-4. Соединение в сети CAN. Перед открытием нового соединения с другим устройством текущий обмен устройства должен быть закрыт с его соединяющим CAN сообщением (CAN_ID_SELECT_NODE). 6.2.3.1 Запрос от хоста
Внимание: NNB является байтом номера узла (Node Number Byte) с которым хост хочет начать обмен. 6.2.3.2 Ответ от бутлоадера
Внимание: data[0] содержит версию бутлоадера. Если соединение закрыто, то другие сообщения не обрабатываются бутлоадером. 6.2.3.3 Пример Открытие соединения:
6.2.4 Команда чтения байта/полуслова/слова (Read Byte/Half-word/Word) Эта команда позволяет пользователю читать байты (8 бит), полуслова (16 бит, два байта) или слова (32 бита, 4 байта) по указанному адресу. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. 6.2.4.1 Запрос от хоста
6.2.4.2 Ответ от бутлоадера
6.2.4.3 Пример Чтение байта по адресу 0x202000:
6.2.5 Команда записи байта/полуслова/слова (Write Byte/Half-word/Word) Эта команда позволяет пользователю записать байты (8 бит), полуслова (16 бит, два байта) или слова (32 бита, 4 байта) по указанному адресу. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. 6.2.5.1 Запрос от хоста
6.2.5.2 Ответ от бутлоадера
6.2.5.3 Пример Запись слова по адресу 0x202030 (значение слова = 0xCAFEDECA):
6.2.6 Команда чтения буфера данных (Read Data Buffer) Эта команда позволяет пользователю прочитать буфер. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. Для начала операции чтения хост отправляет сообщение CAN "Read Data Buffer" (CAN_ID_RD_DATA), в котором указан начальный и конечный адрес, указанные в параметре. Если количество байт для чтения превышает 8, устройство делит их на блоки по 8 байт для передачи хосту. 6.2.6.1 Запрос от хоста
6.2.6.2 Ответ от бутлоадера
6.2.6.3 Пример Чтение данных с адреса 0x200000 до адреса 0x200009:
6.2.7 Команда записать буфер данных (Write Data Buffer) Эта команда позволяет пользователю записать буфер в память устройства. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. 1. Сначала указывается диапазон адресов, куда будет происходить запись данных. Хост должен заботиться о том, чтобы посылать 8 байт данных в одном сообщении CAN, если это возможно (если сообщение не последнее). Для старта операции записи хост отправляет сообщение CAN с командой записи "Write Command" (CAN_ID_WR_CMD), где в параметре передается начальный и конечный адреса, куда будет происходить запись. 6.2.7.1 Запрос от хоста
6.2.7.2 Ответ от бутлоадера
На втором шаге происходит передача данных для записи. Хост должен отправить сообщение CAN "Write Data" (CAN_ID_WR_DATA), в котором передаются до 8 байт данных для устройства, и затем должен ждать ответа от устройства перед тем, как отправить следующую порцию данных. 6.2.7.3 Запрос от хоста
6.2.7.4 Ответ от бутлоадера Устройство может выдать три варианта ответа:
6.2.7.5 Пример Запись байта '0x55' по адресам от 0x200000 до 0x200008:
6.2.8 Специальные команды Эти команды позволяют пользователю читать или записывать байты конфигурации. Также доступен переход по указанному адресу (предназначен для запуска приложения пользователя, которое может быть загружено бутлоадером и находиться в памяти). Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. 6.2.8.1 Предварительное требование Перед использованием одной из описанных здесь команд должен быть предварительно и корректно запрограммирован регистр режима контроллера FLASH (Embedded Flash Controller Flash Mode Register, EFC_FMR), за исключением команды перехода по указанному адресу. 6.2.8.2 Запрос от хоста
6.2.8.3 Ответ от бутлоадера Ответ на команду специального чтения (Special Read Command):
Ответ на команду специальной записи (Special Write Command):
Внимание: на команду перехода (Jump Command) бутлдоадер не выдает ответа. 6.2.8.4 Пример Чтение идентификатора перемещаемого сегмента CAN (CAN Re-locatable Identifier Segment, CRIS = 0x7F):
Запись значения байта номера узла (NNB) в 0xCA:
Переход по адресу 0x100000:
[7. Аппаратные и программные ограничения] • Первые 4 килобайта памяти FLASH зарезервированы для приложения бутлоадера CAN (CAN Bootloader Application, адреса 0x100000 .. 0x100FFF). [Ссылки] 1. Безопасная и защищенная реализация бутлоадера. |