реклама на сайте
подробности

 
 
> I2S full duplex dma, Сбой в режиме DMA
nicks80
сообщение Sep 8 2016, 19:58
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 18-10-07
Пользователь №: 31 485



Проблема в следующем.
Имеется кодек UDA1344 в связке с stm32f407vet6
Данные читаются по I2S из кодека в память и потом выдаются в кодек обратно по I2S с помощью DMA.
Все работает как часы но на объекте раз в день или два. происходит сбой. результатом такого сбоя является сильный шум из кодека.
Как я понял такой шум появляется если самому дотронутся до линии CK I2S. которая отвечает за очередность передачи битов.
Печально что восстановления не происходит при переходе 1 в 0 или наоборот 0 в 1 линии WS(LR CH). То есть получается что данные так и идут перемешанными битами соответственно и програмно никак это не отследишь.
Но оно и понятно если бит(помеха) лишний проскочил то все уже съехало а dma все шлет и шлет. какими средствами справляться хз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Sep 11 2016, 16:06
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Судя по схеме, кодек в режиме конфигурирования пинами стоит.
Go to the top of the page
 
+Quote Post
nicks80
сообщение Sep 11 2016, 18:04
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 18-10-07
Пользователь №: 31 485



Цитата(Genadi Zawidowski @ Sep 11 2016, 20:06) *
Судя по схеме, кодек в режиме конфигурирования пинами стоит.

да конфигурирую пинами.
я пробовал математически сдвиг отловить не по шуму. думал даже в сигнал примешивать высокочастотный и смотреть гармоники так как у меня там ффт крутится. но все отлавливается еще проще как выяснилось.
Я включил таймер. и смотрю количество тиков в периоде между заполнениями буферов. Это значение меняется +-1. А при сбое прыгает до 20-30 процентов а то и более. отлавливается все четко.
Видать клоки проскакивают. Но странно ведь при переходе WS должны биты опять синхронизироватся. Наверно связка DMA и I2S это не отслеживает.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 12 2016, 03:57
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(nicks80 @ Sep 12 2016, 00:04) *
но все отлавливается еще проще как выяснилось.
Я включил таймер. и смотрю количество тиков в периоде между заполнениями буферов. Это значение меняется +-1. А при сбое прыгает до 20-30 процентов а то и более. отлавливается все четко.
Видать клоки проскакивают. Но странно ведь при переходе WS должны биты опять синхронизироватся. Наверно связка DMA и I2S это не отслеживает.

Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.
И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.
Вобщем - так ничего у Вас и не отлавливается...
Go to the top of the page
 
+Quote Post
nicks80
сообщение Sep 12 2016, 12:06
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 18-10-07
Пользователь №: 31 485



Цитата(jcxz @ Sep 12 2016, 07:57) *
Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.
И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.
Вобщем - так ничего у Вас и не отлавливается...

Если период даже при условии что где-то прибавилось и столько же убавилось равен. То рассинхронизации не будет на следующей порции данных.
Я сейчас уменьшил буфер до 64 отсчетов. сделал прерывание с наивысшим приоритетом. и таймером до изменения бита могу отловить. Другой вариант это сравнивать встроенной ацепешкой данные на входе и выходе.
Странно почему такой чуствительный этот тракт. входы выходе сделаны через резисторы с диодами и все ровно сбоит время от времени. на столе сутками стоит и все ок. через пару дней надо 3 контроллера времени мало.


Цитата(jcxz @ Sep 12 2016, 07:57) *
Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.
И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.
Вобщем - так ничего у Вас и не отлавливается...

Если период даже при условии что где-то прибавилось и столько же убавилось равен. То рассинхронизации не будет на следующей порции данных.
Я сейчас уменьшил буфер до 64 отсчетов. сделал прерывание с наивысшим приоритетом. и таймером до изменения бита могу отловить. Другой вариант это сравнивать встроенной ацепешкой данные на входе и выходе.
Странно почему такой чуствительный этот тракт. входы выходе сделаны через резисторы с диодами и все ровно сбоит время от времени. на столе сутками стоит и все ок. через пару дней надо 3 контроллера времени мало.


Цитата(_4afc_ @ Sep 12 2016, 11:32) *
Не должны - а хотелось бы. Факт автоматической байтовой ресинхронизации с каждым WS описан в даташите?
Если - нет, то после синхронизации по первому WS - потом просто считаются такты, и на WS уже не смотрят.

Была такая же проблема у двух Atmel связанных по I2S - решил перейдя на USART.

Точно также в BF561 при приёме видеокадра - тупо считаются линии и точки. При сбое на тактовой - изображение съезжает и не исправляется с новым кадром. При этом никакие статусы не меняются. Единственный вариант - каждый кадр успевать инитить заново блок приёма видеоданных.

Кстати, у вас на линии WS резистор есть последовательный?

резистора нет. планирую от мастера поставит RC фильтр к слейву.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nicks80   I2S full duplex dma   Sep 8 2016, 19:58
- - _4afc_   Если сбой не отражается в статусных регистрах stm3...   Sep 9 2016, 13:18
- - OVladimir   Не знаю, поможет или нет, но похожую проблему приш...   Sep 9 2016, 13:48
|- - nicks80   Цитата(OVladimir @ Sep 9 2016, 17:48) Не ...   Sep 10 2016, 18:46
- - OVladimir   Я использовал только TXE прерывание для проверки р...   Sep 11 2016, 09:25
|- - nicks80   Цитата(OVladimir @ Sep 11 2016, 13:25) Я ...   Sep 11 2016, 09:44
- - aaarrr   Случаи разные: у OVladimir'а МК ведомый, а у в...   Sep 11 2016, 09:52
|- - nicks80   Цитата(aaarrr @ Sep 11 2016, 13:52) Случа...   Sep 11 2016, 10:50
- - aaarrr   Давайте уточним: сбивается только прием, передача ...   Sep 11 2016, 11:16
|- - jcxz   Завести сигнал клока параллельно на любой таймерны...   Sep 11 2016, 11:29
||- - nicks80   Цитата(jcxz @ Sep 11 2016, 15:29) Завести...   Sep 11 2016, 12:42
||- - jcxz   Цитата(nicks80 @ Sep 11 2016, 18:42) я на...   Sep 11 2016, 14:00
|- - nicks80   Цитата(aaarrr @ Sep 11 2016, 15:16) Давай...   Sep 11 2016, 11:52
|- - aaarrr   Цитата(nicks80 @ Sep 11 2016, 14:52) сбив...   Sep 11 2016, 12:00
|- - _4afc_   Цитата(nicks80 @ Sep 11 2016, 22:04) Но с...   Sep 12 2016, 07:32
- - nicks80   Что только не предпринимал оказывалось костылями. ...   Sep 15 2016, 20:23


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016