Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

AT91SAM9260-ek + ULINK2 + KEIL

Ср окт 24, 2012 15:54:06

Всем доброго времени суток.
Есть отладочная плата AT91SAM9260-ek и программатор ULINK2. В Кеиле открыл прилагающийся к нему же (KEIL) файл проекта для работы с этой платой, мигание пользовательским светодиодом. Программирование происходит без проблем. После сброса платы, светодиод мигать не начинает...
Стал разбираться. Попробовал загрузить через SAM-BA бинарник (шел на диске к плате), все как описано в инструкции сделал, и все заработало - светодиоды мигают. попробовал проект в Keil - не работает. Стал смотреть дальше. Через Терминал посмотрел что выдает плата: RomBOOT > и на этом все. Я так полагаю что при подаче питания загружается первичный загрузчик BootStap, не находит исполнительного кода и останавливается. Собственно вопрос, как сделать что бы в KEIL после программирования сразу запускалась программа? прога грузится в SDRAM.
Заранее спасибо!

Re: AT91SAM9260-ek + ULINK2 + KEIL

Ср окт 24, 2012 16:47:11

Попробуйте скомпиленный Вами бинарник загрузить через SAM-BA Если лыжи поедут - значит неправильно настроен ULINK. Если нет - то внимательно проверьте опции проекта - адрес запуска, настройка частоты итп. Проблема может быть где угодно. В конце концов у Вас отладчик в руках - запустите отладку и пошагово смотрите, что происходит.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 13:21:58

Проверил в режиме отладки в реальном времени, все работает, диод мигает! В общем ситуация такая (как я понял), что бы запустить программу в автоматическом режиме при подаче питания, нужно загрузить ее в DataFlash, а потом в терминале указать адрес начального запуска, т.е. там где прошита программа. Делал ли кто-нибудь, что бы программа запускалась в автомате по указанному адресу? В сети нашел как это сделать, но что-то боязно так экспериментировать.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 13:42:26

Если в датафлэшку, начиная с её нулевого адреса, записан правильный образ программы, то загрузчик, намертво зашитый в сам процессор, считает этот образ во внутреннюю память проца и запустит его. Какой именно образ считается правильным, описано в документации на процессор (там, насколько помню, определённым образом должна быть оформлена таблица векторов прерываний, т.е. первые восемь слов образа). Если же образ в датафлэшке оказывается неправильным, то загрузчик пытается найти подходящий образ на других устройствах (только, подозреваю, нигде не сможет из-за бага в самом загрузчике; во всяком случае, насколько помню, в 9261 именно так дело и обстояло). Вот подробностей, извините, не помню -- дело с 9261 имел года 2 назад, если не больше...

Прошивкой неправильных образов в датафлэшку Вы ничего не испортите (ну, кроме возможности загрузить линух или что там шло прошитым заранее), так что экспериментировать можно смело.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 16:21:20

SII, если не ошибаюсь, вы программируете в KEIL. Подскажите пожалуйста, что и где в нем изменить в настройках загрузчика, что бы программа записывалась по адресу скажем не 0х20000000 (этот адрес установлен в проекте по умолчанию) в SDRAM, а по любому другому, например 0x10000000 (EBI CS0) или 0x40000000 (NAND FLASH) ?
Я пробовал в настройках менять 0х20000000 на 0х10000000 и 0х40000000, но при прошивке выскакивает ошибка, что невозможно записать в ARM926EJ-S.
И еще, в описании к МК указано, что если REMAP = 0 и BMS = 0 то идет загрузка с EBI_NCS0 (т.е. с адреса 0х10000000)
А на плате есть перемычка BMS, и если я все правильно понял, то она и указывает BMS = 0 или 1. А вот где и как поменять или посмотреть чему равно REMAP?

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 16:42:26

Так дебагер это просто устройство на шине. он умеет писать и читать в позиции по памяти.
Флешки он писать не умеет. Но можно написать хитрый скрипт, который управляя через отладчик NAND контроллером таки чтото сможет положить в память, а из нее записать в НАНД -))))))
Но оно надо ?

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 16:56:31

Кстати, в KEIL нашел вот это окно (файлик приложил). там в раскрывающемся списке есть выбор между внутренней памятью и SDRAM. а как добавить еще например NANDFlash или CompactFlash?

Этот параметр влияет на то, по какому адресу будет записываться программа или нет?
Вложения
keil.JPG
внутренняя память или SDRAM
(104.12 KiB) Скачиваний: 872

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 17:16:03

Satyr писал(а):Флешки он писать не умеет.


т.е. получается он пишет только в SDRAM...

и тогда получается что нужно переменные REMAP и BMS настроить на загрузку EBI_CS0 (адрес 0х10000000) и по этому адресу записать мою прогу, так?

