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

 
 
> Прошивка ПЛИС фирмы Altera по JTAG из Linux, без Quartus, ByteBlaster и т.п.
Viwon
сообщение Sep 30 2016, 12:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Доброго времени суток!

Имеется процессор(OMAP-L138) архитектуры ARM с ОС Linux, к GPIO которого подключена ПЛИС Cyclone II по интерфейсу JTAG.

Продскажите, пожалуйста, готовый драйвер для прошивки ПЛИС или как это делается?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Jury093
сообщение Sep 30 2016, 13:05
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Viwon @ Sep 30 2016, 15:10) *
Имеется процессор(OMAP-L138) архитектуры ARM с ОС Linux, к GPIO которого подключена ПЛИС Cyclone II по интерфейсу JTAG.
Продскажите, пожалуйста, готовый драйвер для прошивки ПЛИС или как это делается?

проще сконфигурить Альтеру в passive serial и сцепить ваш L138 по SPI с альтерой
далее, в ядре поднимаете SPI и SPIDEV, конфигурите параметры
получаете /dev/spidev
в это устройство любым способом (cp, dd) закидываете бинарник битстрима
профит..
https://www.altera.com/en_US/pdfs/literatur...c2_cii51013.pdf
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 30 2016, 14:50
Сообщение #3


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Viwon @ Sep 30 2016, 15:10) *
Продскажите, пожалуйста, готовый драйвер для прошивки ПЛИС или как это делается?

Ищите по волшебным словам "JAM Player".
Например:
https://www.altera.com/support/support-reso...051_player.html
https://www.altera.com/support/support-reso...ode_player.html
https://www.altera.com/en_US/pdfs/literatur...x2_mii51015.pdf
И т.д. и т.п...


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Viwon
сообщение Oct 4 2016, 12:56
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Цитата(Jury093 @ Sep 30 2016, 16:05) *
проще сконфигурить Альтеру в passive serial и сцепить ваш L138 по SPI с альтерой

Плата уже изготовлена, не думал что с JTAG будут сложности, думал все давно обкатано. Если с JTAG не разберусь, то так и сделаю.

Цитата(Stewart Little @ Sep 30 2016, 17:50) *

В исходниках ядра нашел altera-stapl, как я понял, тот самый JAM Player переделанный в драйвер, правда JTAG реализован на LPT, вместо GPIO. Буду изучать.

Спасибо за помощь.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Oct 26 2016, 13:29
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Разобрался с altera-stapl - это модуль переводящий Compressed JAM файл(*.jbc) в "виртуальное" дерганье JTAG ножек. Для прошивки ПЛИС нужно просто реализовать функцию переводящую "виртуальное" дерганье ног в физическое.

int (*jtag_io) (void *dev, int tms, int tdi, int tdo);

Прошивка осуществляется вызовом единственной экспортируемой функцией, данного модуля, altera_init. Она принимает в качестве параметров файл прошивки(struct firmware), и указатель на нашу функцию (struct altera_config, поле jtag_io).

Вырезка из кода драйвера, для примера:

Код
static char *firmware_name = "fpga_firmware.jbc";
module_param( firmware_name, charp, S_IRUGO );
MODULE_PARM_DESC(firmware_name, "Name of FPGA firmware file in /lib/firmware (if not specified defaults to 'fpga_firmware.jbc')");

static int fpgaup_jtag_io(void *device, int tms, int tdi, int read_tdo)
{
    int tdo = 0;
    // Устанавливаем TMS
    gpio_set_value(TMS_PIN, tms);
    // Устанавливаем TDI
    gpio_set_value(TDI_PIN, tdi);
    // Считываем TDO, если нужно
    if (read_tdo) {
        tdo = gpio_get_value(TDO_PIN);
    }
    // Формируем строб сигнала TCK
    gpio_set_value(TCK_PIN, 1);
    gpio_set_value(TCK_PIN, 0);
    
    return tdo;
}

/**
* fpgacii_fw_load() - configure a FPGA
*
* Returns 0 on success, and an appropriate error value otherwise.
*/
static int fpgacii_fw_load(struct device *dev)
{
    const struct firmware *fw;
    int ret;
    char *action = "configure";// Выполняемое действие - конфигурирование
    struct altera_config fpgaup_config = {
        .dev = dev,
        .action = action,
        .jtag_io = fpgaup_jtag_io,
    };

    // load firmware
    ret = request_firmware(&fw, firmware_name, dev);
    if (ret < 0) {
        dev_err(dev, "%s: request_firmware failed: %d\n", __func__, ret);
        return ret;
    }
    // configure FPGA
    ret = altera_init(&fpgaup_config, fw);

    release_firmware(fw);

    return ret;
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:43
Рейтинг@Mail.ru


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