|
Затык с i2c |
|
|
|
Jun 17 2010, 10:14
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Здравствуйте! В общем, все просто - есть модуль i2c_contr, его назначение - запись по i2c в АЦП и ЦАП-е регистры и затем их чтение во внутреннюю память (модуль RAM55B), Выкладываю последний вариант в котором в железке стабильно работает запись в АЦП, остальное не работает.. В предыдущих вариациях иногда получал запись в ЦАП как требуется Чтение не работало ни разу, приходит NACK(SDAT == 1) после отправки адреса устройства с 8-м битом в 1(READ), прикладываю простенький тестбенч, для просмотра линий SCLK и SDAT надо смотреть внутренние sclk и sdat в i2c_contr, отображающие их поведение на линии, в реальности они собираются в верхнем модуле как assign sdat = sda_en ? sda_o : 1'bz, sda_i = sdat; assign sclk = scl_en ? scl_o : 1'bz, scl_i = sclk; (ибо open drain у третьего спартана нет) подскажите где лажаю, вроде все делал по стандарту I2C и даташитам
src.rar ( 3.44 килобайт )
Кол-во скачиваний: 91
--------------------
за Навального!
|
|
|
|
|
Jun 17 2010, 11:13
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Цитата(iosifk @ Jun 17 2010, 14:56)  Для начала надо посмотреть аппликухи ксайлинкса. Там I2C рассмотрен подробно и даны исходники... А потом рекомендую на входе клока поставить цифровой фильтр, чтобы убрать возможный дребезг из-за пологих фронтов. Удачи! В верхнем модуле клок clk для i2c_contr идет от входного пина ПЛИС по цеп-ке IBUFG -> DCM(x2) -> BUFG аппликухи - это application? их на сайте ксайлинкса искать? Спасибо UPS - нашел application I2C у хилых на сайте
--------------------
за Навального!
|
|
|
|
|
Jun 17 2010, 11:38
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Цитата(Maverick @ Jun 17 2010, 15:24)  И произошло чудо!  очень смешно  , по делу лучше бы что-то подсказали
--------------------
за Навального!
|
|
|
|
|
Jun 17 2010, 11:44
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Цитата(sazh @ Jun 17 2010, 15:39)  Если внешний резистор в наличии, open drain имитируется: assign sdat = sda_en ? 1'b0 : 1'bz так и делаю, есть внешние pull-up по 5КОм
--------------------
за Навального!
|
|
|
|
|
Jun 18 2010, 07:14
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Скажите, времянки то хоть правильные? Диаграммы записи(работающая) при моделировании(на осциллографе то же, только с реальными фронтами) -
- и чтения(неработающая)
нет аккноледжа после передачи адреса устройства с 8-м битом в 1(чтение) Частота SCL - 100 КГц(400КГц)
--------------------
за Навального!
|
|
|
|
|
Jun 18 2010, 11:49
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Цитата(DmitryR @ Jun 18 2010, 11:20)  Для того, чтобы получить ACK, надо SDAT перевести в highZ. На диаграмме этого не видно. так и есть, а в 1-ку SDAT притягивает pull-up, потому-что Slave аккноледжа не дает, и линию SCL при этом тоже не затягивает в низком состоянии(т.е. время ему для обработки больше не требуется)
--------------------
за Навального!
|
|
|
|
|
Jun 18 2010, 12:34
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Собираю sdat и sclk так - assign sdat = sda_en & !sda_o ? 0 : 1'bz, //немного описался в первом посте - фактически sda_o всегда - 0, иначе переключение sda_i = sdat; //линии sdat для установки в 1-ку пуллапом assign sclk = scl_en ? scl_o : 1'bz,//scl_o всегда 0 scl_i = sclk;
--------------------
за Навального!
|
|
|
|
|
Jun 18 2010, 20:10
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
Цитата(DmitryR @ Jun 18 2010, 20:25)  На sda_i ничего имитировать нельзя - он внутри UUT (unit under test), а все тестовые воздействия необходимо прикладывать извне UUT. И вы так и не сказали как у вас pullup симулируется. при работе в железке на осциллографе видно тоже, что показал на модельке, для этого и держу sda_i в 1-ке, а как вы предлагаете смоделировать pullup?
--------------------
за Навального!
|
|
|
|
|
Jun 22 2010, 09:01
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272

|
У ЦАП не заметил внешнего сброса сначала, на запись теперь он тоже работает, а вот на чтение отказывается. ЦАП - ADV7171, АЦП - AD9882a - оба от Analog Devices - пишутся, но не читаются по I2C зато микрочиповская память работает на запись/чтение как надо видимо что то аналог с чтением намутил
--------------------
за Навального!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|