|
|
  |
NIOS+I2C, Отчаялся уже |
|
|
|
Dec 23 2010, 06:50
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
Доброго времени суток!
Вот уже месяц не могу поднять 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 завожу на двунаправленные пины правильно ли это?
|
|
|
|
|
Dec 23 2010, 07:31
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
Я взял портированную для SOPC версию: http://www.alterawiki.com/wiki/OpenCores_I2c , встроил ее в систему при помощи SOPC билдера и вперед) Все нормально скомпилилось, вот только не работает ) Создание нового компонента прям из сорцев я пока не осилил. Может у Вас есть готовый рабочий компонент или пример? Я был бы очень благодарен.
Сообщение отредактировал Evired - Dec 23 2010, 07:41
|
|
|
|
|
Dec 23 2010, 08:47
|

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

|
В какой версии квартуса Вы работаете? Попадает ли информация об этом устройстве в BSP? Для завершения создания HAL API устройства нужно в корневой папке (т.е. там, где находится скрипт opencores_i2c_hw.tcl) создать свой скрипт opencores_i2c_sw.tcl, где прописать создание драйвера устройства, добавления его в BSP и инициализации устройства во время работы statup-кода. См. пример скрипта. В противном случае Вам придется работать с этим устройством на низком уровне - обращаться его регистрам макросами IOWR/IORD.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Dec 23 2010, 10:06
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
- Работаю в версии квартуса 10.1 - Информация в BSP попадает
по поводу скрипта сейчас попробую)
А если не писать этот скрипт а просто добавить инклудом нужные сорцы я же смогу с таким же успехом использовать высокоуровневые функции или я не прав?
Короче я запутался опять. Неужели ни у о кого нет готового решения?
Сообщение отредактировал Evired - Dec 23 2010, 09:13
|
|
|
|
|
Dec 31 2010, 09:56
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
Огромное спасибо) Прям подарок на новый год) как только опробую, отпишусь) Вопрос сразу, как SDA и SCL подключать? Обе к bidirectional пинам или SDA к bidirectional а SCL к output ?
Сообщение отредактировал Evired - Dec 31 2010, 10:01
|
|
|
|
|
Jan 3 2011, 08:42
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
Прикрутил предложенный COMA вариант i2c и сделал скрипт как говорил Stewart Little. Все равно не работает =( Выкладываю свой проект и скрипт:
FPGA.zip ( 383.96 килобайт )
Кол-во скачиваний: 168Если есть время и не очень лень, гляньте пожалуйста. Может все и работает на стороне ПЛИС, а проблема в слейв устройстве (это у меня сонар). Последнему нужно 5V TTL уровень а с ПЛИС идет 3,3V LVTTL. Сопряжение по уровням делаю при помощи такого девайса: http://www.sparkfun.com/products/8745Так что тонких мест много, а возможности проверить на другом девайсе нет. Но я все-таки грешу на ПЛИС... Где-то что-то я упустил в проекте походу.
Сообщение отредактировал Evired - Jan 3 2011, 08:44
|
|
|
|
|
Jan 4 2011, 03:14
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(Evired @ Jan 3 2011, 15:42)  Так что тонких мест много, а возможности проверить на другом девайсе нет. Но я все-таки грешу на ПЛИС... Где-то что-то я упустил в проекте походу. А что Вы наблюдаете с помощью осциллографа? Все ли сигналы и биты на месте? В свое время, при работе с шиной I2C, осциллограф мне очень помог... Запускайте цикл обращения по I2C, сформируйте синхросигнал и все будет видно... Смотрите до и после преобразователя уровня…
|
|
|
|
|
Jan 4 2011, 15:54
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 13-10-10
Пользователь №: 60 132

|
Все, задача решена =) Всем огромное спасибо за помощь) Проект от COMA оказался полностью рабочим, скрипт предложенный Stewart Little позволяет автоматизировать процесс подключения необходимых модулей и инициализации компонента. Моя проблема была связана с ошибкой в документации на используемое slave устройство (швейцарцы не всегда так точны как их часы, перепутали SCL и GND на схеме подключения). Надеюсь эта тема поможет желающим подключить i2c ip к своему проекту, все необходимые для этого файлы в данном топике есть)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|