реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Использование epcs_flash_controller, Не получается получить доступ к флеш
sdimann
сообщение Jul 21 2014, 08:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



Всем доброго дня. Хочу использовать лишнюю память во флешке для своих нужд.
Для начала пытаюсь прочитать содержимое, записанное в процессе конфигурации.
Добавил в программу следующее:

#define ALT_USE_EPCS_FLASH
#include <altera_avalon_epcs_flash_controller.h>

ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INSTANCE ( EPCS_FLASH_CONTROLLER_0, epcs_flash_controller_0);

Далее, в main:

alt_epcs_flash_init(&epcs_flash_controller_0);

И пытаюсь прочитать область памяти:

alt_u8 buf_FL[32];
int offset = 0x019520;
int length = 32;
int var = 0;
for(var=0; var<32; var++){buf_FL[var]=0;}
alt_epcs_flash_read(&epcs_flash_controller_0.dev, offset, buf_FL, length);

В результате, у меня в буфере что-то появляется, но совсем не то, что лежит в .flash файле, которым была прошита конфигурационная флешка.
В остальном весь проект работает, и из флэш, и в режиме отладки. Может, кто подскажет - что я делаю не так?

Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 21 2014, 09:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(sdimann @ Jul 21 2014, 11:41) *

Давно делал не помню всех нюансов, но если глянуть старый код, то для инициализации контроллера я использовал макрос ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INIT.
Код
ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INSTANCE(EPCS_FLASH_CONTROLLER_0, epcs_flash);

void epcs_loader_test()
{
    char buf[8];
    int offset = 0, i;


    ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INIT(EPCS_FLASH_CONTROLLER_0, epcs_flash);

    for(i = 0; i < 65536; i++)
    {
        alt_epcs_flash_read(&epcs_flash.dev, offset, (void *) buf, 8);
        offset += 8;
    }
}
Go to the top of the page
 
+Quote Post
sdimann
сообщение Jul 21 2014, 09:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



Цитата(doom13 @ Jul 21 2014, 16:06) *
Давно делал не помню всех нюансов, но если глянуть старый код, то для инициализации контроллера я использовал макрос ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INIT.


Спасибо за ответ, значит я по крайней мере на правильном пути.
Это на самом деле одно и тоже, этот макрос определен в файле altera_avalon_epcs_flash_controller.h :

#define ALTERA_AVALON_EPCS_FLASH_CONTROLLER_INIT(name, dev) \
alt_epcs_flash_init(&dev)

Может, я сам себя обманываю? Должно ли содержимое флешки соответствовать содержимому файлов .flash, генерируемых квартусом для программирования этой флешки?
Go to the top of the page
 
+Quote Post
Swup
сообщение Jul 21 2014, 09:32
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Я реализовывал прошивку памяти через ниос и там было примерно так:
- нужно стереть память всю. стерается она по секторам. стертый байт - 0xFF
- получить файл .bin из .flash командой:

# Convert to binary
nios2-elf-objcopy -I srec -O binary my_project.flash my_project.bin

- заливать в память .bin
- снять и подать питание

Это я к чему. Может вы не то проверяете?
Не претендую на 100% достоверность.

ПС Да, при чтении из памяти получается в точности содержимое .bin файла

Сообщение отредактировал Swup - Jul 21 2014, 09:33
Go to the top of the page
 
+Quote Post
sdimann
сообщение Jul 21 2014, 09:47
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



Цитата(Swup @ Jul 21 2014, 16:32) *
- заливать в память .bin
- снять и подать питание

Это я к чему. Может вы не то проверяете?
Не претендую на 100% достоверность.

ПС Да, при чтении из памяти получается в точности содержимое .bin файла


Сгенерировал бин, проверил. Что .bin, что .hex, что .flash - во всех файлах одинаковые данные, только смотреть их надо по-разному.
И не совпадает с тем, что я читаю из флеш. Пробовал по разным адресам, и с 0, и с конца.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 21 2014, 21:26
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(sdimann @ Jul 21 2014, 12:47) *
Сгенерировал бин, проверил. Что .bin, что .hex, что .flash - во всех файлах одинаковые данные, только смотреть их надо по-разному.
И не совпадает с тем, что я читаю из флеш. Пробовал по разным адресам, и с 0, и с конца.

Hex - это прошивка самого Nios, она лежит в EPCS с какого-то там адреса, правильно ли Вы его считываете? Возмите rbf, он уж точно лежит с нулевых адресов в EPCS, и пробуйте его прочитать.
Go to the top of the page
 
+Quote Post
sdimann
сообщение Jul 22 2014, 04:16
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



Цитата(doom13 @ Jul 22 2014, 04:26) *
Hex - это прошивка самого Nios, она лежит в EPCS с какого-то там адреса, правильно ли Вы его считываете? Возмите rbf, он уж точно лежит с нулевых адресов в EPCS, и пробуйте его прочитать.


