Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS+I2C
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Evired
Доброго времени суток!

Вот уже месяц не могу поднять i2c мастер под ниос. Версия квартуса 10.1. Пробовал опенкоровский вариант, не заводится(. Вот такой вот код:

#include <stdio.h>
#include "system.h"
#include "opencores_i2c.h"

int main()
{
printf("Hello from Nios II!\n");
I2C_init(OPENCORES_I2C_0_BASE,ALT_CPU_FREQ,400000);

// now right to the leds
I2C_start(OPENCORES_I2C_0_BASE,0xE0,0);
I2C_write(OPENCORES_I2C_0_BASE,0x0,0);
I2C_write(OPENCORES_I2C_0_BASE,0x51,1);
return 0;
}

Дает ответ NOACK постоянно. То есть не отвечает слейв устройство, хотя его адрес (0xE0) и адрес нужного порта (0x0) я ввожу правильно. Есть у кого-нибудь гарантированно рабочий i2c под nios (т.е. с tcl-скриптом для SOPC) ? А то я уже отчаялся почти... Как можно проверить работоспособность i2c без внешнего устройства? Может какие еще полезные советы? SDA и SCL завожу на двунаправленные пины правильно ли это?
Stewart Little
А что Вы с опенкоровским вариантом делали? Распишите Ваши действия подробнее.
Новый компонент на его основе создавали сами или как?
HAL API для него писали?
Evired
Я взял портированную для SOPC версию: http://www.alterawiki.com/wiki/OpenCores_I2c , встроил ее в систему при помощи SOPC билдера и вперед) Все нормально скомпилилось, вот только не работает ) Создание нового компонента прям из сорцев я пока не осилил. Может у Вас есть готовый рабочий компонент или пример? Я был бы очень благодарен.
Stewart Little
В какой версии квартуса Вы работаете?
Попадает ли информация об этом устройстве в BSP?
Для завершения создания HAL API устройства нужно в корневой папке (т.е. там, где находится скрипт opencores_i2c_hw.tcl) создать свой скрипт opencores_i2c_sw.tcl, где прописать создание драйвера устройства, добавления его в BSP и инициализации устройства во время работы statup-кода.
См. пример скрипта.

В противном случае Вам придется работать с этим устройством на низком уровне - обращаться его регистрам макросами IOWR/IORD.
Evired
- Работаю в версии квартуса 10.1
- Информация в BSP попадает

по поводу скрипта сейчас попробую)

А если не писать этот скрипт а просто добавить инклудом нужные сорцы я же смогу с таким же успехом использовать высокоуровневые функции или я не прав?

Короче я запутался опять. Неужели ни у о кого нет готового решения?
COMA
Я использовал I2C опенкоровский. Все работает. Завтра с работы могу дать файлы проекта.
COMA
Вот компонент для SOPC
Evired
Огромное спасибо) Прям подарок на новый год) как только опробую, отпишусь) Вопрос сразу, как SDA и SCL подключать? Обе к bidirectional пинам или SDA к bidirectional а SCL к output ?
Shtirlits
там есть каталог с документацией Docs, и судя по i2c_cpecs.pdf, нужно оба к bidirectional продключать.
Evired
Прикрутил предложенный COMA вариант i2c и сделал скрипт как говорил Stewart Little. Все равно не работает =( Выкладываю свой проект и скрипт:

Нажмите для просмотра прикрепленного файла

Если есть время и не очень лень, гляньте пожалуйста. Может все и работает на стороне ПЛИС, а проблема в слейв устройстве (это у меня сонар). Последнему нужно 5V TTL уровень а с ПЛИС идет 3,3V LVTTL. Сопряжение по уровням делаю при помощи такого девайса: http://www.sparkfun.com/products/8745
Так что тонких мест много, а возможности проверить на другом девайсе нет. Но я все-таки грешу на ПЛИС... Где-то что-то я упустил в проекте походу.
Serhiy_UA
Цитата(Evired @ Jan 3 2011, 15:42) *
Так что тонких мест много, а возможности проверить на другом девайсе нет. Но я все-таки грешу на ПЛИС... Где-то что-то я упустил в проекте походу.

А что Вы наблюдаете с помощью осциллографа? Все ли сигналы и биты на месте?
В свое время, при работе с шиной I2C, осциллограф мне очень помог... Запускайте цикл обращения по I2C, сформируйте синхросигнал и все будет видно... Смотрите до и после преобразователя уровня…

Evired
Все, задача решена =) Всем огромное спасибо за помощь) Проект от COMA оказался полностью рабочим, скрипт предложенный Stewart Little позволяет автоматизировать процесс подключения необходимых модулей и инициализации компонента. Моя проблема была связана с ошибкой в документации на используемое slave устройство (швейцарцы не всегда так точны как их часы, перепутали SCL и GND на схеме подключения). Надеюсь эта тема поможет желающим подключить i2c ip к своему проекту, все необходимые для этого файлы в данном топике есть)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.