|
загрузчик по USB для at91sam7s256 |
|
|
|
Apr 3 2008, 11:53
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Приветствую. Разбираюсь с at91, пишу простой бутлоадер по USB (без криптографии и пр.). Драйвер для USB - CDC, пример с сайта работает вполне исправно, слегка подточил для себя. Атмеловскую доку почитал, но пока пребываю в конфузии  1) Нужно написать простое приложение со стороны хоста (Windows) для загрузки образа на флеш - не совсем понимаю, как правильно порезать образ на равные блоки (вроде документация советует всегда записывать страницами?) 2) со стороны бутлоадера как определить, что текущий блок последний (с тем чтобы после его записи передать управление на залитое во флеш приложение). Нужно ли каждый блок предварять каким-то хедером? Заранее благодарю за советы и замечания.
|
|
|
|
|
Apr 3 2008, 12:20
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(romez777 @ Apr 3 2008, 14:53)  1) Нужно написать простое приложение со стороны хоста (Windows) для загрузки образа на флеш - не совсем понимаю, как правильно порезать образ на равные блоки (вроде документация советует всегда записывать страницами?) Из PC лучше слать блоками по 64. Бут собирает два блока и заливает страницу. Цитата(romez777 @ Apr 3 2008, 14:53)  2) со стороны бутлоадера как определить, что текущий блок последний (с тем чтобы после его записи передать управление на залитое во флеш приложение). Нужно ли каждый блок предварять каким-то хедером? Перед началом в бут передается размер прошивки. Хедер не обязательно, а вот CRC было бы неплохо.
|
|
|
|
|
Apr 4 2008, 00:05
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(KAlex @ Apr 3 2008, 15:20)  Из PC лучше слать блоками по 64. Бут собирает два блока и заливает страницу. По 64 байта? А почему не сразу страницей, т.е. 256 байт, чем такой подход лучше? Цитата Перед началом в бут передается размер прошивки. Хедер не обязательно, а вот CRC было бы неплохо. Но размер всей прошивки не позволит выяснить окончание передачи всего образа?
|
|
|
|
|
Apr 4 2008, 06:11
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(romez777 @ Apr 4 2008, 04:05)  По 64 байта? А почему не сразу страницей, т.е. 256 байт, чем такой подход лучше? Для RS232 такой подход был бы лучше, для USB CDC я бы рекомендовал использовать большие пакеты (1-2 страницы). Цитата(romez777 @ Apr 4 2008, 04:05)  Но размер всей прошивки не позволит выяснить окончание передачи всего образа? То есть как? Вычитаем из общего размера длину каждого полученного пакета, если 0 - конец передачи. А вообще лучше сделать простенький командный интерфейс, чтобы PC говорил устройству, что делать: грузить/читать данные, запустить приложение и т.п.
|
|
|
|
|
Apr 4 2008, 07:37
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(aaarrr @ Apr 4 2008, 09:11)  То есть как? Вычитаем из общего размера длину каждого полученного пакета, если 0 - конец передачи. что-то я все равно не догоняю  Предположим размер образа 5088 байт. Пилим его на куски по 256 байт (это размер страницы для at91sam7s256), получаем 19 частей по 256 байт и 1 кусок размером 224 байта. Как здесь может помочь Ваш подход? Цитата А вообще лучше сделать простенький командный интерфейс, чтобы PC говорил устройству, что делать: грузить/читать данные, запустить приложение и т.п. для начала реализую что-то простое, чтобы просто работало, а потом буду добавлять фичи.
|
|
|
|
|
Apr 4 2008, 07:43
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(romez777 @ Apr 4 2008, 11:37)  что-то я все равно не догоняю  Предположим размер образа 5088 байт. Пилим его на куски по 256 байт (это размер страницы для at91sam7s256), получаем 19 частей по 256 байт и 1 кусок размером 224 байта. 1. Говорим загрузчику на кристалле: размер образа L=5088 байт. 2. Передаем 19 пакетов по 256 байт. Загрузчик вычитает размер пакета из размера образа (L=5088, L=4832, L=4576...L=224) 3. Передаем последний пакет 224 байта. В этот момент L=0, передача закончена.
|
|
|
|
|
Apr 4 2008, 11:18
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(aaarrr @ Apr 4 2008, 10:43)  1. Говорим загрузчику на кристалле: размер образа L=5088 байт. 2. Передаем 19 пакетов по 256 байт. Загрузчик вычитает размер пакета из размера образа (L=5088, L=4832, L=4576...L=224) 3. Передаем последний пакет 224 байта. В этот момент L=0, передача закончена. Приветствую. Я так и подумал, но тогда нужно передавать и размер пакета? Ведь принимаемый по USB буфер может быть бОльшего размера, например, 300 байт. Сорри за глупые вопросы  я только разбираюсь.
|
|
|
|
|
Apr 4 2008, 13:28
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Ага, таки хедер нужен - туда же можно и CRC поместить. Цитата(aaarrr @ Apr 4 2008, 14:22)  Размер и так будет известен, но лучше снабдить каждый пакет хидером, где будет указано: 1. Что это за пакет (код команды) То есть здесь можно передавать команды - например, запись страницы, чтение, запуск и пр. ? Т.е. простой командный интерфейс. Спасибо, сейчас перспектива намного яснее! Цитата 2. Его длина 3. и т.п. То есть сделать свой простенький протокол обмена.
|
|
|
|
|
Apr 5 2008, 12:20
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата Приложение должно быть собрано и слинковано: 1. Для старта с соответсвующего адреса 2. Со своим startup'ом, учитывающим наличие bootloader'а Вот в этом документе http://atmel.com/dyn/resources/prod_documents/doc6282.pdf посвященном бутлоадеру, почему-то ничего не сказано про то, как учитывать наличие бута из приложения  Что должно содержаться в C-startup'e приложения (ведь о нем речь?) - таблица векторов, объявленная в коде бутлоадера? Или может быть есть где-то почитать об этом? Цитата По-хорошему, это задача загрузчика передать основной программе процессор в наиболее приближенном к исходному состоянию виде, что, к сожалению, далеко не всегда возможно.
|
|
|
|
|
Apr 5 2008, 13:10
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Цитата(aaarrr @ Apr 5 2008, 15:38)  В самом загрузчике перед передачей управления следует сбросить использованную периферию и запретить прерывания. А в вызываемом приложении потом включать прерывания? А с чем связана необходимость отключать прерывания на момент передачи управления? Спасибо.
|
|
|
|
|
Apr 5 2008, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(romez777 @ Apr 5 2008, 17:10)  А в вызываемом приложении потом включать прерывания? Да. Цитата(romez777 @ Apr 5 2008, 17:10)  А с чем связана необходимость отключать прерывания на момент передачи управления? Вероятностью улететь из приложения в неизвестном направлении.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|