Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 32х битный SPI, чем и как принять поток?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
draqon
Доброго времени суток.
Необходимо получать поток от АЦП AD7764, он работает по SPI, длина слова 32 бита, АЦП - мастер, сигнал словной синхронизации активен в течение передачи всех 32 бит. Скорость потока 10 (20) Мбит/c.

Использовать плис оочень не хочется, по скорости обработки вполне подходят Picolo (F28ая серия), да и MSP430, их и хотелось использовать, но как втащить в них 32битный SPI поток??? У F28 16-битный SPI, у MSP430 - 8битный.

Подскажите пожалуйста какое-нибудь решение, может есть процы с 32битным SPI, или можно как-то принять такой поток на F28?
MALLOY2
Какая разница какой SPI хоть 8 хоть 16, рулите чипселектом и запускаете сколько вам надо посылок.
rezident
Не понял сути затруднений. cranky.gif SPI интерфейс синхронный, никто не мешает хоть по 1 биту принимать. Лишь бы успевать из буфера SPI-slave эти биты/байты/слова выгребать. Используйте любой подходящий МК с требуемой частотой приема в режиме slave. От МК требуется лишь возможность успевать извлекать байты или слова из буфера SPI с темпом 2.5*10^6 байт/с или 1,25*10^6 слов/сек. То бишь тактовая частота МК должна быть ориентировочно не ниже 25МГц. А если у МК будет DMA, да еще и с отдельной шиной, то вообще ноу проблемс.
jorikdima
Согласен, проблемы не видно. Читать то можно байтами, не обязательно словами.
Но МСП430 загнется на таком потоке.
_Pasha
Мда... а что потом делать с этим потоком? Надо ж еще что-то обрабатывать?
draqon
Цитата(MALLOY2 @ Sep 27 2010, 19:02) *
Какая разница какой SPI хоть 8 хоть 16, рулите чипселектом и запускаете сколько вам надо посылок.

Там нет чипселекта, мастер - АЦП


Цитата(rezident @ Sep 27 2010, 19:07) *
Не понял сути затруднений. cranky.gif SPI интерфейс синхронный, никто не мешает хоть по 1 биту принимать. Лишь бы успевать из буфера SPI-slave эти биты/байты/слова выгребать. Используйте любой подходящий МК с требуемой частотой приема в режиме slave. От МК требуется лишь возможность успевать извлекать байты или слова из буфера SPI с темпом 2.5*10^6 байт/с или 1,25*10^6 слов/сек. То бишь тактовая частота МК должна быть ориентировочно не ниже 25МГц. А если у МК будет DMA, да еще и с отдельной шиной, то вообще ноу проблемс.

Тоесть, если я правильно понял, 16 бит приняли > по прерыванию обработали, дальше принимаем слудующие 16 бит, ну и по словной синхронизации контроллируем слова..
Я так понимаю ДМА в таком режиме тоже настроить вполне реально?

А откуда взялись эти цифры 2.5 и 1.25? Почему не 2 и 1 М? Почему именно такой запас?
Picolo сейчас еще раз посмотрел, там DMA нет, тогда дельфино остается или DSC типа tms320f28234, по даташиту он вполне будет работать и на 40MHz клоке

Вообще задача, принять сигнал, перенести на ноль, децемировать-отфильтровать с 312кГц до 1кГц.. почти всё


_Pasha, jorikdima
У меня получилось, что msp430 переваривает до 10Мбит/c поток (при 25МГц клоке), но это совсем впритык..