или переменные REMAP и BMS настроить на загрузку EBI_CS0 (адрес 0х10000000) и по этому адресу записать загрузчик, который будет грузить мою прогу (и настроить его на загрузку с нужного адреса), а ее записать по адресу 0х20000000 (SDRAM) или так?

или я вообще все не так понимаю?

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 18:08:40

путешественник писал(а):т.е. получается он пишет только в SDRAM...

Неправильно. Пишет он в шину.
А уж кто на конкретном адресе и есть ли вобще он не ведает.

В случае SDRAMа по ту сторону контроллер SDRAM'а. Не будет он проинициализированн - не будет по тому адресу никакого SDRAMа, будет адресное пространство вникуда

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 19:42:37

Я так понял - знаний=0.
У AT91SAM9260 своей flash нет. Если на плате стоит flash с CFI, то код из нее запустить можно, но в подобных системах чаще используется другой метод - запускается bootstrap из ROM контроллера, который ищет по порядку возможные методы загрузиться (читайте даташит). Те, он по очереди просматривает все возможные подключенные хранилища (Serial flash, EEPROM итд). Как только находится подходящий имидж, он перегружается в RAM и выполняется. Поэтому адрес запуска в настройках линкера - это адрес начала RAM. Настоятельно советую изучить документацию на bootstrap и даташит на камень. И еще, насчет отладчика (Ulink/JLink/etc) и записи flash - отладчик ничего во flash не пишет. Алгоритм следующий - отладчик загружает в память и выполняет специальную программу-флешер, которая и производит запись во flash.
Я именно с AT91SAM9260 дело не имел, но обычно имеется целая куча примеров, шаблонов-скелетов с подробным описанием что и как делать. На демоплатах могут стоять джамперы или конфигурационные перемычки, положение которых определяет метод загрузки камня.
Если не разберетесь, то киньте ссылку на кит, который у вас не хочет работать, вместе разберемся.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 19:48:46

что-то я уже запутался наверное...
1. после подачи питания терминальная программа выдает ответ платы: RomBOOT>
в приложенном файле (карта памяти) я нахожусь в месте обведенном красным овалом, верно?
2. в самбе я "разрешаю" SDRAM и пишу туда программу, по адресу 0х20000000 и она помещается в место обведенное красным квадратом, верно?
3. в той-же самбе когда я пытаюсь "разрешить" DataFlash (CS0 или CS1) плата отвечает что ее нету!?
4. в аннотации справа вверху сказано, что в зависимости от REMAP и BMS выбирается загрузка в ROM, EBI_NCS0 или SRAM (приложил во втором файле) верно?
4. если так, то где эти REMAP и BMS установить?

прошу прощения если вопросы глупые, просто понимаю что я чего-то не понимаю, а чего не понимаю не пойму. :)
Вложения
внутренняя память.JPG
(28.79 KiB) Скачиваний: 849
память.JPG
(52.19 KiB) Скачиваний: 450

Re: AT91SAM9260-ek + ULINK2 + KEIL

Чт окт 25, 2012 22:58:28

С ARM раньше дел не имел, только AVR и то писал проги на Алгоритм билдере. Кеил изучал. но это было давно и с С51 и КР580ВВ52 (кажись так назывался).

coredumped, плата работает-светодиоды мигают, с этим вроде разобрался. Сейчас не могу понять как сделать что бы моя прога грузилась автоматически, после подачи питания.
отладочная плата у меня Атмеловская, фирменная AT91SAM9260-ek Evalution kit.
документацию на проц изучаю, а вот на bootstrap нет такой, завтра поищу, спасибо за совет.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 09:02:05

Скачайте атмеловский софтпак http://www.atmel.com/Images/at91sam9260-ek.zip , распакуйте. Там в корне есть index.html - почитайте статью про bootstrap, хоть какое-то объяснение как работает ЭТО у Атмела. Надо признать, что дока на ARM у Atmel - полное говно, но имеем то, что имеем. У Keil есть в составе флешер для загрузки в датафлеш, можете попробовать.
В меню Keil: Flash->Configure Flash Tools... Закладка Utilities выбираем "Use target driver for flash programming", выбираем наш отладчик (у вас Ulink) жмем кнопку Settings - получаем окно Flash download setup. Жмем Add и выбираем из списка AT91SAM9x25 ATD25DF321 и пробуем заливать во флешку. Я бы сам порверил, но подобных девкитов под рукой нет. На работе валяется где-то AT91SAM9G20 - но я туда попаду через неделю, не раньше. Этим у нас другой чел занимался с год назад, щас забросил за ненадобностью. Но если упретесь совсем, найду и сам проверю. Чип хоть и другой, но идеология в плане загрузки, одинаковая.
Еще советую почитать на стартеркитовском форуме http://www.starterkit.ru/html/index.php ... orum&cat=5 - там ребята с подобными проблемами бьются.
И еще один полезный ресурс http://www.at91.com/linux4sam/bin/view/ ... 1Bootstrap

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 10:29:44

