Перейти к содержанию
    

Вот проект тестовый

Primer_1.rar

Похоже вы давно не чистили папку с проектом.

Для генерации BSP вы используете файл CPU.sopcinfo,

а ваша система генерирует CPU_SOPC.sopcinfo.

 

Последний сгенерировал нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже вы давно не чистили папку с проектом.

Для генерации BSP вы используете файл CPU.sopcinfo,

а ваша система генерирует CPU_SOPC.sopcinfo.

 

Последний сгенерировал нормально.

Попробую пересоздать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, я полнейший новичок, но так вышло, что сразу попал в пекло на работе. Есть Stratix IV, готовый .ptf - файл. К плате подключена EEPROM AT24C1024 (даташит, очень коротенький: 24c1024.pdf ). Задача такая - записать что-то в эту память и считать оттуда это что-то. На данном этапе хотя бы одно слово, чтобы мне разобраться, что куда. Создал шаблонный проект "hello world", собрал, получил system.h. Все, что мне нужно из system.h, - это:

 

/*

* i2c_comod configuration

*

*/

 

#define I2C_COMOD_NAME "/dev/i2c_comod"

#define I2C_COMOD_TYPE "i2c_alt"

#define I2C_COMOD_BASE 0x0240a61c

#define I2C_COMOD_SPAN 4

#define ALT_MODULE_CLASS_i2c_comod i2c_alt

 

Интерфейс работы с AT24C1024 - два 16-разрядных регистра, объединенных в один. Описание интерфейса (одна страничка): i2c_master__ComMod_.doc .

 

В чем проблема - я первый раз в жизни встретился с NIOS, Altera, EEPROM и т.д. Все, что я знаю, это программирование на C++ и университетский курс цифровой схемотехники. Таким образом, если это не составит труда, хотелось бы услышать более разжеванное объяснение в терминах программирования, чего же от меня хотят, т.к. пока что не представляю, как вообще эти регистры интерфейса увязать с самой памятью, то есть проблемы на фундаментальном уровне понимания. Понимаю, как гвозди забивать, но не знаю, куда, и что вообще требуется сколотить. Особо буду рад примерам кода или каким-то ссылкам на то, что мне следовало бы изучить, чтобы понять всё это дело. Еще раз - мне не требуется полноценная программа работы с памятью, только пример записи/считывания слова, чтобы понять фундамент. Дальше сам. Спасибо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, я полнейший новичок,...

В чем проблема - я первый раз в жизни встретился с NIOS, Altera, EEPROM и т.д. Все, что я знаю, это программирование на C++ и университетский курс цифровой схемотехники.

Если Вы правильно описали свой опытто мой совет - начните с мигания светодиодами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если Вы правильно описали свой опытто мой совет - начните с мигания светодиодами.

 

Светодиодами уже мигал. Тут просто не моя инициатива, на работе надо что-то делать, вот дали задание следующее после светодиодов. Парень сказал, что очень легко, но он мне не расскажет, а то мне будет неинтересно. А я прям не знаю, с какой стороны подступиться :biggrin:

Хвастаться не буду, но обучаемость и интеллект у меня не страдают, так что я чувствую в себе силы в этом разобраться достаточно быстро, вот только нужно вектор движения правильный задать, так как время не ждет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...А я прям не знаю, с какой стороны подступиться :biggrin: ...

Используйте нисходящее программирование, изучите datasheet 24c1024.pdf и задавайте вопросы автору i2c_master__ComMod_.doc.

 

Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов. :biggrin:

I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM.

 

/*

* I2C.h

*

* Created on: 03.03.2012

* Author:

*/

 

#ifndef I2C_H_

#define I2C_H_

#include "alt_types.h"

 

// результаты выполнения функций (коды ошибок)

#define I2C_OK 0

#define I2C_IO_ERROR -1

#define I2C_ADDRESS_OVERFLOW -2

 

// максимальный байт, который можно адресовать в AT24C1024

#define EEPROM_LENGTH 131071

 

// размер страницы для AT24C1024

#define EEPROM_PAGE_LENGTH 256

 

/*

*

* Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM.

* Функция возвращает результат выполнения чтения из EEPROM AT24C1024

*

*/

alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

/*

*

* Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255

* Функция возвращает результат выполнения записи в EEPROM AT24C1024

*

*/

alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data);

 

 

#endif /* I2C_H_ */

Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать.

I2C.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используйте нисходящее программирование, изучите datasheet 24c1024.pdf и задавайте вопросы автору i2c_master__ComMod_.doc.

 

Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов. :biggrin:

I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM.

 

/*

* I2C.h

*

* Created on: 03.03.2012

* Author:

*/

 

#ifndef I2C_H_

#define I2C_H_

#include "alt_types.h"

 

// результаты выполнения функций (коды ошибок)

