Jump to content

    
Sign in to follow this  
Garik

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

Recommended Posts

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

Не помню

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

Share this post


Link to post
Share on other sites
On 10/1/2020 at 12:33 PM, des00 said:

а единицу?

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

AD9680_1.thumb.png.dcc96d8298b9b8ddbf6f50b685d7ab0d.png

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

 

 

Share this post


Link to post
Share on other sites
1 hour ago, Garik said:

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

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

Share this post


Link to post
Share on other sites
On 10/2/2020 at 8:38 PM, des00 said:

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

SPI_ILA_2.thumb.png.7c2955cac450dfd042c5cb66fbce7b0b.png

Share this post


Link to post
Share on other sites
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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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 формат стоит

Share this post


Link to post
Share on other sites
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

 
 
 
 
 

Share this post


Link to post
Share on other sites
05.10.2020 в 18:40, des00 сказал:

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

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

Share this post


Link to post
Share on other sites
2 hours ago, warrior-2001 said:

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

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

Share this post


Link to post
Share on other sites

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

PS Нашел, AD9172

Share this post


Link to post
Share on other sites
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;
	}

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this