Перевод описания стандартного бутлоадера 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® • Поддержка протокола SAM-BA™ Boot4CAN – CAN используется в качестве физического канала связи – 7 идентификаторов ISP CAN – переназначаемые/перемещаемые идентификаторы ISP CAN (Relocatable ISP CAN Identifiers) – режим программного автоматического выбора скорости (Software Autobaudrate Mode) • Команды для программирования в системе (In-system Programming Commands) – чтение/запись байта/полуслова/слова (Read/Write Byte/Halfword/Word) – чтение/запись буферов – чтение/запись байтов конфигурации (Configuration Bytes): номер узла шины CAN (CAN Node Number) перемещаемый сегмент идентификатора CAN (CAN Relocatable Identifier Segment) конфигурация программного автоматического выбора скорости (Autobaudrate Parameters Configuration) – команда запуска приложения (Start Application Command) • Программный интерфейс через DLL AT91Boot_DLL для использования ISP с помощью самописного приложения
[3. Конфигурация бутлоадера]
В таблице 3-1 перечислены различные конфигурационные байты, используемые бутлоадером. Их значения доступны через команды установки. См. раздел 6.2.8 Специальные команды.
Мнемоника |
Описание |
Значение по умолчанию |
Адрес FLASH |
NNB |
Node NumBer (номер узла) |
0xFF |
0x100F00 |
CRIS |
CAN Re-locatable Identifier Segment (сегмент переназначаемого идентификатора) |
0xFF |
0x100F04 |
ABM |
AutoBaud Mode (режим автоопределения скорости) |
0xFF |
0x100F08 |
PROPAG |
Propagation Segment (сегмент распространения) |
0xFF |
0x100F0C |
PHASE1 |
Сегмент фазы 1 |
0xFF |
0x100F10 |
PHASE2 |
Сегмент фазы 2 |
0xFF |
0x100F14 |
BRP |
Baudrate Prescaler (прескалер скорости) |
0xFF |
0x100F18 |
Табл. 3-1. Описание байтов конфигурации.
Все конфигурационные байты размещены в памяти FLASH начиная с адреса 0x100F00. Перед первым соединением узла CAN в режиме точка-точка пользователь должен иметь в виду, что значения по умолчанию этих байт равны 0xFF (см. раздел 7. Аппаратные и программные ограничения).
[4. Инициализация устройства]
При инициализации происходят следующие шаги:
1. Настройка стека ARM в режиме супервизора (supervisor mode) 2. Настройка встроенного контроллера FLASH (Embedded Flash Controller) 3. Определение частоты основного тактового генератора 4. Переключение на использование тактовой частоты (Master Clock) от основного генератора (Main Oscillator) 5. Копирование кода в SRAM 6. Инициализация переменных C 7. Настройка PLL (ФАПЧ): PLL инициализируется так, чтобы системная частота получилась 24 МГц 8. Запрет сторожевого таймера (Watchdog) и разрешение входа сброса 9. Конфигурирование CAN PIO, тактов и трансивера CAN 10. Переход к последовательности SAM-BA Boot4CAN (см. раздел 6. SAM-BA Boot4CAN)
[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 используется для передачи информации и имеет следующую конфигурацию: – Стандартный фрейм CAN, совместимый со стандартом CAN Specification 2.0A (размер идентификатора 11 бит) – Фрейм: фрейм данных (Data Frame) – Скорость (Baudrate): бутлоадером программно выполняется автоопределение скорости.
6.1 Инициализация бутлоадера SAM-BA Boot4CAN
SAM-BA Boot4CAN initialization работает по следующему принципу: – Проверяет байты конфигурации, заданные пользователем (User Configuration bytes). – Ожидает сообщений соединения CAN (CAN Connecting) и выполняет необходимое программно реализованное автоопределение скорости CAN (Software AutoBaudrate, см. рис. 6-1).
Имеется два способа инициализации контроллера CAN: – Использование программного автоопределения скорости (Software Autobaudrate). – Использование пользовательских байт конфигурации (User Configuration Bytes), сохраненных в регистр выбора скорости CAN (CAN Baudrate Register, CAN_BR) микроконтроллера.
Конфигурационные байты используются пользователем соответственно для следующих целей: – PROPAG: настройка времени распространения в сегменте (Propagation Time Segment): настраивается битовое время, используемое для компенсирования физической задержки сети. – PHASE1 и PHASE2: сегмент Phase 1 и Phase 2: параметры Phase-BufferSegments используется для компенсации ошибок на среза фазы. Эти сегменты можно увеличить (PHASE1) или сократить (PHASE2) с помощью ресинхронизации. – BRP: прескалер выбора скорости (Baudrate Prescaler): это поле позволяет пользователю запрограммировать период тактовую частоту подсистемы CAN, чтобы задать индивидуальную длительность бит.
Внимание: обратитесь к полному даташиту на используемый микроконтроллер для получения дополнительной информации по настройке и программированию длительностей бит шины CAN (CAN Bit Timing Programmation). Выбор между этими двумя решениями может быть сделан через байт конфигурации ABM: – ABM = 0xFF: выполняется программное автоопределение скорости (Software Autobaudrate). – ABM != 0xFF: используется конфигурирование регистра CAN_BR.
Рис. 6-1. Инициализация SAM-BA Boot4CAN.
6.2 Протокол SAM-BA Boot4CAN
Этот протокол используется для следующего: – инициализация соединения для обмена – чтение/запись байта/полуслова/слова (Read/Write Byte/Halfword/Word) – чтение/запись буферов – чтение/запись байтов конфигурации – переход по указанному адресу (для запуска приложения пользователя)
6.2.1 Описание стандартного фрейма данных CAN (Generic CAN Data Frame)
Поле идентификатора Identifier |
Поле управления Control |
Поле данных Data |
11 бит |
1 байт |
Максимум 8 байт |
– Identifier: идентифицирует фрейм. Используется только стандартный режим (11 бит). – Control: управление. Содержит информацию DLC в 4 битах (количество данных в поле данных). – Data: поле данных, которое содержит от 0 до 8 байт. Интерпретация данных в фрейме зависят от поля идентификатора.
6.2.2 Описание команд
Как только завершится инициализация SAM-BA Boot4CAN, то он запустится в бесконечном цикле в ожидании прихода различных команд (таблица 6-1). В таблице 6-1 перечислены идентификаторы сообщения CAN, заданные для управления протоколом.
Идентификатор |
Выполняемое действие |
Значение |
Первоначальное значение |
CAN_ID_SELECT_NODE |
Открытие/закрытие соединения с узлом |
0x[CRIS]0 |
0x0 |
CAN_ID_WR_CMD |
|
0x[CRIS]1 |
0x1 |
CAN_ID_WR_DATA |
|
0x[CRIS]2 |
0x2 |
CAN_ID_RD_DATA |
|
0x[CRIS]3 |
0x3 |
CAN_ID_RD |
|
0x[CRIS]4 |
0x4 |
CAN_ID_WR |
|
0x[CRIS]5 |
0x5 |
CAN_ID_SPC_CMD |
|
0x[CRIS]6 |
0x6 |
Табл. 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 Запрос от хоста
Идентификатор |
Длина |
data[0] |
CAN_ID_SELECT_NODE |
1 |
Номер узла (Node Number, NNB) |
Внимание: NNB является байтом номера узла (Node Number Byte) с которым хост хочет начать обмен.
6.2.3.2 Ответ от бутлоадера
Идентификатор |
Длина |
data[0] |
data[1] |
Комментарий |
CAN_ID_SELECT_NODE |
2 |
Boot Version |
0x00 |
Соединение закрыто |
0x01 |
Соединение открыто |
Внимание: data[0] содержит версию бутлоадера. Если соединение закрыто, то другие сообщения не обрабатываются бутлоадером.
6.2.3.3 Пример
Открытие соединения:
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_SELECT_NODE |
01 |
FF |
BOOTLOADER |
CAN_ID_SELECT_NODE |
02 |
01 01 |
6.2.4 Команда чтения байта/полуслова/слова (Read Byte/Half-word/Word)
Эта команда позволяет пользователю читать байты (8 бит), полуслова (16 бит, два байта) или слова (32 бита, 4 байта) по указанному адресу. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение.
6.2.4.1 Запрос от хоста
Идентификатор |
Длина |
data[0] |
data[1] |
data[2] |
data[3] |
data[4] |
Описание |
CAN_ID_RD |
5 |
0x05 |
Адрес |
Чтение байта |
0x06 |
Чтение полуслова |
0x08 |
Чтение слова |
6.2.4.2 Ответ от бутлоадера
Идентификатор |
Длина |
data[0] |
CAN_ID_RD |
1 |
Значение прочитанного байта |
2 |
Значение прочитанного полуслова |
4 |
Значение прочитанного слова |
6.2.4.3 Пример
Чтение байта по адресу 0x202000:
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_RD |
05 |
05 00 20 20 00 |
BOOTLOADER |
CAN_ID_RD |
01 |
69 |
6.2.5 Команда записи байта/полуслова/слова (Write Byte/Half-word/Word)
Эта команда позволяет пользователю записать байты (8 бит), полуслова (16 бит, два байта) или слова (32 бита, 4 байта) по указанному адресу. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение.
6.2.5.1 Запрос от хоста
Идентификатор |
Длина |
data[0:3] |
data[4] |
data[5] |
data[6] |
data[7] |
Описание |
CAN_ID_WR |
5 |
Адрес |
Значение |
- |
Запись байта |
6 |
Значение |
- |
Запись полуслова |
8 |
Значение |
Запись слова |
6.2.5.2 Ответ от бутлоадера
Идентификатор |
Длина |
data[0] |
Описание |
CAN_ID_WR |
1 |
0x00 |
Command OK |
6.2.5.3 Пример
Запись слова по адресу 0x202030 (значение слова = 0xCAFEDECA):
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_WR |
08 |
00 20 20 30 CA FE DE CA |
BOOTLOADER |
CAN_ID_WR |
01 |
00 |
6.2.6 Команда чтения буфера данных (Read Data Buffer)
Эта команда позволяет пользователю прочитать буфер. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение. Для начала операции чтения хост отправляет сообщение CAN "Read Data Buffer" (CAN_ID_RD_DATA), в котором указан начальный и конечный адрес, указанные в параметре. Если количество байт для чтения превышает 8, устройство делит их на блоки по 8 байт для передачи хосту.
6.2.6.1 Запрос от хоста
Идентификатор |
Длина |
data[0:3] |
data[4:7] |
Описание |
CAN_ID_RD_DATA |
8 |
Начальный адрес |
Конечный адрес |
Чтение байтов адресного пространства от начального адреса до конечного включительно |
6.2.6.2 Ответ от бутлоадера
Идентификатор |
Длина |
data[n] |
CAN_ID_RD_DATA |
n |
Прочитанные значения |
6.2.6.3 Пример
Чтение данных с адреса 0x200000 до адреса 0x200009:
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_RD_DATA |
08 |
00 20 00 00 00 20 00 09 |
BOOTLOADER |
CAN_ID_RD_DATA |
08 |
08 01 23 45 67 89 AB CD EF |
BOOTLOADER |
CAN_ID_RD_DATA |
02 |
EA FF |
6.2.7 Команда записать буфер данных (Write Data Buffer)
Эта команда позволяет пользователю записать буфер в память устройства. Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение.
1. Сначала указывается диапазон адресов, куда будет происходить запись данных. 2. Затем будут передаваться данные.
Хост должен заботиться о том, чтобы посылать 8 байт данных в одном сообщении CAN, если это возможно (если сообщение не последнее). Для старта операции записи хост отправляет сообщение CAN с командой записи "Write Command" (CAN_ID_WR_CMD), где в параметре передается начальный и конечный адреса, куда будет происходить запись.
6.2.7.1 Запрос от хоста
Идентификатор |
Длина |
data[0:3] |
data[4:7] |
Описание |
CAN_ID_WR_CMD |
до 8 байт |
Начальный адрес |
Конечный адрес |
Запускает команду записи данных |
6.2.7.2 Ответ от бутлоадера
Идентификатор |
Длина |
data[0] |
Описание |
CAN_ID_WR_CMD |
1 |
0x00 |
Command OK |
На втором шаге происходит передача данных для записи. Хост должен отправить сообщение CAN "Write Data" (CAN_ID_WR_DATA), в котором передаются до 8 байт данных для устройства, и затем должен ждать ответа от устройства перед тем, как отправить следующую порцию данных.
6.2.7.3 Запрос от хоста
Идентификатор |
Длина |
data[0] |
... |
data[7] |
Описание |
CAN_ID_WR_DATA |
до 8 байт |
x |
... |
x |
Данные для записи |
6.2.7.4 Ответ от бутлоадера
Устройство может выдать три варианта ответа: – если устройство готово принять новые данные, то оно отправляет сообщение CAN "Write Data" (CAN_ID_WR_DATA) с информацией "жду новую команду" ("Wait for New Command"), переданной в параметре. – если устройство завершило программирование, то оно передает сообщение CAN "Write Data" с результатом "Command OK", переданном в параметре. – если устройство не предполагает записать данные, то оно отправляет сообщение CAN "Write Data" с результатом "Command Not OK", переданном в параметре.
Идентификатор |
Длина |
data[0] |
Описание |
CAN_ID_WR_DATA |
1 |
0x00 |
Command OK |
0x01 |
Command Not OK |
0x02 |
Ожидание новой команды |
6.2.7.5 Пример
Запись байта '0x55' по адресам от 0x200000 до 0x200008:
|
Идентификатор |
Длина |
Данные |
// Инициализирование команды записи в буфер |
HOST |
CAN_ID_WR_CMD |
08 |
00 20 00 00 00 20 00 08 |
BOOTLOADER |
CAN_ID_WR_CMD |
01 |
00 |
// Запись данных в буфер |
HOST |
CAN_ID_WR_DATA |
08 |
55 55 55 55 55 55 55 55 |
BOOTLOADER |
CAN_ID_WR_DATA |
01 |
02 //Ожидание новой команды |
HOST |
CAN_ID_WR_DATA |
01 |
55 |
BOOTLOADER |
CAN_ID_WR_DATA |
01 |
00 //Command OK |
// Попытка хоста совершить ненужную передачу |
HOST |
CAN_ID_WR_DATA |
01 |
55 |
BOOTLOADER |
CAN_ID_WR_DATA |
01 |
01 //Command NOK |
6.2.8 Специальные команды
Эти команды позволяют пользователю читать или записывать байты конфигурации. Также доступен переход по указанному адресу (предназначен для запуска приложения пользователя, которое может быть загружено бутлоадером и находиться в памяти). Эта операция может быть выполнена только с тем устройством, с которым было предварительно открыто соединение.
6.2.8.1 Предварительное требование
Перед использованием одной из описанных здесь команд должен быть предварительно и корректно запрограммирован регистр режима контроллера FLASH (Embedded Flash Controller Flash Mode Register, EFC_FMR), за исключением команды перехода по указанному адресу.
6.2.8.2 Запрос от хоста
Идентификатор |
Длина |
data[0] |
data[1] |
data[2] |
data[3] |
data[4] |
Описание |
CAN_ID_SPC_CMD |
2 |
0x00 |
0x00 |
- |
Чтение NNB |
0x01 |
Чтение CRIS |
0x02 |
Чтение ABM |
0x03 |
Чтение PROPAG |
0x04 |
Чтение PHASE1 |
0x05 |
Чтение PHASE2 |
0x06 |
Чтение BRP |
3 |
0x01 |
0x00 |
Значение |
- |
Чтение NNB |
0x01 |
Чтение CRIS |
0x02 |
Чтение ABM |
0x03 |
Чтение PROPAG |
0x04 |
Чтение PHASE1 |
0x05 |
Чтение PHASE2 |
0x06 |
Чтение BRP |
5 |
0x02 |
Адрес |
Переход по указанному адресу (запуск приложения пользователя) |
6.2.8.3 Ответ от бутлоадера
Ответ на команду специального чтения (Special Read Command):
Идентификатор |
Длина |
data[0] |
Описание |
CAN_ID_SPC_CMD |
1 |
Значение |
Чтение байта конфигурации |
Ответ на команду специальной записи (Special Write Command):
Идентификатор |
Длина |
data[0] |
Описание |
CAN_ID_SPC_CMD |
1 |
0x00 |
Command OK |
Внимание: на команду перехода (Jump Command) бутлдоадер не выдает ответа.
6.2.8.4 Пример
Чтение идентификатора перемещаемого сегмента CAN (CAN Re-locatable Identifier Segment, CRIS = 0x7F):
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_SPC_CMD |
02 |
00 01 |
BOOTLOADER |
CAN_ID_SPC_CMD |
01 |
7F |
Запись значения байта номера узла (NNB) в 0xCA:
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_SPC_CMD |
03 |
01 00 CA |
BOOTLOADER |
CAN_ID_SPC_CMD |
01 |
00 |
Переход по адресу 0x100000:
|
Идентификатор |
Длина |
Данные |
HOST |
CAN_ID_SPC_CMD |
05 |
02 00 10 00 00 |
[7. Аппаратные и программные ограничения]
• Первые 4 килобайта памяти FLASH зарезервированы для приложения бутлоадера CAN (CAN Bootloader Application, адреса 0x100000 .. 0x100FFF). • Все конфигурационные байты размещены в памяти FLASH, начиная с адреса 0x100F00. Перед самым первым соединением с узлом CAN в режиме точка-точка пользователь должен иметь в виду, что все значения по умолчанию равны 0xFF (см. раздел 3. "Конфигурация бутлоадера"). • Бутлоадер SAM-BA Boot4CAN копирует самого себя в SRAM и использует блок внутренней памяти SRAM для переменных и стеков. Пользовательская память начинается за этим блоком, начиная с адреса 0x202000. • Регистр режима встроенного контроллера FLASH (Embedded Flash Controller Flash Mode Register, EFC_FMR) должен быть предварительно корректно запрограммирован для того, чтобы можно было использовать команды специального чтения или записи (Special Read, Special Write Commands).
[Ссылки]
1. Безопасная и защищенная реализация бутлоадера. 2. Безопасное и защищенное обновление firmware для AT91SAM. 3. AT91SAM7X: бутлоадер SAM-BA от компании Atmel. 4. SAM-BA boot agent. |