Прошу прощения, если я где-то туплю, ибо пока только учусь smile.gif))
rezident
Цитата(draqon @ Sep 28 2010, 05:19) *
Тоесть, если я правильно понял, 16 бит приняли > по прерыванию обработали, дальше принимаем слудующие 16 бит, ну и по словной синхронизации контроллируем слова..
Приняли столько бит, сколько позволяет модуль SPI или SSP.
Цитата(draqon @ Sep 28 2010, 05:19) *
Я так понимаю ДМА в таком режиме тоже настроить вполне реально?
Вопрос бессмысленный, т.к. не указан кристалл. Обычно - да, DMA имеет возможность складывать в память принятое по SPI или SSP автоматически, без участия ядра. Только при отсутствии отдельной шины доступа DMA подтормаживает его (ядра) работу. Хотя даже и в этом случае по сравнению с работой по прерыванию от SPI или SSP у DMA имеется некоторый выигрыш за счет отсутствия необходимости сохранения контекста при вызове прерывания.
Цитата(draqon @ Sep 28 2010, 05:19) *
А откуда взялись эти цифры 2.5 и 1.25? Почему не 2 и 1 М? Почему именно такой запас?
Дык банальная арифметика. laughing.gif 20Мбит/с / 8 бит=2,5МБайт/с и соответственно 1,25Мслов/с.
Цитата(draqon @ Sep 28 2010, 05:19) *
У меня получилось, что msp430 переваривает до 10Мбит/c поток (при 25МГц клоке), но это совсем впритык..
По прерыванию? У MSP430 вход в прерывание и выход из него, даже без сохранения контекста, 9 тактов занимает. Не очень хорошо это. Для быстродействия получается, что выгоднее по опросу флага готовности работать.
draqon
Цитата
Вопрос бессмысленный,

Ну получается c28 (например DSC tms320f28234) или msp430f5x серия

Цитата
Дык банальная арифметика. laughing.gif 20Мбит/с / 8 бит=2,5МБайт/с и соответственно 1,25Мслов/с.

Ааа, понял smile.gif
Там странная передача только сделана, тактовая частота 10 (20 Мгц) (просто в дш в двух местах написано по разному, пока что точно не выяснил, скорее всего 20), причем поток данных 32бита x 312500 SPS = 10 Мбит/c. То есть получается в первом случае передается всё время, а во-втором передача только половину времени.

Цитата
По прерыванию? У MSP430 вход в прерывание и выход из него, даже без сохранения контекста, 9 тактов занимает. Не очень хорошо это. Для быстродействия получается, что выгоднее по опросу флага готовности работать.

Виноват, считал только по таймингам установки-удержания

Пойду еще в даташиты зароюсь smile.gif
rezident
Цитата(draqon @ Sep 28 2010, 06:11) *
Ну получается c28 (например DSC tms320f28234) или msp430f5x серия
Почему только продукцией TI ограничились? Сейчас ARM на ядре Cortex более популярны.
Цитата(draqon @ Sep 28 2010, 06:11) *
Виноват, считал только по таймингам установки-удержания

Пойду еще в даташиты зароюсь smile.gif
Угу, нужно уточнить. Я по памяти писал и наврал немного smile.gif 6 тактов вход и 5 тактов выход, итого 11 тактов. laughing.gif
Абырвалг
Цитата(draqon @ Sep 28 2010, 03:19) *
Тоесть, если я правильно понял, 16 бит приняли > по прерыванию обработали, дальше принимаем слудующие 16 бит, ну и по словной синхронизации контроллируем слова..
Я так понимаю ДМА в таком режиме тоже настроить вполне реально?