#define I2C_OK 0

#define I2C_IO_ERROR -1

#define I2C_ADDRESS_OVERFLOW -2

 

// максимальный байт, который можно адресовать в AT24C1024

#define EEPROM_LENGTH 131071

 

// размер страницы для AT24C1024

#define EEPROM_PAGE_LENGTH 256

 

/*

*

* Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM.

* Функция возвращает результат выполнения чтения из EEPROM AT24C1024

*

*/

alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

/*

*

* Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255

* Функция возвращает результат выполнения записи в EEPROM AT24C1024

*

*/

alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data);

 

 

#endif /* I2C_H_ */

Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать.

 

Спасибо большое :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое :rolleyes:

Добро пожаловать в Nios II :rolleyes:

 

Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами:

  • Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен.
  • Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения.
Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h:

/*

* EEPROM.h

*

* Created on: 03.03.2012

* Author:

*/

 

#ifndef EEPROM_H_

#define EEPROM_H_

#include "alt_types.h"

 

// результаты выполнения функций (коды ошибок)

#define EEPROM_OK 0

#define EEPROM_IO_ERROR -1

#define EEPROM_ADDRESS_OVERFLOW -2

 

// максимальный байт, который можно адресовать в AT24C1024

#define EEPROM_LENGTH 131071

 

 

/********************************************************************************

*******************************

*

* Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM.

* Функция возвращает результат выполнения чтения из EEPROM AT24C1024

*

********************************************************************************

*******************************/

alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

/********************************************************************************

*******************************

*

* Запись "len" байт начиная с адреса "offset" EEPROM из массива "data".

* Функция возвращает результат выполнения записи в EEPROM AT24C1024

*

********************************************************************************

*******************************/

alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

#endif /* EEPROM_H_ */

В свою очередь, у Вас появится желание задать вопрос автору i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II.

Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно :biggrin:

EEPROM.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добро пожаловать в Nios II :rolleyes:

 

Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами:

  • Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен.
  • Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения.
Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h:

/*

* EEPROM.h

*

* Created on: 03.03.2012

* Author:

*/

 

#ifndef EEPROM_H_

#define EEPROM_H_

#include "alt_types.h"

 

// результаты выполнения функций (коды ошибок)

#define EEPROM_OK 0

#define EEPROM_IO_ERROR -1

#define EEPROM_ADDRESS_OVERFLOW -2

 

// максимальный байт, который можно адресовать в AT24C1024

#define EEPROM_LENGTH 131071

 

 

/********************************************************************************

*******************************

*

* Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM.

* Функция возвращает результат выполнения чтения из EEPROM AT24C1024

*

********************************************************************************

*******************************/

alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

/********************************************************************************

*******************************

*

* Запись "len" байт начиная с адреса "offset" EEPROM из массива "data".

* Функция возвращает результат выполнения записи в EEPROM AT24C1024

*

********************************************************************************

*******************************/

alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);

 

 

#endif /* EEPROM_H_ */

В свою очередь, у Вас появится желание задать вопрос автору i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II.

Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно :biggrin:

 

Сел разбираться. Насколько я понимаю, функция eeprom_write должна записывать данные из массива data в EEPROM. Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io, которая выдает в регистр REG_COMMAND_WRITE команду начала обмена, адрес устройства, бит P0 (так и не понял его назначение) и признак записи/чтения.

Если я правильно понимаю, мне нужно при помощи команд IOWR и IORD записывать/читать по содержащемуся в REG_COMMAND_WRITE адресу информацию из data. А разряды REG_STATUS_READ, помеченные как информация для чтения, должны помещать в себе читаемую информацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io...

Это просто пример использования регистра REG_COMMAND_WRITE. В I2C.h я использую макрос с именем COMOD_WR_CONTROL. Действительно, правильнее использовать для этого макроса имя REG_COMMAND_WRITE.

... бит P0 (так и не понял его назначение)...

Нужно изучить pdf.gif 24c1024.pdf. Емкость EEPROM AT24C1024 составляет 128 Кбайт. То есть, чтобы адресовать байт используется 17-разрядный адрес. Младшие 16 разрядов выдаются двумя байтами после Device Address (см. рис. 2, 3, 5, 6). А старший разряд адреса, который не поместился в эти два байта, выдается в разряде P0 байта Device Address.

 

Если я правильно понимаю...

По-моему, Вам нужно попросить автора i2c_master__ComMod_.doc упростить жизнь и себе и Вам. На самом деле нет никакого выигрыша от применения этого контроллера связи с EEPROM. Ни по времени обращения к EEPROM ни по размеру программы процессора Nios II. Для работы с EEPROM необходимо управлять всего двумя сигналами SCL и SDA. Интерфейс FPGA с EEPROM должен содержать два регистра на чтение и запись. Они так и должны называться SCL и SDA. Через младшие разряды этих регистров процессор Nios II будет устанавливать и считывать состояние линий SCL и SDA. Значение старших разрядов этих регистров должно игнорироваться при записи и устанавливаться в ноль при считывании.

