Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XE512-SIMXXX
Загрузка собственной платы на AT91SAM9XE512.
Fireball
Добавлено 11.01.2011 22:17
0
Сообщение: 1
Fireball
0

Пункты: 1075
Регистрация: 16.02.2010
Доброго времени суток!

Дано: плата собственной разработки на процессоре AT91SAM9XE512, по конфигурации полный аналог SK-MAT9XE512 + доставлена NAND.

Задача: в качестве теста платы хочу залить приведенные тут прошивки для SK-MAT9XE512. В качестве инструкции пользую ссылку: http://starterkit.ru/html/index.php?name=forum&op=view&id=6655

Проблема: После выполнения манипуляций приведенных в инструкции и запуска платы получаю полное отсутствие активности в DBGU (Пришлось сбрасывать Flash битом ERASE).
Далее место скрипта «Boot from Flash (GPNVM3)» сделал «Boot from ROM (GPNVM3)» (то есть пользую вшитый загрузчик) поидее после этих манируляций алгоритм загрузки совместим c AT91SAM9260. Тогда делаю следующее действие: вычитываю содержимое DataFlash из SK-AT91SAM9260 и заливаю в DataFlash своей платы. При старте в DBGU получаю:
Цитата
RomBOOT
>

И все, активности нет, то есть плата ждет подключения SAM-BA, не смотря на прошитые Flash'ы.

Далее нашел информацию что при заливки прошивки нужно использовать не кнопку «Send File» а скрипт «Send Boot File». Но тут столкнулся с проблемой что такого скрипта нет в SAM-BA 2.10(впрочем и на других версиях проверял) для данного кристалла. Пробовал для платы SK-AT91SAM9260 и соответствующего процессора, нужный скрипт имеется…
Решил поколядовать с SAM-BA’ой то есть в конфиге для ХЕ512 добавил строчку:
Код
"Send Boot File" "GENERIC::SendBootFileGUI"

В соответствующие секции для Flash, DataFlash, NANDFlash. Но при запуске этих скриптов получал ошибку в сам-бе:
Цитата
loading history file ... 0 events added
SAM-BA CDC console display active (Tcl8.4.13 / Tk8.4.13)
(SAM-BA v2.10) 1 %
(SAM-BA v2.10) 1 % FLASH::Init
-I- Loading applet isp-flash-at91sam9xe512.bin at address 0x300000
-I- Memory Size : 0x80000 bytes
-I- Buffer address : 0x300B58
-I- Buffer size: 0x6200 bytes
-I- Applet initialization done
(SAM-BA v2.10) 1 % GENERIC::SendBootFileGUI
-E- Unauthorized Boot File Size
(SAM-BA v2.10) 1 %


Уже подумываю прошить нужным скриптом DataFlash на плате SK-AT91SAM9260 и перепаять на целевую плату… но это слегка бредово…

Что я не правильно делаю? Почему плата не грузится? Кто-то сталкивался с подобными проблемами?
Прошу поделиться опытом...

P.S. Понимаю что проблема скорее всего решается примитивно, но найти решение самому не получись…
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 11.01.2011 22:49 Сообщение: 2
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
у меня нет ХЕ512, могу только потеоретизировать..
недавно давал похожий совет по 9260, вполне можно применить и тут (ничего нового):
Код
идите по цепочке от Bootstrap-a
в конце бутстрапа вместо вызова Uboot сделайте бесконечный цикл с поднять/опустить ножку - убедитесь, что загрузчик дошел до этого места. Допустим дошел, тогда вместо цикла вывод на консоль параметров при вызове Uboot-a, адрес запуска и начальный дамп (скажем 16 байт). Проверяете..
Метод ловли льва в пустыне тут неуместен. Проще проверить по цепочке, имея исходники, ширина шины, правильность инита SDRAM, там ли лежит Юбут, правильный ли Machine ID.
И т.д.
Если вы шьете чужие бинарники, там могут быть другие чип-селекты, тип SDRAM, карта раскладки частей системы..