В пикале у spi есть fifo 4 слова по 16 бит, так что прерывание требуется реже. в семействе 2812 fifo на 16 слов.
draqon
Да, это я уже нашел, спасибо, и там есть McBSP в режиме SPI с поддержкой ДМА, проблема в тактировании SPI
А какой процессор Вы можете посоветовать, который переверит 20 МГц тактирование в режиме SPI Slave? (Причем сам поток данных 10 Мбит/с)
Смотрел семейство TMS320F28x3x, но насколько понял они выше 12.5Мгц на приеме в слэйве не потянут (

Это из ДШ на TMS320F28x3x
"Internal clock prescalers must be adjusted such that the SPI clock speed is limited to the following SPI clock rate:
Master mode transmit 25-MHz MAX, master mode receive 12.5-MHz MAX
Slave mode transmit 12.5 -MHz MAX, slave mode receive 12.5 -MHz MAX."
Причем одновременно:
"MAX LSPCLK = 75 MHz for 150 MHz devices and 100 MHz for 100 MHz devices."
"tc(SPC) = SPI clock cycle time = LSPCLK/4 or LSPCLK/(SPIBRR + 1)

Блин, там обработки на 10, ну может 20 с хорошим запасом MMACS, а вот чем втянуть такой поток - не могу найти (
rezident
Цитата(draqon @ Oct 6 2010, 05:36) *
Блин, там обработки на 10, ну может 20 с хорошим запасом MMACS, а вот чем втянуть такой поток - не могу найти (
Если ARMы рассматривать, то считайте, что тактовая как минимум 4-х кратная должна быть. Или даже 8-ми кратная, то. бишь 160МГц. Например, SSP у LPC32x0 в режиме SPI до Fclk/2 в режиме master и до Fclk/12 в режиме slave поддерживает, то бишь 266МГц/12=22МГц. Но это ARM9 и корпус не совсем гуманный у них - BGA. А может вам все же на ПЛИС реализовать прием данных?
Абырвалг
Цитата(draqon @ Oct 6 2010, 03:36) *
Это из ДШ на TMS320F28x3x
"Internal clock prescalers must be adjusted such that the SPI clock speed is limited to the following SPI clock rate:
Master mode transmit 25-MHz MAX, master mode receive 12.5-MHz MAX
Slave mode transmit 12.5 -MHz MAX, slave mode receive 12.5 -MHz MAX."


Вот те нате, хрен из под кровати. В ревизиях даташита от October 2005 и May 2006: SPI clock Frequency MAX 20 MHz

А в MAY 2010 есть та приписка, что ты привел. У меня в приборе TMS через SPI опрашивает АЦП с частотой 18.75 МГц. Работает исправно но, как выясняется, имеет право не работать. wacko.gif


Цитата(draqon @ Oct 6 2010, 03:36) *
Причем одновременно:
"MAX LSPCLK = 75 MHz for 150 MHz devices and 100 MHz for 100 MHz devices."
"tc(SPC) = SPI clock cycle time = LSPCLK/4 or LSPCLK/(SPIBRR + 1)


Здесь нет противоречия. tc(SPC) определяется по этой формуле, но на него распространяется ограничение, что выше.

Цитата(draqon @ Oct 6 2010, 03:36) *
А какой процессор Вы можете посоветовать, который переверит 20 МГц тактирование в режиме SPI Slave? (Причем сам поток данных 10 Мбит/с)



У Delfino Microcontrollers (TMS320C28346, TMS320C28345, TMS320C28344, TMS320C28343, TMS320C28342, TMS320C28341):

Master mode transmit 25-MHz MAX, master mode receive 12.5-MHz MAX
Slave mode transmit 20-MHz MAX, slave mode receive 20-MHz MAX.
sysel
У меня есть 2 проекта на данных АЦПшках

В первом проекте ODR(output data rate) = 65536 sps. Сигналы интерфейса принимаю на ПЛИС. Проблем нет.

Во втором проекте ODR(output data rate) = 3600 sps. Сигналы интерфейса принимаю на SPI порт LPC1754.
Здесь проблема: после приёма первых 16 бит надо очень быстро (за 1 такт клока SPI) среагировать на окончание приёма данных и считать принятое значение. Т.к. у этого МК нет FIFO на SPI.

В режиме SSP с первой попытки принять не удалось: в требуемом режиме (CPOL = не помню чему,CPHA = не помню чему, но соответствует таймингам AD7764) SSP почему-то хочет, чтобы линию CS после первых 16 бит дёрнул на 1 такт в 1, а потом пришли бы оставшиеся 16 бит.

Вот и пришлось принимать на SPI, благо ODR маленькая.

Вообще AD7764 имеют интерфейс удобный для использования со "SPORT"-интерфейсом ADшных DSP(например Blackfin).

Есть аналогичные АЦПшки у TI (ADS12xx), с которыми связь с МК организовывать гораздо проще:

На шине SPI они SLAVE, можно этот SPI 3.3 В запитать.
Ловите прерывание, а потом до следующего неспешно читаете данные с удобной для Вас скоростью.
draqon
Абырвалг
Понял, спасибо...

sysel
Так у LPC1754 12.5 МГц максимальная скорость SPI, какая скорость тактирования SPI у AD7764 вообще? В даташите в одном месте написано MCLK/2, а в другом ICLK/2..
Мне отцифровать 66.6 кГц надо, клок 40 МГц, ОДР 312.5к будет, техасовские АЦПшки не потянут...

Была мысль еще либо взять АД7762, либо АД7764 + конвертер СПИ-паралллельный код на простенькой ПЛИС и цепануть к TMS320F28x3x на интерфейс внешней памяти...
Еще как вариант всё реализовать на плисе конечно, ну уж очень не хочется...
draqon
Абырвалг
Понял, спасибо...

sysel
Так у LPC1754 12.5 МГц максимальная скорость SPI, какая скорость тактирования SPI у AD7764 вообще? В даташите в одном месте написано MCLK/2, а в другом ICLK/2..
Мне отцифровать 66.6 кГц надо, клок 40 МГц, ОДР 312.5к будет, техасовские АЦПшки не потянут...

Была мысль еще либо взять АД7762, либо АД7764 + конвертер СПИ-паралллельный код на простенькой ПЛИС и цепануть к TMS320F28x3x на интерфейс внешней памяти...
Еще как вариант всё реализовать на плисе конечно, ну уж очень не хочется...
sysel
Цитата(draqon @ Oct 11 2010, 00:51) *
какая скорость тактирования SPI у AD7764 вообще?

клок SCO = MCLK / 4

в этой ацпшке MCLK сразу же делится на 2 и получается симметричный сигнал ICLK, которым тактируется модулятор.
выход тактирования данных SCO = ICLK / 2, т.е. SCO = MCLK / 4

Я эту АЦП-шку подключал к блекфину 533 на SPORT. Тактировал как раз 40 МГц (MCLK). Ну это если не хотите ПЛИС.

А по-хорошему CPLDшку маленькую поставить и ноу проблемс.
draqon
sysel
MCLK/4 это уже проще )

CPLDшку как конвертер SPI-параллельный код всмысле?


Тогда по деньгам дешевле получается блэкфин поставить, чем техасовский проц и cpld
sysel
Цитата(draqon @ Oct 11 2010, 14:27) *
sysel
CPLDшку как конвертер SPI-параллельный код всмысле?

Да хоть в UART. На то это и программируемая логика, что можно сотворить почти всё что хочешь.

Цитата(draqon @ Oct 11 2010, 14:27) *
Тогда по деньгам дешевле получается блэкфин поставить, чем техасовский проц и cpld

Ну если Вы собираетесь делать большую серию, то дешевле.
А если изделие будет штучное, то тут дешевле будет выбирать решения, с которыми Вы уже умеете работать и наименее геморойный путь. Пусть даже за микросхемы отдадите больше денег.
draqon
Цитата(sysel @ Oct 11 2010, 14:53) *
Да хоть в UART. На то это и программируемая логика, что можно сотворить почти всё что хочешь.

Ну если Вы собираетесь делать большую серию, то дешевле.
А если изделие будет штучное, то тут дешевле будет выбирать решения, с которыми Вы уже умеете работать и наименее геморойный путь. Пусть даже за микросхемы отдадите больше денег.


Все таки решил блэкфин ставить - либо BF512F, либо BF518F...
Я так понял там SCLK = 80-100 Mhz => SPI_CLK = 20-25 MHz
Ну и SPI на ДМА подвесить..

От АЦП принмать можно и на SPI порт и на SPORT.. так?
sysel
Цитата(draqon @ Oct 13 2010, 16:54) *
Все таки решил блэкфин ставить - либо BF512F, либо BF518F...
От АЦП принмать можно и на SPI порт и на SPORT.. так?


Если SPORT в них такой же как в BF533, то лучше, конечно, на SPORT. Он хорошо с DMA вяжется, и собственно предназначен для приинтерфейсевания подобных АЦПшек и ЦАПов. Очень гибкая настройка.

Строго говоря, AD7764 имеет на выходе интерфейс SPORT (в случае если стоит одна АЦПшка в цепочке, то можно сказать 32х битный SPI). Но если образовывать цепочку из нескольких АЦП (у меня так и происходит), то тут уже SPI не подходит, ибо FSO=0 только при передаче данных от первой АЦП из цепочки.

Про SPI на блекфине так много хорошего сказать не могу.

Попробую найти в своём хламосборнике инициализацию SPORT для работы с AD7764.

P.S. советую купить дешевенький JTAG эмулятор для блекфинов, иначе с их программированием и отладкой такая попа...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.