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

Проблема с SPI АЦП AD9680

8 минут назад, Garik сказал:

Не помню

А зря. Вам дали дельный совет искать методом исключения — если перед буфером видите нули, логично после него выставить единицы, и тогда будет видно, передаёт ли АЦП.

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


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

On 10/1/2020 at 12:33 PM, des00 said:

а единицу?

Да без проблем.

AD9680_1.thumb.png.dcc96d8298b9b8ddbf6f50b685d7ab0d.png

Как видно на осциллограмме AD9680 SDIO - не передает данные данные. Это 4 регистр (Chip ID) всех 0 или 1 быть не должно.

 

 

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


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

1 hour ago, Garik said:

Как видно на осциллограмме AD9680 SDIO - не передает данные данные. Это 4 регистр (Chip ID) всех 0 или 1 быть не должно.

Выложите полную осциллограмму  с портов плис (это 4 сигнала) и с портов АЦП (3 сигнала). Мне на вашей картинке ничего не понятно) 

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


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

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


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

On 10/2/2020 at 8:38 PM, des00 said:

Выложите полную осциллограмму  с портов плис (это 4 сигнала) и с портов АЦП (3 сигнала). Мне на вашей картинке ничего не понятно)

SPI_ILA_2.thumb.png.7c2955cac450dfd042c5cb66fbce7b0b.png

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


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

29 minutes ago, Garik said:

Выше!

эммм, это где тактовой нет? там два сигнала? тактовую покажите.

Это я к чему, если вы выполняете все требования TIMING SPECIFICATIONS из даташита и график на пинах АЦП SDIO, SCLK, CSB верный и SPIVDD в норме, то проблема не в конвертере, а в АЦП. Нет переключения направления SDIO, т.к. там только трехпроводка, то я бы предположил обрыв пайки. PWDR/STBY на работу SPI не влияют.

ЗЫ. Если плата самодельная, то пузо же припаяли? это не термопад, это большая земля.

Quote

Exposed Pad. The exposed thermal pad on the bottom of the package provides the ground reference for AVDDx. This exposed pad must be connected to ground for proper operation

он конечно якобы аналоговый, но мало ли что там внутри)

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


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

42 minutes ago, des00 said:

эммм, это где тактовой нет? там два сигнала? тактовую покажите.

Это я к чему, если вы выполняете все требования TIMING SPECIFICATIONS из даташита и график на пинах АЦП SDIO, SCLK, CSB верный и SPIVDD в норме, то проблема не в конвертере, а в АЦП. Нет переключения направления SDIO, т.к. там только трехпроводка, то я бы предположил обрыв пайки. PWDR/STBY на работу SPI не влияют.

ЗЫ. Если плата самодельная, то пузо же припаяли? это не термопад, это большая земля.

Это отладочная плата от AD. Мы ее сами не собирали. Тайминги все выдержаны!  

Осциллограмма непосредственно на пинах чипа АД.

37 CSB - синий

36 SCLK - желтый

35 SDIO - зеленый

Ниже с логического анализатора Vivado. Передача от АЦП в последних 8 бит отсутствует. Скорость 1.6 Мб/с. чтение 4 регистра (Chip id) Все 0 или 1 быть не могут.

 

AD9680_2.thumb.png.cced9aa1d3636553a41228330334a93b.png

SPI_ILA_3.thumb.png.4e085a86a7bb9c1e0ac4eccf1cf5cf9c.png

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


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

1 hour ago, Garik said:

Это отладочная плата от AD. Мы ее сами не собирали. Тайминги все выдержаны!  

Осциллограмма непосредственно на пинах чипа АД.

37 CSB - синий

36 SCLK - желтый

35 SDIO - зеленый

Ниже с логического анализатора Vivado. Передача от АЦП в последних 8 бит отсутствует. Скорость 1.6 Мб/с. чтение 4 регистра (Chip id) Все 0 или 1 быть не могут.

вот, теперь видно. Проверить питание SPI на ацп и писать производителю. Брак платы, команды SPI не доходят, скорее всего пайка АЦП, но может кто разрядился в плату. еще можно под микроскопом чип посмотреть. 

PS. Ну еще, как один из возможных вариантов, найти софт от АД под эту плату и посмотреть какую последовательность конфигурации он генерирует. Может там что-то хитрое надо прогрузить до первого чтения. Хотя, по карте адресов, этого не видно. Но, я бы первой командой записал нулевой регистр с софт сбросом и MSB/LSB. Может дефолт там не такой уж и дефолт и у вас LSB формат стоит

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


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

6 hours ago, des00 said:

Но, я бы первой командой записал нулевой регистр с софт сбросом и MSB/LSB. Может дефолт там не такой уж и дефолт и у вас LSB формат стоит

ad9680_spi_write(spi, 0x000, 0x81); // RESET
mdelay(5);
ad9680_spi_write(spi, 0x001, 0x01); // RESET
mdelay(1);

это от сюда https://github.com/analogdevicesinc/linux/blob/5aa17b17e38993387ccc343daaf11388a12d7cdc/drivers/iio/adc/ad9680.c

 
 
 
 
 

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


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

05.10.2020 в 18:40, des00 сказал:

PS. Ну еще, как один из возможных вариантов, найти софт от АД под эту плату и посмотреть какую последовательность конфигурации он генерирует.

С готовыми платами всегда с этого начинаем! Много времени экономит сей подход к делу.

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


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

2 hours ago, warrior-2001 said:

С готовыми платами всегда с этого начинаем! Много времени экономит сей подход к делу.

да я думал ТС это сделал априори и вот мучается) если же нет, то, имеем то что имеем)

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


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

Я не помню точно что за микросхема у аналога была, какая-то хитрая с цельным компьютером внутри. И вот ей пока не подашь целую инициализационную последовательность (записей разных регистров) она банально не отвечает по SPI на чтение. То есть просто сброса не хватает. Лучше всего брать даташит и следовать разделу startup sequence. Хотя здесь вроде не тот случай.

PS Нашел, AD9172

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


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

On 10/6/2020 at 1:21 AM, likeasm said:

ad9680_spi_write(spi, 0x000, 0x81); // RESET
mdelay(5);
ad9680_spi_write(spi, 0x001, 0x01); // RESET
mdelay(1);

это от сюда https://github.com/analogdevicesinc/linux/blob/5aa17b17e38993387ccc343daaf11388a12d7cdc/drivers/iio/adc/ad9680.c

Как сделано в проекте от АД. Первое что это читается Chip_id. Остальная инициализация после этого.

dev = (struct ad9680_dev *)malloc(sizeof(*dev));
	if (!dev)
		return -1;

	/* SPI */

	ret = spi_init(&dev->spi_desc, &init_param->spi_init);


	ad9680_spi_read(dev,
			AD9680_REG_CHIP_ID_LOW,
			&chip_id);



	if(chip_id != AD9680_CHIP_ID) {
		printf("AD9680: Invalid CHIP ID (0x%x).\n", chip_id);
		return -1;
	}

К сожалению ответа от АЦП нет. 

Сейчас я склоняюсь, что это неисправность чипа. Сегодня еще раз посмотрели микроскопом на пайку чипа, проверили питание, слок - все в норме, и ни каких зацепок.   

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


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

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

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

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

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

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

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

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

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

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