чем смотреть на унылое Romboot>, лучше убедиться глазами в терминалке или осциллографом, что хотя бы Bootstrap работает. И это при условие исправного "самодельного" железа.
Для начала добейтесь сигнала что бутстрап добежал до конца и готов к запуску..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 11.01.2011 22:52 Сообщение: 3
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
вдогонку - датафлеш можно и не выпаивать, соединить обе платы по питанию, АРМ хе512 взвесить постоянным ресетом и пробросить несколько проводков до второй платы между Dataflash, а на исходной снять перемычку CS_DF..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.01.2011 23:18 Редактировалось 11.01.2011 23:20 Сообщение: 4
sasamy
4.70

Пункты: 77090
Регистрация: 14.08.2009
Цитата

Уже подумываю прошить нужным скриптом DataFlash на плате SK-AT91SAM9260 и перепаять на целевую плату… но это слегка бредово…


В hex-редакторе отредактируйте бинарник бутсрапа - по смещению 0x14 запишите его размер и можно шить его после этого простым send file.

PS это справедливо для 9260, возможно ромбут у xe512 работает по-другому, прочитайте его даташит, там эти моменты для загрузчика описаны.
Спуститься к концу Подняться к началу
Персональная информация
Fireball
Добавлено 11.01.2011 23:55 Сообщение: 5
Fireball
0

Пункты: 1075
Регистрация: 16.02.2010
Спасибо за рекомендации.
Собственно мне кажется что тут "затык" в том что отсутствует скрипт "Send Boot File" для процессора AT91SAMXE512 в SAM-BA.
Ведь этот скрипт нужно использовать при заливке?
Да и при использовании загрузки с ROM должна грузиться как минимум с DataFlash...с 100% рабочей прошивкой (которая работает на SAM9260)
Конечно может быть аппаратная ошибка, но с DataFlash SAM-BA нормально работает....

Да и если брать Bootstrap которая приведена по ссылке, то там при старте Bootstrap отзывается в DBGU....

По поводу конфигурации платы, за основу была взята схема SK-AT91SAM9260, естественно принципиальная схема аналогичная, печатная плата совершенно другая.
Спуститься к концу Подняться к началу
Персональная информация
Fireball
Добавлено 12.01.2011 00:14 Редактировалось 12.01.2011 00:27 Сообщение: 6
Fireball
0

Пункты: 1075
Регистрация: 16.02.2010
2 sasamy: Спасибо за совет. К сожалению не получилось загрузиться.
Собственно значит проблема не в скрипте загрузки...

2 Jury093: Что такое Machine ID? DataSheet ничего по этому поводу не говорит....
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 12.01.2011 08:56 Сообщение: 7
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
2 Jury093: Что такое Machine ID? DataSheet ничего по этому поводу не говорит....

и не скажет, а пока рано об этом говорить..
то, что у вас:
Цитата
Да и если брать Bootstrap которая приведена по ссылке, то там при старте Bootstrap отзывается в DBGU....

отзывается чужой бутстрап, говорит о том, что железо возможно исправно, проделайте вот это:
Код
Допустим дошел, тогда вместо цикла вывод на консоль параметров при вызове Uboot-a, адрес запуска и начальный дамп (скажем 16 байт).

или ищите, куда положить юбут, чтобы его нашел бутстрап

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Fireball
Добавлено 13.01.2011 01:25 Редактировалось 13.01.2011 01:33 Сообщение: 8
Fireball
0

Пункты: 1075
Регистрация: 16.02.2010
Прошу прощения, Вы меня не правильно поняли... точнее я не правильно выразился.
Цитата
Да и если брать Bootstrap которая приведена по ссылке, то там при старте Bootstrap отзывается в DBGU....

