Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прозрачный режим SPI1 to SPI2 или то же с UARTами
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Make_Pic
Хочу написать подпрограмму поддержки прозрачного режима по SPI1 to SPI2 или то же с UARTами
Как обеспечит максимальную скорость передачи данных?
Напрашивается делать обмен в прерывании - какой нибудь есть алгоритм - пример?
aaarrr
На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.
Make_Pic
Цитата(aaarrr @ Mar 9 2015, 15:13) *
На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.

Сферический ARM это STM32F103. Скорость несколько гигабайт (аналогично уточнение с сарказмом), хотя много, достаточно максимальной - несколько сот килобод.
aaarrr
Если речь о UART, то да, пересылка в прерывании будет более похожа на прозрачный режим, если, конечно, обеспечивается низкая латентность.

Что касается SPI, то тут все зависит от протокола слейва. Во многих случаях такой режим программно недостижим в принципе.
Сергей Борщ
Мне казалось, что DMA будет пошустрее прерываний.
aaarrr
Цитата(Сергей Борщ @ Mar 9 2015, 17:40) *
Мне казалось, что DMA будет пошустрее прерываний.

Дело не столько в "шустрости", сколько в обеспечении прозрачности. Хотя если есть P2P DMA или возможность оперировать однобайтовыми посылками без вмешательства процессора, тогда конечно DMA предпочтительнее.
mantech
Цитата(Сергей Борщ @ Mar 9 2015, 17:40) *
Мне казалось, что DMA будет пошустрее прерываний.


При частоте проца 70+МГц и скорости уарта сотни килобод - на прерываниях разницы никакой, а реализовать проще...
Make_Pic
Цитата(mantech @ Mar 9 2015, 19:13) *
При частоте проца 70+МГц и скорости уарта сотни килобод - на прерываниях разницы никакой, а реализовать проще...

Напрашивается делать обмен в прерывании - какой нибудь есть алгоритм - пример?
Golikov A.
схема про UART

Прерывание от UART пришел символ
{
SMB = UART_1_R;
UART_2_T = SMB;
}

с SPI примерно тоже самое,
aaarrr
Цитата(Golikov A. @ Mar 10 2015, 12:05) *
с SPI примерно тоже самое,

Ой ли? Как будет выглядеть, например, чтение статусного регистра 25-й памяти?
Golikov A.
про заморочки организации слейв - мастер, чипселектов и прочей байды вы уже сказали выше, не видел смысла повторять...

Единственное надо было, наверное, отметить, что полностью прозрачный SPI невозможен, потому что проц не может начать отправлять первый бит ответа, пока не получит целый ответный байт, то есть возникает лаг минимум в 1 байт, и без контроля потока всему конец...
SSerge
Почему-то никто пока не вспомнил о самом главном - возможном несовпадении скоростей удалённого и своего локального передатчиков.
UART, например сохраняет работоспособность при рассогласовании скоростей до 4%.

Рассмотрим самый тяжёлый случай, когда удалённый передатчик немного быстрее.
При непрерывном потоке входящих данных неизбежно будет накапливаться рассогласование.
Понятно, что такая система сможет работать без потери данных только если во входящем потоке будут присутствовать паузы, позволяющие компенсировать рассогласование.
Накапливающиеся "лишние" байты придётся временно сохранять в FIFO буфере.
Несложно прикинуть необходимый для этого размер буфера - максимальная длина пакета умножить на максимальное относительное отклонение скоростей.
Для того-же UART-а потребуется буфер размером порядка 5% (чтобы уж наверняка хватило) от максимального размера пакета.

Известные реализации (большинство из них) могут работать когда и запись и извлечение из буфера производится в обработчиках прерываний, при условии что этим прерываниям назначены приоритеты из одной группы (важно для кортексов-М), так что они не смогут прерывать друг друга.
mantech
Цитата(SSerge @ Mar 10 2015, 16:00) *
Почему-то никто пока не вспомнил о самом главном - возможном несовпадении скоростей удалённого и своего локального передатчиков.
UART, например сохраняет работоспособность при рассогласовании скоростей до 4%.


Хм.. Тута только буферированный ввод\вывод, плюс, если транслирующий передатчик медленнее, еще и сигналы передающей строне, что буфер переполнен - ждите!! Если наоборот, то все куда проще biggrin.gif
Make_Pic
Цитата(SSerge @ Mar 10 2015, 16:00) *
...

Известные реализации (большинство из них) могут работать когда и запись и извлечение из буфера производится в обработчиках прерываний, при условии что этим прерываниям назначены приоритеты из одной группы (важно для кортексов-М), так что они не смогут прерывать друг друга.

Где можно посмотреть эти реализации?
mantech
Цитата(Make_Pic @ Mar 12 2015, 09:45) *
Где можно посмотреть эти реализации?


STSW-STM32068 - Там есть примеры работы с уартами, сам брал оттуда, когда изучал стм...

http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.