Jump to content

    
Sign in to follow this  
nicks80

I2S full duplex dma

Recommended Posts

Судя по схеме, кодек в режиме конфигурирования пинами стоит.

да конфигурирую пинами.

я пробовал математически сдвиг отловить не по шуму. думал даже в сигнал примешивать высокочастотный и смотреть гармоники так как у меня там ффт крутится. но все отлавливается еще проще как выяснилось.

Я включил таймер. и смотрю количество тиков в периоде между заполнениями буферов. Это значение меняется +-1. А при сбое прыгает до 20-30 процентов а то и более. отлавливается все четко.

Видать клоки проскакивают. Но странно ведь при переходе WS должны биты опять синхронизироватся. Наверно связка DMA и I2S это не отслеживает.

Share this post


Link to post
Share on other sites
но все отлавливается еще проще как выяснилось.

Я включил таймер. и смотрю количество тиков в периоде между заполнениями буферов. Это значение меняется +-1. А при сбое прыгает до 20-30 процентов а то и более. отлавливается все четко.

Видать клоки проскакивают. Но странно ведь при переходе WS должны биты опять синхронизироватся. Наверно связка DMA и I2S это не отслеживает.

Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.

И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.

Вобщем - так ничего у Вас и не отлавливается...

Share this post


Link to post
Share on other sites
Но странно ведь при переходе WS должны биты опять синхронизироватся.

 

Не должны - а хотелось бы. Факт автоматической байтовой ресинхронизации с каждым WS описан в даташите?

Если - нет, то после синхронизации по первому WS - потом просто считаются такты, и на WS уже не смотрят.

 

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

 

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

 

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

 

Share this post


Link to post
Share on other sites
Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.

И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.

Вобщем - так ничего у Вас и не отлавливается...

Если период даже при условии что где-то прибавилось и столько же убавилось равен. То рассинхронизации не будет на следующей порции данных.

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

Странно почему такой чуствительный этот тракт. входы выходе сделаны через резисторы с диодами и все ровно сбоит время от времени. на столе сутками стоит и все ок. через пару дней надо 3 контроллера времени мало.

 

 

Кол-во тиков должно быть +-0, а если у Вас и при нормальной работе +-1, то и при сбое так же может быть. И тогда ничего не отловите.

И испытывать надо не пальцем, а с генератора импульсы подавать. Чтобы какой-то вменяемый и повторяемый результат получить.

Вобщем - так ничего у Вас и не отлавливается...

Если период даже при условии что где-то прибавилось и столько же убавилось равен. То рассинхронизации не будет на следующей порции данных.

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

Странно почему такой чуствительный этот тракт. входы выходе сделаны через резисторы с диодами и все ровно сбоит время от времени. на столе сутками стоит и все ок. через пару дней надо 3 контроллера времени мало.

 

 

Не должны - а хотелось бы. Факт автоматической байтовой ресинхронизации с каждым WS описан в даташите?

Если - нет, то после синхронизации по первому WS - потом просто считаются такты, и на WS уже не смотрят.

 

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

 

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

 

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

резистора нет. планирую от мастера поставит RC фильтр к слейву.

 

Share this post


Link to post
Share on other sites

Что только не предпринимал оказывалось костылями. В итоге пожертвовал процессорным временем и сделал на 2х таймерах с прерыванием. работает как часы.

Edited by nicks80

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