Таким образом, автор i2c_master__ComMod_.doc должен добавить к SOPC два компонента PIO и закончить разработку "контроллера связи с EEPROM" в течение 5 минут. А Вы потратите пару дней на изучение pdf.gif 24c1024.pdf, написание и отладку программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу помочь с программированием EPCS4, уже 4-й день мучаюсь но не могу запустить из неё nios II.

Сразу скажу что форум перерыл весь, за 4 дня испробовал всё что тут нашёл, но ничего не работает.

 

Скриншоты ключевых моментов прилагаются.

 

Содержание файла nios2-flash-override.txt, не уверент что тут всё правильно написано поправте если что:

[EPCS-FF] # EPCS4N
sector_size = 65536
sector_count = 8

 

таким скриптом пользовался:

#!/bin/sh
sof2flash --input=EPCS4_SRAM.sof --output=epcs.flash --epcs --verbose
elf2flash --input=software/soft/soft.elf --output=soft.flash --epcs --after=epcs.flash --verbose
nios2-elf-objcopy -I srec -O ihex soft.flash soft.hex

 

Что бы я не делал через nios2-flash-programmer заливаю ли я прошивку или что то подобное, флешка стирается (erase) но прогресс не уходит дальше 0% и имеем то что видим на terminal_bad.gif(прикрепл.).

 

Пробовал создавать по методике с сайта naliwator.narod.ru там где elf файл добавляли к sof конвертировали в hex и затем конвертером в jic.

Аппаратная часть работает NIOS II так и не смог оживить.

Вектор сброса указал на контроллер EPCS. (eclipse_BSP_editor.gif)

 

Что дальше делать не знаю, подскажите кто чем может, уже даже не знаю за что и хвататься, что делаю не так?

post-66096-1331177323_thumb.png

post-66096-1331177329_thumb.png

post-66096-1331177340_thumb.png

post-66096-1331177344_thumb.png

post-66096-1331177764_thumb.png

Изменено пользователем Orochi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Orochi, пробовали на залитой системе активизировать проект, загрузив через Eclipse elf файл? В какой версии Quartus II работаете? Пробовали ли прочитать ончип память после старта процессора? Пробовали ли вы не в Qsys, а в Sopc Builder создать подобный проект?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге, после 5 дней "напряжённого труда" удалил проект и создал его заново. И как не странно Flash Programmer с первого раза всё прошил на ура без единой ошибки. А если бы у меня был проект не "тестовый" ... даже страшно думать ... время жалко)

 

PS: Quartus 11.1 sp2 32-bit/Windows 7 - 32-bit

Изменено пользователем Orochi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времери суток, товарищи программеры :)

Подскажите такую штуку: вставляю свои библиотеки в проект (виртуальный каталог с системы), но не все файлы из этих библиотек я использую. Проектов много, и в одних нужно использовать одни файлы, в других другие, но библиотеки общие. Так вот, когда я делаю на ненужных файлах "Exclude from build..." - файл помечается другим значком (типа стал игнорируемым), но при компиляции он остаётся в Makefile и соответственно вкомпиливается и выдаёт ошибки (ошибки связанные с наличием перифирии, которой нет в этом проекте, но используется в других проектах). Если создать несколько файлов в корне проекта - то вроде как функция исколючения файлов с компиляции работает нормально, но именно на виртуальных каталогах непонятный глюк. Подскажите пожалуйста, может я не правильно каталог библиотек добавил, или же нужно как-то по-другому осуществлять менеджмент библиотек?

В примере я исключил FRAM.C но видно, что в Makefile он остался.

ЗЫЖ В Nios II 11й версии уже всё отлично работает, и хорошо всё сделано, НО сам квартус очень глючный,а SOPC вообще неизвестно как компилит :(

post-70841-1331906127_thumb.jpg

Изменено пользователем StripSmile

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возникла такая проблема. Самый простой пример с прерываниями не работает - count_binary (который идет в комплекте с квартусом и ниосом). Подобные обработчики прерываний раньше уже писал на версии 9.1 - все работает. При переносе проекта на новый квартус 11.1 - ни в какую. В среде NIOS II SBT при компиляции выводит сообщение об ошибке - undefined reference to alt_ic_irq_register (использую vectored interrupt controller). Т.е. не может зарегистрировать обработчик прерывания. Заголовочный файл "sys\alt_irq.h" добавлен. Все по идее должен видеть - но результат нулевой. Не работает также функция alt_irq_register.

 

На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет?

Изменено пользователем _Desh_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...