путешественник, KEIL, да и любой другой подобный инструмент через программатор может "дотянуться" только до внутренней памяти контроллера или внешнего ОЗУ (в последнем случае сначала производится настройка контроллера памяти, чтобы это самое ОЗУ уже работало). Чтобы добраться до такой памяти, через программатор выполняется простая команда типа "прочитай ячейку" или "запиши ячейку".

Программирование датафлэшки идёт по-другому, поскольку с точки зрения процессора (а значит, и программатора) она не является массивом ячеек памяти (подключена-то через SPI). Сначала через программатор в ОЗУ "заливается" небольшая программка, которая и будет писать данные в датафлэшку, а потом в оставшееся свободное место ОЗУ порциями записывается информация для датафлэшки, а уже загруженная программка эти данные "шьёт" в датафлэшку. Кстати говоря, примерно то же самое, вероятно, происходит и при записи во внутреннюю флэш-память МК, где она есть (я просто не разбирался, как именно идёт этот процесс): ведь писать в тамошние ячейки, как в обычное ОЗУ, невозможно, надо выполнять ещё всякие другие манипуляции, не всегда описанные в документации.

У KEIL есть набор "алгоритмов" для программирования разных контроллеров, т.е. тех самых мелких программок для работы как с внутренней флэш-памятью, так и внешней (о них выше писал coredumped, когда указывал, где их выбирать). Однако не факт, что они будут в наличии в конкретной версии MDK. У меня сейчас стоит 4.54, и что-то я не вижу там внешние датафлэшки...

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 10:36:06

SII писал(а):Кстати говоря, примерно то же самое, вероятно, происходит и при записи во внутреннюю флэш-память МК, где она есть (я просто не разбирался, как именно идёт этот процесс):

Да.
собсно, в том же IARе можно посмотреть собсными глазами.
например, C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\flashloader\ST\FlashSTM32F10xxxRAM4K.out - лоадер нашего любимого "АРМ за 1$" :)))

Перед загрузкой и запуском флешлодера, дебагер непосредственной записью в регистры переферии инициализирует МК скриптом.
в вышеупомянутом случае FlashSTM32F10xxx.mac

Если памяти дофига и чтоб ускорить загрузку больших приложений и съэкономить ресурс флеша, можно написать свои лодеры, скрипты.
Я lpc178x с прогой в 256кб отлаживаю... из внешнего SDRAMа, куда прога грузится заметно шустрее, чем во флеш.

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 13:20:33

coredumped, спасибо за ссылки, изучаю. Сходил по последней ссылке, сделал как там описано, но при инициализации dataflash, ответ от платы:
DATAFLASH::Init 0
-I- DATAFLASH::Init 0 (trace level : 3)
-I- Loading applet isp-dataflash-at91sam9260.bin at address 0x20000000
-E- Script error: Error Initializing DataFlash Applet (Can't detect known device)
(AT91-ISP v1.11) 3 %

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 17:32:46

Пара причин возможных проблем, сразу пришедших в голову:

1. Возможно, на Вашей плате какой-нибудь перемычкой выбирается, загружать из датафлэшки или с СД-карты (где-то вроде встречал подобное решение). Если такая возможность имеется, надо убедиться, что перемычка замкнута так, чтобы давать доступ именно к датафлэшке.

2. Возможно, слишком древняя версия прошивалки, а на плате стоит новая датафлэшка, вот её и не опознаёт и не знает, как с ней работать...

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пт окт 26, 2012 17:57:23

перемычек несколько, но только одна выбирает загрузку через:
Enables boot on the NCS0 или Enables boot on the internal ROM
пробовал и так и так.
по второму пункту, "прошвалку" (сам-ба) взял с диска, который шел с платой. сам-ба версии 2.7. датафлеш atmel 45DB642D-CNU

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пн окт 29, 2012 12:01:05

отладочная плата почему-то перестала определяться самбой через usb :(
перед этим я попробовал загрузить bootstrap в нандфлэш и у меня все получилось, нандфлэш проинициализировалась и бинарник записался. но после этого плата перестала определяться самбой по USB....
подскажите, почему и как сделать что-бы плата по usb пределялась самбой?

Re: AT91SAM9260-ek + ULINK2 + KEIL

Пн окт 29, 2012 20:37:56

Все правильно. Она будет видеться самбой, когда выполняется загрузчир из ROM. Те, если бутлоадеру не удалось загрузить какое-либо приложение, он переходит в режим DFU и плата видится по USB. Короче, пока работает бутлоадер - плата видится как "SAMBA чета-там", когда бутлоадер запустил вашу программу - тут уже ваша программа определяет, как будет работать USB (host/device/OTG...)
Ответить