Make_Pic
Mar 9 2015, 12:09
Хочу написать подпрограмму поддержки прозрачного режима по SPI1 to SPI2 или то же с UARTами
Как обеспечит максимальную скорость передачи данных?
Напрашивается делать обмен в прерывании - какой нибудь есть алгоритм - пример?
На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.
Make_Pic
Mar 9 2015, 13:22
Цитата(aaarrr @ Mar 9 2015, 15:13)

На сферическом ARM'е в вакууме (да и не только на нем), максимальную скорость передачи данных можно обеспечить только внешними коммутаторами.
Сферический ARM это STM32F103. Скорость несколько гигабайт (аналогично уточнение с сарказмом), хотя много, достаточно максимальной - несколько сот килобод.
Если речь о UART, то да, пересылка в прерывании будет более похожа на прозрачный режим, если, конечно, обеспечивается низкая латентность.
Что касается SPI, то тут все зависит от протокола слейва. Во многих случаях такой режим программно недостижим в принципе.
Сергей Борщ
Mar 9 2015, 14:40
Мне казалось, что DMA будет пошустрее прерываний.
Цитата(Сергей Борщ @ Mar 9 2015, 17:40)

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

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

При частоте проца 70+МГц и скорости уарта сотни килобод - на прерываниях разницы никакой, а реализовать проще...
Напрашивается делать обмен в прерывании -
какой нибудь есть алгоритм - пример?
Golikov A.
Mar 10 2015, 09:05
схема про UART
Прерывание от UART пришел символ
{
SMB = UART_1_R;
UART_2_T = SMB;
}
с SPI примерно тоже самое,
aaarrr
Mar 10 2015, 09:26
Цитата(Golikov A. @ Mar 10 2015, 12:05)

с SPI примерно тоже самое,
Ой ли? Как будет выглядеть, например, чтение статусного регистра 25-й памяти?
Golikov A.
Mar 10 2015, 12:53
про заморочки организации слейв - мастер, чипселектов и прочей байды вы уже сказали выше, не видел смысла повторять...
Единственное надо было, наверное, отметить, что полностью прозрачный SPI невозможен, потому что проц не может начать отправлять первый бит ответа, пока не получит целый ответный байт, то есть возникает лаг минимум в 1 байт, и без контроля потока всему конец...
SSerge
Mar 10 2015, 13:00
Почему-то никто пока не вспомнил о самом главном - возможном несовпадении скоростей удалённого и своего локального передатчиков.
UART, например сохраняет работоспособность при рассогласовании скоростей до 4%.
Рассмотрим самый тяжёлый случай, когда удалённый передатчик немного быстрее.
При непрерывном потоке входящих данных неизбежно будет накапливаться рассогласование.
Понятно, что такая система сможет работать без потери данных только если во входящем потоке будут присутствовать паузы, позволяющие компенсировать рассогласование.
Накапливающиеся "лишние" байты придётся временно сохранять в FIFO буфере.
Несложно прикинуть необходимый для этого размер буфера - максимальная длина пакета умножить на максимальное относительное отклонение скоростей.
Для того-же UART-а потребуется буфер размером порядка 5% (чтобы уж наверняка хватило) от максимального размера пакета.
Известные реализации (большинство из них) могут работать когда и запись и извлечение из буфера производится в обработчиках прерываний, при условии что этим прерываниям назначены приоритеты из одной группы (важно для кортексов-М), так что они не смогут прерывать друг друга.
mantech
Mar 10 2015, 15:48
Цитата(SSerge @ Mar 10 2015, 16:00)

Почему-то никто пока не вспомнил о самом главном - возможном несовпадении скоростей удалённого и своего локального передатчиков.
UART, например сохраняет работоспособность при рассогласовании скоростей до 4%.
Хм.. Тута только буферированный ввод\вывод, плюс, если транслирующий передатчик медленнее, еще и сигналы передающей строне, что буфер переполнен - ждите!! Если наоборот, то все куда проще
Make_Pic
Mar 12 2015, 06:45
Цитата(SSerge @ Mar 10 2015, 16:00)

...
Известные реализации (большинство из них) могут работать когда и запись и извлечение из буфера производится в обработчиках прерываний, при условии что этим прерываниям назначены приоритеты из одной группы (важно для кортексов-М), так что они не смогут прерывать друг друга.
Где можно посмотреть эти реализации?
mantech
Mar 12 2015, 06:51
Цитата(Make_Pic @ Mar 12 2015, 09:45)

Где можно посмотреть эти реализации?
STSW-STM32068 - Там есть примеры работы с уартами, сам брал оттуда, когда изучал стм...
http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.