Я имел ввиду что при успешном запуске бутстрэп чего то бы и сказал бы в DBGU. А такого к сожалению не было...
Насколько я понимаю тогда проблема аппаратная?
Не могли бы Вы глянуть схему включения арма в плате? (я привожу только критичные узлы связанные с работой ARM'a).

К сожалению я не смог приложить схему к посту, схема доступна по адресу(выложил на свой ftp):
ftp://81.24.214.35/ARM_1.pdf
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 13.01.2011 10:14 Сообщение: 9
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Я имел ввиду что при успешном запуске бутстрэп чего то бы и сказал бы в DBGU. А такого к сожалению не было...
Насколько я понимаю тогда проблема аппаратная?

с новой самосборной платой всегда приходится решать комплекс программно-аппаратных проблем..
при таком раскладе начните все же с нуля (я бы пошел по такому пути) - взять исходники бутстрапа, в самом-самом начале поставить цикл с "поднять/опустить любой свободный пин", туда осцилл и заставить бустрап это исполнить. этим вы временно отсекаете все железо, кроме факта контролируемого запуска.
Получив гарантированный запуск начального бинарника остальное будет делом техники, вывод в DBGU, PLL, SDRAM.
Повторюсь, я не работал с хе512, т.ч. могу посоветовать последовать совету Саши и почитать внимательно раздел Power On Sequence для XE512, возможно вы где-то упустили что-то важное с с т.з. начальной загрузки..

Цитата
Не могли бы Вы глянуть схему включения арма в плате? (я привожу только критичные узлы связанные с работой ARM'a).

посмотрел, визуально все вроде на месте, но я не занимался проектировкой под АРМ, и запросто могу не увидеть некие тонкости..
кстати, как вариант, пощупайте осциллом DTXD пин 22 АРМа в момент попытки работы Bootstrap, этим отсечете возможную неисправность adm3202..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Fireball
Добавлено 30.01.2011 16:04 Редактировалось 30.01.2011 16:06 Сообщение: 10
Fireball
0

Пункты: 1075
Регистрация: 16.02.2010
Доброго времени суток!
Был занят другими делами, так что пришлось немного отложить поднятие платы.
Немного продвинулся, но возник ряд вопросов(опять...):
Завел BootStrap. Решил сразу воспользоваться встроенной flash и поместил BootStrap туда.
В качестве исходного BootStrap взял версию 1.16. Далее немного переписал код BootStrap что бы исходный код программы грузился так же из flash (компилировал с помощью компилятора arm-none-linux-gnueabi- который идет в образе линукса). Туда же (в flash)записал простейшую программу написанную в iar. То есть BootStrap лежит по адресу 0x200000, а программу я положил по адресу 0x202000. Залил все это в плату и получил:
1. При первом старте плата в DBGU выдает "крякозяблы", при втором все нормально... но:
2. Когда передаю управление загруженной программе, программа выполняется частично, как видно в терминале не дописалась фраза...

Привожу листинги BootStrap и main.c для IAR-проекта.

BootStrap. main.c
Код

#define FLASH_ADDR 0x202000
#define FLASH_SIZE 0x3000

#define BUF_SIZE 16

char strlen(char* str){
char result = 0;
while (str[result]){
result++;
}
return result;
}

void concat(char* first, char* second){
char i, l1, l2;
l1 = strlen(first);
l2 = strlen(second);
for (i = 0; i < l2; i++, l1++)
first[l1] = second[i];
first[l1] = 0;
}


char b2hGetChar(char value){
if (value < 10) return '0' + value;
else return 'A' + value - 10;
}

void b2h(char inValue, char* result){
result[0] = b2hGetChar(inValue & 0x0F);
result[1] = b2hGetChar((inValue >> 4) & 0x0F);
result[2] = 0;
}

void byteToHex(char inValue, char* result){
char buf[5];
result[0] = '0';
result[1] = 'x';
result[2] = 0;
b2h(inValue, buf);
concat(result, buf);
}


int main(void)
{
int i;
char app_buffer[BUF_SIZE] = {0x28, 0xF0, 0x9F, 0xE5, 0x28, 0x00, 0x9F, 0xE5,
0x28, 0x40, 0x9F, 0xE5, 0x04, 0xD0, 0xA0, 0xE1};
char buf[10];

/* ================== 1st step: Hardware Initialization ================= */
/* Performs the hardware initialization */
#ifdef CFG_HW_INIT
hw_init();
#endif

dbg_print("\r\nAT91BootStrap.\r\nHardware initialization done!\r\n");

dbg_print("Checking application...");
for (i = 0; i < BUF_SIZE; i++){
byteToHex(app_buffer[i], buf);
dbg_print(buf);
dbg_print(" - ");
byteToHex(*(char*)(FLASH_ADDR + i), buf);
dbg_print(buf);
dbg_print("\r\n");
if (app_buffer[i] != *(char*)(FLASH_ADDR + i))
break;
}

if (i != BUF_SIZE) dbg_print("failed\r\n");
else dbg_print("ok\r\n");


dbg_print("Now coping application from flash to RAM...\r\n");
for (i = 0; i < FLASH_SIZE; i+=4)
*(int*)(0x20000000 + i) = *(int*)(FLASH_ADDR + i);
dbg_print("Application copied. Checking the image...\r\n");
for (i = 0; i < FLASH_SIZE; i+=4)
if (*(int*)(0x20000000 + i) != *(int*)(FLASH_ADDR + i)){
dbg_print("check FAIL!");
break;
}
if (i!=FLASH_SIZE) while (1) {};

dbg_print("Application is correctly loaded. Starting application!\r\n\r\n");


return 0x20000000;

/* ==================== 2nd step: Load from media ==================== */
/* Load from Dataflash in RAM */
#ifdef CFG_DATAFLASH
load_df(AT91C_SPI_PCS_DATAFLASH, IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
#endif

/* Load from Nandflash in RAM */
#ifdef CFG_NANDFLASH
load_nandflash(IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
#endif

/* Load from Norflash in RAM */
#ifdef CFG_NORFLASH
load_norflash(IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
#endif

/* ==================== 3rd step: Process the Image =================== */
/* Uncompress the image */
#ifdef GUNZIP
decompress_image((void *)IMG_ADDRESS, (void *)JUMP_ADDR, IMG_SIZE); /* NOT IMPLEMENTED YET */
#endif /* GUNZIP */

/* ==================== 4th step: Start the application =================== */
/* Set linux arguments */
#ifdef LINUX_ARG
linux_arg(LINUX_ARG); /* NOT IMPLEMENTED YET */
#endif /* LINUX_ARG */



//for (i = 0; i < 1000; i++){
// *(int*)(0xFFFFF630) = 0xFFFF0FFF;
// *(int*)(0xFFFFF634) = 0xFFFF0FFF;
//}

/* Jump to the Image Address */
return JUMP_ADDR;
}


BootStrap. ...\nandflash\at91sam92xeek.h
Код

/* ******************************************************************* */
/* PMC Settings */
/* */
/* The main oscillator is enabled as soon as possible in the c_startup */
/* and MCK is switched on the main oscillator. */
/* PLL initialization is done later in the hw_init() function */
/* ******************************************************************* */
#define MASTER_CLOCK (200000000/2)
#define PLL_LOCK_TIMEOUT 1000000

#define PLLA_SETTINGS 0x2031BF03
#define PLLB_SETTINGS 0x10073F01

/* Switch MCK on PLLA output PCK = PLLA = 2 * MCK */
#define MCKR_SETTINGS (AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2)
#define MCKR_CSS_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | MCKR_SETTINGS)

/* ******************************************************************* */
/* NandFlash Settings */
/* */
/* ******************************************************************* */
#define AT91C_SMARTMEDIA_BASE 0x40000000

#define AT91_SMART_MEDIA_ALE (1 << 21) /* our ALE is AD21 */
#define AT91_SMART_MEDIA_CLE (1 << 22) /* our CLE is AD22 */

#define NAND_DISABLE_CE() do { *(volatile unsigned int *)AT91C_PIOC_SODR = AT91C_PIO_PC14;} while(0)
#define NAND_ENABLE_CE() do { *(volatile unsigned int *)AT91C_PIOC_CODR = AT91C_PIO_PC14;} while(0)

#define NAND_WAIT_READY() while (!(*(volatile unsigned int *)AT91C_PIOC_PDSR & AT91C_PIO_PC13))


/* ******************************************************************** */
/* SMC Chip Select 3 Timings for NandFlash for MASTER_CLOCK = 100000000.*/
/* Micron 16bits 256Mb for MASTER_CLOCK = 100000000. */
/* Please refer to SMC section in AT91SAM9261 datasheet to learn how */
/* to generate these values. */
/* ******************************************************************** */
#define AT91C_SM_NWE_SETUP (20 << 0)
#define AT91C_SM_NCS_WR_SETUP (10 << 8)
#define AT91C_SM_NRD_SETUP (20 << 16)
#define AT91C_SM_NCS_RD_SETUP (10 << 24)

#define AT91C_SM_NWE_PULSE (20 << 0)
#define AT91C_SM_NCS_WR_PULSE (20 << 8)
#define AT91C_SM_NRD_PULSE (20 << 16)
#define AT91C_SM_NCS_RD_PULSE (20 << 24)

#define AT91C_SM_NWE_CYCLE (20 << 0)
#define AT91C_SM_NRD_CYCLE (20 << 16)

#define AT91C_SM_TDF (20 << 16)


IAR main.c
Код

int main(void)
{
unsigned int i, j;

AT91C_BASE_PMC->PMC_PCER = PIOB_PHR_NUMBER;


AT91C_BASE_PIOB->PIO_PER = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_IDR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_MDDR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_OWDR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_IFDR = PIOB_ALL_USED_PINS;

AT91C_BASE_PIOB->PIO_PPUDR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_OER = PIOB_ALL_USED_PINS;


clock_init();


printf("Starting blinking\n\r");
for (i = 0; i < 70000000; i++){
AT91C_BASE_PIOB->PIO_SODR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_CODR = PIOB_ALL_USED_PINS;
if (i % 1000000) printf("%d\r\n", i);
}


while (1){
AT91C_BASE_PIOB->PIO_SODR = PIOB_ALL_USED_PINS;
AT91C_BASE_PIOB->PIO_CODR = PIOB_ALL_USED_PINS;
}

return 0;
}


Терминал:
Цитата

ЬШЗ&#9496;Ш~ьЪ&#247;uЬ&#9567;Z76жnъ&#9488;&#9576;я|ЧиШ{nЧЛъОnЭЧ?Ъ|ЭЪжф?ШЖ|ЪжЪ=Ъ|ЪЪЪ&#9567;ІЪvЖЛ|ЪЖЪр>>~ЪЧ,ЪВ©©©ВЪ©ЪЛЛЪЪа?Ж>~~{ЪЧ|ЪЪ&#9567;ВШ_ь&#247;
Э?&#9567;Ч&#9567;ШЬГШШНЖЭЬ\ЭЧЪЧ|ЪЪ&#9567;ЧЬ©&#247;ъ&#9488;ЭЪЖИЪ6Э{ЭЪЪиШЪШЬЖЪЧ|ЪЪ&#9567;Ъ.ДЧШШy,ЧчьІ<Ъ&#247;ъ&#9488;ъЯ|ж>n~{ЪЧ|iЪHЛЭPriМary setup is done. Starting...

AT91BootStraП.
Hardw|&#9565;rк+&#9600;&#9556;&#9496;&#9568;&#9556;И&#9496;я&#9556;Ґ&#9575;&#9474;&#9618;Ґ&#9575;•&#9496;5Rе•&#9608;ґ&#9556;
&#9575;&#178;&#9474;&#9496;аа&#9568;&#9556;м&#9496;я&#9556;Щ&#9575;&#9575;&#9575;r2&#9496;&#9556;&#9568;YшC!ЙК&#9474;&#9608;Ґа&#9556;&#9575;&#178;&#9474;&#9496;аа&#9568;&#9556;&#9608;&#9496;я&#9556;Ґ&#9575;&#9474;
&#9575;иҐ&#9571;&#9474;&#9577;&#9568;&#9496;м&#9553;&#9474;СҐ&#9474;ш5&#9575;ШrjЖЭApplication Цopied. Checking the image...
Pэ&#9574;ЖicatioЧ is kOЗy,+&#9474;&#9568;Ґ&#9496;&#9618;•&#9618;&#9575;&#9474; я&#9496;ия&#9556;&#9575;&#178;&#9474;
&#9496;аа&#9568;&#9556;&#9608;&#9496;я&#9556;Ґ&#9575;&#9496;5RЧє©gьlЪock Чзш6ЛЪЇitiьЖзЪВ - TC0&#9616;ЩьШТing blPrimary setup is done. Starting...

AT91BootStrap.
Hardware initialization done!
Checking application...0x82 - 0x82
0x0F - 0x0F
0xF9 - 0xF9
0x5E - 0x5E
0x82 - 0x82
0x00 - 0x00
0xF9 - 0xF9
0x5E - 0x5E
0x82 - 0x82
0x04 - 0x04
0xF9 - 0xF9
0x5E - 0x5E
0x40 - 0x40
0x0D - 0x0D
0x0A - 0x0A
0x1E - 0x1E
failed
Now coping application from flash to RAM...
Application copied. Checking the image...
Application is correctly loaded. Starting application!

P: clock time initialize - TC0
Starting bl

Подскажите пожалуйста, почему может обрываться выполнение программы?

P.S.: За оптимальностью не гнался поскольку для загрузчика ограничение по коду в 32к.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XE512-SIMXXX