Jump to content

    

nicks80

Участник
  • Content Count

    93
  • Joined

  • Last visited

Community Reputation

0 Обычный

About nicks80

  • Rank
    Частый гость
  1. Я вообще не понимаю зачем такие платы еще и покупать. ведь все ровно разводить под нужную задачу. я как-то купил так и валялась всегда разводил заказывал.
  2. I2S full duplex dma

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

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

    да конфигурирую пинами. я пробовал математически сдвиг отловить не по шуму. думал даже в сигнал примешивать высокочастотный и смотреть гармоники так как у меня там ффт крутится. но все отлавливается еще проще как выяснилось. Я включил таймер. и смотрю количество тиков в периоде между заполнениями буферов. Это значение меняется +-1. А при сбое прыгает до 20-30 процентов а то и более. отлавливается все четко. Видать клоки проскакивают. Но странно ведь при переходе WS должны биты опять синхронизироватся. Наверно связка DMA и I2S это не отслеживает.
  5. I2S full duplex dma

    1й вариант отпадает т.к. непонятно как помеха поведет себя по отношению к этим двум ногам. понятно что процессор выдает клоки нормальные. наверно здесь лучше таймер завести по перепаду WS и сравнивать допустим через 1024 отсчета границы сигнала WS. схема включения стандартная нет, все одним I2S2 принимается и передается. /// Peripheral DMA init hdma_i2s2_ext_rx.Instance = DMA1_Stream3; hdma_i2s2_ext_rx.Init.Channel = DMA_CHANNEL_3; hdma_i2s2_ext_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_i2s2_ext_rx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_i2s2_ext_rx.Init.MemInc = DMA_MINC_ENABLE; hdma_i2s2_ext_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_i2s2_ext_rx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_i2s2_ext_rx.Init.Mode = DMA_CIRCULAR; hdma_i2s2_ext_rx.Init.Priority = DMA_PRIORITY_HIGH; hdma_i2s2_ext_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;//ENABLE; hdma_i2s2_ext_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; hdma_i2s2_ext_rx.Init.MemBurst = DMA_MBURST_SINGLE; hdma_i2s2_ext_rx.Init.PeriphBurst = DMA_PBURST_SINGLE; HAL_DMA_Init(&hdma_i2s2_ext_rx); __HAL_LINKDMA(hi2s,hdmarx,hdma_i2s2_ext_rx); hdma_i2s2_ext_tx.Instance = DMA1_Stream4; hdma_i2s2_ext_tx.Init.Channel = DMA_CHANNEL_0; hdma_i2s2_ext_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_i2s2_ext_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_i2s2_ext_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_i2s2_ext_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_i2s2_ext_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_i2s2_ext_tx.Init.Mode = DMA_CIRCULAR; hdma_i2s2_ext_tx.Init.Priority = DMA_PRIORITY_HIGH; hdma_i2s2_ext_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;//ENABLE; hdma_i2s2_ext_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; hdma_i2s2_ext_tx.Init.MemBurst = DMA_MBURST_SINGLE; hdma_i2s2_ext_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; HAL_DMA_Init(&hdma_i2s2_ext_tx); __HAL_LINKDMA(hi2s,hdmatx,hdma_i2s2_ext_tx); ............. hi2s2.Instance = SPI2; hi2s2.Init.Mode = I2S_MODE_MASTER_TX; hi2s2.Init.Standard = I2S_STANDARD_PHILIPS; hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B;//I2S_DATAFORMAT_16B; hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; hi2s2.Init.AudioFreq = g_nI2SFreq[nSR]; hi2s2.Init.CPOL = I2S_CPOL_LOW; hi2s2.Init.ClockSource = I2S_CLOCK_PLL; hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; PeriphClkInitStruct.PLLI2S.PLLI2SN = g_nI2SPLLN[nSR]; PeriphClkInitStruct.PLLI2S.PLLI2SR = g_nI2SPLLR[nSR]; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); HAL_I2S_Init(&hi2s2); HAL_I2SEx_TransmitReceive_DMA(&hi2s2,(unsigned short*)i2s2_DelayBuf,(unsigned short*)i2s2_DelayBuf,(nDelay* ( 1<<nFFT ))*I2S2_DELAY_BUFFCHANNELS); MX_TIM7_Init(g_nI2S_SR[nSR],1<<nFFT); g_nI2S2_nFFT = nFFT; g_nI2S2_DelayBufCmpl = 0; g_nI2S2_nSR = nSR; я наверно совсем заблудился. Если мастер процессор и он выдает сигналы WS. то получается кодек неверные данные выдает я же его тактирую.
  6. I2S full duplex dma

    Передача сбиваться не может в кодеке по перепадам WS производится сброс счетчика битов. сбивается именно прием. ожидал что будет присутствовать постоянная составляющая в сигнале принимаемом но как оказалось сдвиг битов не изменяет ее.
  7. I2S full duplex dma

    У меня контроллеры работают круглогодично в шкафу где куча частотников по десяткам киловатт. кодек сбивается и это факт. может думаю кондер с резистором повесить на сигнальных данных. а вообще все входы защищены и сбивается именно от помех. какой кодек не поставь сбивается именно в камне прием да и времени нет.
  8. I2S full duplex dma

    А можете подетальный или часть кода привести. а то я не понимаю как опрашивать в нужный момент на протяжении 16 бит.
  9. I2S full duplex dma

    .идея понятна но как на протяжении 16 бит отследить состояние ноги WS. у меня к томуже все через DMA. проблема серьезная с этим WS и рассинхронизацией. у меня длинна дорожки 20мм. и при прикосании даже проводником 10см происходит сбой. попробовал через постоянную составляющую сигнала тоже не прокатило.(хотя по идее должно сработать)
  10. I2S full duplex dma

    Проблема в следующем. Имеется кодек UDA1344 в связке с stm32f407vet6 Данные читаются по I2S из кодека в память и потом выдаются в кодек обратно по I2S с помощью DMA. Все работает как часы но на объекте раз в день или два. происходит сбой. результатом такого сбоя является сильный шум из кодека. Как я понял такой шум появляется если самому дотронутся до линии CK I2S. которая отвечает за очередность передачи битов. Печально что восстановления не происходит при переходе 1 в 0 или наоборот 0 в 1 линии WS(LR CH). То есть получается что данные так и идут перемешанными битами соответственно и програмно никак это не отследишь. Но оно и понятно если бит(помеха) лишний проскочил то все уже съехало а dma все шлет и шлет. какими средствами справляться хз.
  11. Есть два осцила LeCroy LC534M Tektronix TDS680B Какой взять? Работаю с импульсниками и RF 1ГГц. Желательно по делу.
  12. В последнее время всегда заказываю у них. Цены хорошие качество тоже. С китайцем разговариваю на Русском по скайпу. Очень хорошо знает наш язык. Сайт http://www.chinafastpcb.com Скайп andylru Доставка через Новосибирск. Expo Заказывал и алюминиевые и обычные платы. Заказов 10 делал на разные партии.
  13. STM32F103

    Когда с STM32F4 игрался то дергал ногу с частотой проца. те 2 раза ниже. А параметры отвечающие за частоту работы порта отвечали за фронт сигнала на пине (т.е. управляли током работы PIO).
  14. Надо начать на модели с обычным ПК, камерой и отладить (Отлаживать легче). А перенести это уже совсем другой менее итеративный процесс отладки.
  15. Geyer

    Параллельно резистором шунтируй 1мом.