Как я понял алгоритм:
1) Скопировать содержимое архива AT91SAM9260-SK в каталог "УСТАНОВЛЕННЫЙ_AT91-ISP v1.11/SAM-BA v2.7/lib"
2) Добавить строку в файл "SAM-BA v2.7/lib/boards.tcl":
"AT91SAM9260-SK" "AT91SAM9260-SK/AT91SAM9260-SK.tcl"
3) J6 отключаем, подключам usb кабель
4) Вкл питание
5) Заускаем SAM-BA.exe
6) Выбираем
connection: /usb/ARM0
board: AT91SAM9260-SK
Жмем Connect
7) После того как появится окно вкл J6 ( подсоединяем DataFlash )
8) Выбираем подкладку "DataFlash AT45DB/DCB"
9) В поле Scripts выбираем "Enable Dataflash on CS0", жмем Execute
После выполнения скрипта можем работать с Dataflash.
Теперь вопросы.
1) Стоит задача считать прошивку из DataFlash ( хочу забэкапить "заводскую" прошивку ).
Ставлю начальный адрес 0x0, Size:0x400000. Программа зависает.
Address - это адрес относительно Dataflash или адрес относительно микроконтроллера ( т.е. внутр памяти )?
2) Загрузка прошивки, я так понимаю, делается с помощью скрипта "Send Boot file". Можно в двух словах о последовательности действий? Может даже расскажите как прошить и boostrap и ядро одновременно.
Тут у меня возникла идея. Моя рабочая ОС - GNU/Linux. Решил, что, если буду дальше плотно и много работать с эти камнем, то попробую написать под эту ОС систему загрузки прошивок через USB. Благо, протокол открыт ( описан в даташите ). Алгоритм примерно такой как и у SAM-BA. А то как-то напряжно запускать vmware только для прошивки....
Разобрался. Оказывается SAM-BA не зависает, а очень долго считывает. Задал Address: 0x0, Size(For recieve file):0x3fffff. Так он загружал больше 10 минут.
Интересно, это только у меня так долго или у всех так?
Прикинул: 4 Мб / 600 сек ~= 56 кбит/с - может это из-за того что UART поверх USB работает на такой скорости?
В общем напряжно программировать 4 Мб 10 мин...
Вроде бы разобрался с распределением базовых программ в DataFlash:
0x00000 - 0x00E18 - Bootstrap
0x08000 - 0x1C3D4 - u-boot
Адресное поле я вычислил по размерам бинарников. Даже для проверки считал из DataFlah'a по эти адресам данные и проверил в hex-редакторе на совпадение с откомпилированными бинарниками - почти 100% совпадение ( пару байт в некоторых местах не совпадает - то ли компилятор разных версий, то ли считал с ошибками).
Хотя в конфиге bootstrap'а размер, загружаемого u-boot'a, указан - 0x30000, что будет поболее чем 0x1C3D4 - 0x08000 = 0x143D4. Но я так понял - это про запас, если u-boot увеличится или для выравнивания.
В конфиге Bootstrap'a определно, что u-boot загружается в sdram под адресу 0x21D00000. Вот это не совсем понятно. Получается, что SDRAMC ( или MATRIX или схема так спаяна - еще не разобрался, кто за это отвечает ) сконфигурирован так, чтобы адресное пространство SDRAM ложилось на подпространство 0x21D00000 - (0x21D00000+32 MB)? Тогда почему так сделано? Почему не использовалось 0x20000000 - (0x20000000 + 32 MB) как на SAM9260-EK? Неудобно получается - придется переделывать скрипты линкера для примеров атмела...
Да и еще не понял, где лежат ядро и рутфс - начал ковырять исходники u-boot'а, пока еще не разобрался... Но это пока не важно, потому что планирую запустить примера атмела без u-boot'a, т.е. bootstrap -> пример
Да, еще идея - выложить в раздел файлы - оригинальную прошивку ( я уже себе сделал резервную копию) и другие послезные файлы ( исходники ). Также неплохо было бы оформить изменения исходников и добавление новых драйверов ( u-boot, bootstrap и т.п. ) в виде патчей - удобно смотреть, что изменено и легче портировать на другие версии.
Итак, по порядку:
1) SAM-BA может не только через USB работать, так же и через COM-порт (для этого и идет в комплекте кабель, при этом джампера J7,J8 нужно перевести в положение 2-3), а так же через JTAG (J-Link, JetLink5, MT-Link) при этом не нужно будет джампер J6 перед перезагрузкой разрывать.
2) Вообще, через САМБУ не обязательно образы ядра и корневой ФС заливать, как Вы верно заметили это получится ОЧЕНЬ долго. Достаточно загрузить u-boot, далее через него можно залить DataFlash через разные интерфейсы: Ethernet - TFTP (сервер 192.168.0.2 запускается при старте виртуальной машины) обновить образы можно командой run tftp_update, так же через UART командой loadb XXXXXXXX передать через терминалку по kermit протоколу нужный образ а потом скопировать его в DataFlash. В принципе, еще USB карточка должна подключаться, у меня с "наскоку" не вышло, упорствовать не стал.
3)Скрипт САМБы "Send Boot file" сам сразу заливает загрузчик по адресу 0. Перед записью, сектора стирать не нужно, это происходит автоматом.
4)Стартовый адрес u-boot 0x21D00000 сделан таким чтоб он не пересекался с ядром (0х20000000) и корневой ФС (0х21100000).
5)Исходники ядра лежал /home/user/src/linux-2.6.24 скрипты для конфига и сборки make_menuconfig и make_kernel, последний после сборки сжимает и подготавливает ядро ("приклеивает лайбу" для u-boot) после копирует его в папку TFTP сервера.
6) Коренвая ФС создается в "ручную" (без builtrootfs), лежит в /home/user/src/rootfs. Порядок манипуляций: а)запускаете скрипт mount_ramdisk добавляете/удаляете необходимое, б)запускаете скрипт umount_ramdisk. Утилиты для коревой ФС (busybox ...) лежат /home/user/utils
Сейчас заметил, при старте виртуальной машины не поднимается интерфейс eth0, от чего все сетевые возможности отключаются (в частности TFTP сервер). Для включения, в терминале введите команду ifconfig eth0 192.168.0.2 up.
Спасибо большое за информацию. Буду разбираться...
Пока у меня стоит задача запустить stand-alone прогу, а с линуксом буду позже разбираться...
Кстати, насчет виртуальной машины. Чтобы заработал "Autofit Guest" нужно установить VMWare Tools: В меню "VM" -> "Install VMWare Tools.." Далее в виртуальной машине в консоли:
Далее жать всегда ентер. Потом перезагрузить машину.
Нужно также поставить галку в меню VMWare: "View" -> "Autofit Guest".
Теперь размер экрана будет подстраиваться под размер окна VMWare, а не 640x480!