Я смотрел с учетом адреса, в hex и во flash в начале строки адрес стоит. Если файл сгенерен правильно, то по одинаковым адресам во всех файлах одинаковые данные.
Единственное, там есть упоминание про компрессию какую-то, может, она влияет?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 22 2014, 06:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у ксалинкса, например, часть файлов в ASCII кодировке, то есть вместо 0xA5 в памяти лежит буква А и 5, также это все собрано строками и перед ними стоит сдвиг адреса, а в конце контрольная сумма строки, это какой-то стандартизованный формат, не помню чей. Естественно при прошивке отрезается начало со сдвигом адреса, отбрасывается контрольная сумма, и 2 символа преобразуются в правильный один. Вы эти нюансы учли?

Попробуйте внешними средствами считать флэшку с понятного адреса.
Go to the top of the page
 
+Quote Post
sdimann
сообщение Jul 22 2014, 09:20
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



Цитата(Golikov A. @ Jul 22 2014, 13:35) *
у ксалинкса, например, часть файлов в ASCII кодировке, то есть вместо 0xA5 в памяти лежит буква А и 5, также это все собрано строками и перед ними стоит сдвиг адреса, а в конце контрольная сумма строки, это какой-то стандартизованный формат, не помню чей. Естественно при прошивке отрезается начало со сдвигом адреса, отбрасывается контрольная сумма, и 2 символа преобразуются в правильный один. Вы эти нюансы учли?

Попробуйте внешними средствами считать флэшку с понятного адреса.


Ну да, это hex формат так устроен. Конечно я это учел. Похоже, у меня какая-то проблема с реализацией BSP или QSYS. Сейчас пробую прочитать флешку на уровне SPI.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 22 2014, 11:39
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(sdimann @ Jul 22 2014, 12:20) *
Ну да, это hex формат так устроен. Конечно я это учел. Похоже, у меня какая-то проблема с реализацией BSP или QSYS. Сейчас пробую прочитать флешку на уровне SPI.

Сгенерте совместно с другими файлами конфигурации rbf, залейте прошивку в EPCS, посмотрите сходятся ли прочитанные данные с 0-х адресов с данными в rbf.
Для V-х FPGA, такой способ не подойдёт, там есть какя-то проблема с генерацией rbf. Ну и компрессию пока убирайте.
Go to the top of the page
 
+Quote Post
sdimann
сообщение Jul 23 2014, 02:33
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 9-02-05
Пользователь №: 2 514



В общем, частично разобрался. Я программировал флеш квартусом через индирект (.jic), предварительно конвертируя файлы. Глянул в создаваемый .map файл, а в нем действительно начала и концы сегментов не совпадают с теми, что во .flash файлах, то есть при конвертации в .jic квартус как-то преобразует данные. А при программировании с помощью ниос программера все данные совпадают - проверил считав флеш по SPI.
Но теперь у меня (после апгрейда ниос) флеш в ниосе не читается стандартными функциями. Буду сегодня разбираться.

Цитата(doom13 @ Jul 22 2014, 18:39) *
Сгенерте совместно с другими файлами конфигурации rbf, залейте прошивку в EPCS, посмотрите сходятся ли прочитанные данные с 0-х адресов с данными в rbf.
Для V-х FPGA, такой способ не подойдёт, там есть какя-то проблема с генерацией rbf. Ну и компрессию пока убирайте.

Подскажите, пожалуйста, каким образом rbf генерировать?
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Jul 23 2014, 07:38
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Цитата(sdimann @ Jul 23 2014, 06:33) *
Подскажите, пожалуйста, каким образом rbf генерировать?

меню FILE --> Conver tProgramming File. так же как и jic
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 23 2014, 20:03
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(sdimann @ Jul 23 2014, 05:33) *
Подскажите, пожалуйста, каким образом rbf генерировать?

Или можете в Assignments->Device->Device and Pin Options->Programming Files поставить галку напротив Raw Binary File (.rbf), тогда он будет автоматом генерироваться при каждой компиляции.
Go to the top of the page
 
+Quote Post
FLTI
сообщение Apr 20 2015, 07:46
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 8-06-05
Пользователь №: 5 832



Цитата(sdimann @ Jul 23 2014, 05:33) *
В общем, частично разобрался. Я программировал флеш квартусом через индирект (.jic), предварительно конвертируя файлы.

Скажите пожалуйста, если один и тот же .jic файл записывать в EPCS через JTAG в Квартусе с помощью USB Blaster и напрямую командами NIOS-а ( используя соответствующие команды драйвера epcs_commands.h ), то в EPCS получится один и тот же битстрим?
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 20 2015, 12:21
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Скажите пожалуйста, если один и тот же .jic файл записывать в EPCS через JTAG в Квартусе с помощью USB Blaster и напрямую командами NIOS-а ( используя соответствующие команды драйвера epcs_commands.h ), то в EPCS получится один и тот же битстрим?

Если использовать Nios flash programmer, утилиту встроенную в Eclipse, то да. Логично предположить, что если писать "вручную", то тоже да.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016