iltch 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Добрый день господа инженеры. Мне тут задали задачу сделать загрузчик для микросхемы ACEX 1K на микропроцессоре ATMega128. В принципе ничего сложного, я прочел рекомендайии ALTER-ы по этому поводу и решил делать так. Хранить прошивку ACEX-a (он ~20К) в памяти программ Меги ( 128К). Поточнее так в меге создаю массив размера 20К туда записываю данные из файла .RBF(прошивки ACEX), потом по SPI отправляю в ACEX при включении питания. Я прочел что .RBF файлы хранят 8-ми битные данные и посчитал, что это как раз то что надо , потому что у МЕГИ 8-и битный регистр SPI. Прошу ответить мне уважаемые специалисты в .RBF файлах храняться только биты которые надо передать в ПЛИС или еще какието разделители, знаки форматирования????? И еще прошу покритиковать тот способ которым я хочу восспользоваться и мои методы, ну и подсказать кое что из своего опыта. Всем заранее большое спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба В rbf битовый поток. Никаких разделителей там нет. Про порядок битов почитайте в даташите. Для загрузки читайте PS конфигурацию и воспроизводите вайвформу. Не факт что у вас получится это сделать через SPI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Структра у RBF все же есть, что-то типа : sync start -> заголовок -> блок1 -> ... блокX -> sync stop в конце кажного блока расположена некая контрольная инфа, которая проверяется заливаемым чипом. заливка по SPI работает, на форуме пробегало Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ybd 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Может, чисто формально, и есть какая-то сруктура, но для загузчика - все едино: надо просто загрузить весь файл в ПЛИС. По поводу порядка следования бит лучше почитать datasheet. Я делал такое на AT89S51 + 29Fxxx через UART в режиме shift register. Да, после загрузки всего файла надо выдать не менее 10 холостых импульсов DCLK для приведения ПЛИС в рабочее состояние. И при создании файла выбрать "rbf (sequental) ". Через SPI тоже должно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bsp 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Несколько лет назад делал подобную вещь - грузил в ACEX rbf файл с помощью ATiny28. Брал байт по I2C из внешней флешки и потом кидал этот байт ( правда не по SPI, сам изображал сигналы на выводах порта ) в ACEX и так много раз. НА SPI получится обязательно. Перерывы в подаче данных на ACEX делать можно, если клоки стопорить между посылками. Но datasheets читать внимательно - есть дополнительные сигналы взаимодействия. А дополнительные тактовые импульсы после загрузки можно выдавать с запасом - лишние не воспринимаютя ( это надо проверить - давно было, могу напутать ). И настройки проекта для микросхемы влияют, например сигнал INIT DONE может использоваться или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iltch 0 1 июня, 2008 Опубликовано 1 июня, 2008 · Жалоба Спосибо за ответы. В понедельник пойдуопробую все варианты. Главне что я узнал, ято весь .rbf файл надо залить в Плис и никаких разделтелей и заголовков там нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 2 июня, 2008 Опубликовано 2 июня, 2008 · Жалоба делал загрузчики для 1-ых циклонов и стратиксов. Временные диаграммы формировал сам, из rbf-файла брал только данные. Если нужно, могу поискать C++ функции...:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iltch 0 3 июня, 2008 Опубликовано 3 июня, 2008 · Жалоба Все получилось отлично. Сделал прошивку для процессора. Написал программу на VC++6.0 которая брала данные из .rbf файла прошивки ACEX добавляла к прошивке АТМеги. А в АТМеге программа загрузчик которая эти данные сливает в ПЛИС используя свой SPI. Все работает как часы. Правда былы некоторые трудности с тем что при подаче питания на ПЛИС надо подождать ~10 мкс (время работы аппаратного сброса по вкл. питания [POR] ПЛИСки), а только потом ее загружать. Этой инфы там где основные тайминги процесса загрузки ПЛИСа нет тка что пришлось голову по ломать что бы понять что же не так. Так что все тема закрыта все большое спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 3 июня, 2008 Опубликовано 3 июня, 2008 · Жалоба Написал программу на VC++6.0 которая брала данные из .rbf файла прошивки ACEX добавляла к прошивке АТМеги. Типа мы не ищем легких путей? А линкер на что? Или просто прямо HEX файлы c прошивкой и RBF склеить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Леонид Иванович 0 13 июня, 2008 Опубликовано 13 июня, 2008 · Жалоба Написал программу на VC++6.0 которая брала данные из .rbf файла прошивки ACEX добавляла к прошивке АТМеги. Можно проще. Файл прошивки можно указать прямо в исходнике в качестве инициализатора массива, если использовать формат ttf: const __hugeflash char FPGA_Config[]={ #include "..\Altera\MyProj.ttf" }; ;SPI Init: SPCR = (1<<SPE) | (1<<DORD) | (1<<MSTR); //SPI enable, LSB first, master SPSR = (1<<SPI2X); //double SPI speed bool FPGA_Configurate(void) { Port_nCONFIG_0; //nCONFIG <- 0 Delay_us(100); //delay 100 uS if(Pin_nSTATUS) return(0); Port_nCONFIG_1; //nCONFIG <- 1 Delay_us(100); //delay 100 uS if(!Pin_nSTATUS) return(0); for(long i = 0; i < sizeof(FPGA_Config); i++) { Spi(FPGA_Config[i]); if(!Pin_nSTATUS) return(0); if(Pin_CONF_DONE) break; } if(!Pin_CONF_DONE) return(0); Delay_us(100); //delay 100 uS Port_nCLR_1; //release nCLR return(1); } char Spi(char dat) { SPDR = dat; while(!(SPSR & (1 << SPIF))); return(SPDR); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sonya 0 14 апреля, 2011 Опубликовано 14 апреля, 2011 (изменено) · Жалоба Подскажите, пожалуйста, а можно ли каким-нибудь образом разбить файл .rbf на несколько частей меньшего объема, причем чтобы в коде программы контроллера ссылаться на ttf ? (то есть чтобы несколько раз ссылаться на ttf, который будет содержать в себе поочередно тот или иной кусок дробленного .rbf) Моя проблема в том, что надо конфигурировать EP1K50 (Acex 1K), файлы .rbf проекта весят 98кбайт, а пытаюсь конфигурировать Атмегой 32.... Хочу попробовать разбить rbf и по кусочкам заливать его в микросхему памяти (at45db). А потом из памяти уже в ПЛИС. Изменено 14 апреля, 2011 пользователем Sonya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 14 апреля, 2011 Опубликовано 14 апреля, 2011 · Жалоба Моя проблема в том, что надо конфигурировать EP1K50 (Acex 1K), файлы .rbf проекта весят 98кбайт, а пытаюсь конфигурировать Атмегой 32.... Хочу попробовать разбить rbf и по кусочкам заливать его в микросхему памяти (at45db). А потом из памяти уже в ПЛИС. Просто порезать на куски любого удобного размера. А откуда Вы его будете брать "по кусочкам"? Кто будет программировать ПЗУ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sonya 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба В том и состоит суть вопроса, как порезать rbf так, чтобы получить файлы ttf, указывающие на куски rbf, дабы использовать эти куски в прошивке атмеги как писал Леонид Иванович: const __hugeflash char FPGA_Config[]={ #include "..\Altera\MyProj.ttf" }; Другими словами я хочу несколько раз перепрошить атмегу, прописывая ttf, указывающие на разные куски rbf, и выставляя в каждой новой прошивке атмеги новые адреса для записи в датафлэш at45db (чтобы уместить 98килобайтный rbf в датафлэш) Можно ли так сделать вообще? Если нет, то какие пути решения этой проблемы есть? (кроме того, чтобы взять микроконтроллер с большим объемом внутр. флэш). О каком ПЗУ идет речь? Флэш атмеги программирую AVRISP, dataflash at45db программирует атмега, ПЛИС не имеет ПЗУ :) Но ее программировать будут по SPI at45db напару с атмегой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Другими словами я хочу несколько раз перепрошить атмегу, прописывая ttf, указывающие на разные куски rbf, и выставляя в каждой новой прошивке атмеги новые адреса для записи в датафлэш at45db (чтобы уместить 98килобайтный rbf в датафлэш) Можно ли так сделать вообще? А по RS-232 передавать весь файл целиком почему не хотите? Я так и делал. Передавал пачками, ждал подтверждения, после записи страницы в ПЗУ передавал следующую страницу и т.д. Теперь имею достаточное количество ОЗУ, передаю весь файл целиком, еще раз передаю для верификации, потом записываю целиком, потом проверяю, что записано правильно. А rbf - это просто сырые байты, байт за байтом, которые нужно заслать в ПЛИС. Любым редактором, работающим с двоичными данными, можно порезать на части. Например, WinHex, наверное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба ttf и rbf - близнецы. Просто один в двоичном виде, другой в текстовом. Копируйте из текстового редактора ttf кусками, вставляйте в исходник для atmega и редактируйте длину и начальный адрес записи этого блока. Но это странно. Действительно, как говорит ViKo - лучше написать программу, которая принимает данные по RS-232 и программирует at45db. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться