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

 
 
 
Reply to this topicStart new topic
> Прозрачный режим SPI1 to SPI2 или то же с UARTами, Как обеспечить максимальную скорость передачи данных?
Make_Pic
сообщение Mar 9 2015, 12:09
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Хочу написать подпрограмму поддержки прозрачного режима по SPI1 to SPI2 или то же с UARTами
Как обеспечит максимальную скорость передачи данных?
Напрашивается делать обмен в прерывании - какой нибудь есть алгоритм - пример?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2015, 12:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Mar 9 2015, 13:22
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(aaarrr @ Mar 9 2015, 15:13) *
На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.

Сферический ARM это STM32F103. Скорость несколько гигабайт (аналогично уточнение с сарказмом), хотя много, достаточно максимальной - несколько сот килобод.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2015, 13:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если речь о UART, то да, пересылка в прерывании будет более похожа на прозрачный режим, если, конечно, обеспечивается низкая латентность.

Что касается SPI, то тут все зависит от протокола слейва. Во многих случаях такой режим программно недостижим в принципе.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 9 2015, 14:40
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Мне казалось, что DMA будет пошустрее прерываний.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2015, 14:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Дело не столько в "шустрости", сколько в обеспечении прозрачности. Хотя если есть P2P DMA или возможность оперировать однобайтовыми посылками без вмешательства процессора, тогда конечно DMA предпочтительнее.
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 9 2015, 16:13
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



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


При частоте проца 70+МГц и скорости уарта сотни килобод - на прерываниях разницы никакой, а реализовать проще...

Сообщение отредактировал mantech - Mar 9 2015, 16:13
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Mar 10 2015, 07:41
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



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

Напрашивается делать обмен в прерывании - какой нибудь есть алгоритм - пример?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 10 2015, 09:05
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



схема про UART

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

с SPI примерно тоже самое,
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2015, 09:26
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Ой ли? Как будет выглядеть, например, чтение статусного регистра 25-й памяти?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 10 2015, 12:53
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

Единственное надо было, наверное, отметить, что полностью прозрачный SPI невозможен, потому что проц не может начать отправлять первый бит ответа, пока не получит целый ответный байт, то есть возникает лаг минимум в 1 байт, и без контроля потока всему конец...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Mar 10 2015, 13:00
Сообщение #12


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



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

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

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


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 10 2015, 15:48
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



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


Хм.. Тута только буферированный ввод\вывод, плюс, если транслирующий передатчик медленнее, еще и сигналы передающей строне, что буфер переполнен - ждите!! Если наоборот, то все куда проще biggrin.gif
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Mar 12 2015, 06:45
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(SSerge @ Mar 10 2015, 16:00) *
...

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

Где можно посмотреть эти реализации?
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 12 2015, 06:51
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



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


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

http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:22
Рейтинг@Mail.ru


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