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®
• Поддержка протокола 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.

doc6220-SAM-BA-Boot4CAN-Initialization-fig6-1

Рис. 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.

doc6220-CAN-Identifier-Remapping-fig6-2

Рис. 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).

doc6220-Point-To-Point-Connection-fig6-3

Рис. 6-3. Соединение точка-точка.

В противном случае переданный номер узла должен быть равен локальному номеру узла (local Node Number, NNB), см. рис. 6-4.

doc6220-Network-Connection-fig6-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.