Перейти к содержанию
    

Многопроцессорность на STM32f4 STM32f7

Требования по скорости не озвучены.

 

скорость порядка 40 Мбит/с

 

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

Откуда эта сомнительная цифра в 64Кб. Параллельная шина тоже не вызывает энтузиазма.

Речь же не о мультиядерных кристаллах.

 

Мне нравится идея, что контроллеры могут работать с разделяемой областью памяти. Считаю, что такие системы обладают максимальной гибкостью. Здесь уже упоминались шарки. Чем плоха их идея построения кластеров?

 

Вам нужно что типа Greybus и RTOS с поддержкой мультипроцессорности.

Главная фишка такой шины - хардварная маршрутизация.

 

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

В MQX вы можете посылать ивенты и сообщения любым задачам на другие микроконтроллеры. Запускать и останавливать задачи на любых микроконтроллерах.

При этом шина связи может быть любая: I2C, SPI, UART, CAN, Ethernet...

Думаю аппаратную быструю маршрутизацию можно сделать в i.MX RT на базе их периферии Flexible I/O и eDMA.

Да, там еще есть HyperBus. Можно до 333 MB/s развить. Но роутер придется делать самому для нее.

 

Это уже интереснее, хотя куча вопросов, надо изучать. Кроме того RTOS. Честно говоря никогда с ними не работал, возможно в силу предвзятого отношения. Иногда буквально приходится считать такты процессора

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скорость порядка 40 Мбит/с

STM32F4: "Up to 4 SPIs (45 Mbits/s)"

STM32F7: "Up to 6 SPIs (up to 54 Mbit/s)"

Есть еще QuadSPI - там еще больше получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне нравится идея, что контроллеры могут работать с разделяемой областью памяти. Считаю, что такие системы обладают максимальной гибкостью. Здесь уже упоминались шарки. Чем плоха их идея построения кластеров?

А не путаетесь ли вы в предмете обсуждения?

У SHARC-ов есть специальный Link Port для взаимодействия между чипами.

Разделяемую память они нигде не предлагают для таких целей.

Коммуникации внутри самих SHARC - совсем другая тема.

 

Но SHARC-и то всего до 500 МГц работают. Слабовато, однако, по современным меркам. :laughing:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

STM32F4: "Up to 4 SPIs (45 Mbits/s)"

STM32F7: "Up to 6 SPIs (up to 54 Mbit/s)"

Есть еще QuadSPI - там еще больше получается.

 

Со скоростями вроде как проблем нет. Идея была в разделяемой памяти. Не спорю,что можно использовать и SPI. Можно написать что-то на подобии шлюза, который с внешними устройствами будет работать по SPI, а для внутренней программы будут функции читающие и пишущие в виртуальные области памяти, которые могут быть собраны из разделов памяти контроллеров. Ну или что-то на подобии. Однако здесь не обойтись без какого-то протокола, кадры которого будут иметь служебные данные. Может случится, что при передаче небольшого куска информации, накладные расходы сожрут всю скорость.

 

А не путаетесь ли вы в предмете обсуждения?

У SHARC-ов есть специальный Link Port для взаимодействия между чипами.

Разделяемую память они нигде не предлагают для таких целей.

Коммуникации внутри самих SHARC - совсем другая тема.

 

Но SHARC-и то всего до 500 МГц работают. Слабовато, однако, по современным меркам. :laughing:

 

С шарками не имел дела года с 2005, но сейчас посмотрел наискосок документацию на ADSP-2106x, у них не только линк-порт, их также можно подключать на общую параллельную шину, на которой также может висеть и память. При этом не только внешняя память, но и части памяти всех процессоров на шине будут отображаться в общую область. Чем это не разделяемая память по сути?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Упросите задачу до минимума или откажитесь от нее, пока еще не поздно ;)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея была в разделяемой памяти.

Плохая идея.

 

Можно написать что-то на подобии шлюза, который с внешними устройствами будет работать по SPI

Ага, изобретаем велосипед Ethernet switch.

 

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

Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать.

Я всегда стараюсь применять SPI для таких вещей. По схеме мастер-слэйв. Тактирует всегда мастер.

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

Но возникает проблема со скоростью передачи быстрых сообщений от слэйвов и быстрых команд от мастера.

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

Т.е. уже нельзя сделать общение с контроллерами посылающими короткие и быстрые данные, типа выносных сенсоров пространственной ориентации в роботах или с сервами.

Вот один из вариантов физического интерфйса на SPI:

post-2050-1516266475_thumb.png

Подсмотрено во фреймворке SimpleLink от TI

Фишка в том, что хотя архитектура Master-Slave, но обмен идет Peer-to-Peer. А эт важно например для TCP протокола и всяких IoT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть МАС - к ним можно добавить свитч напрямую без PHY... И реализовать сеть

А реально ли без свитча? RMII<->RMII напрямую? Или такое недопустимо и требуется некоторая логика, буферная память?

 

Возникла необходимость сделать многопроцессорную систему, причем расширяемую. Также для всех процессоров в системе необходима разделяемая память. Есть запасы STM32f4 STM32f7, поэтому хотелось бы задействовать их.

Каково же число этих самых процессоров в пределе? Максимум каков?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идеальный вариант - SRAM объемом 64 кБ на объединяющей плате. Микроконтроллеры на платах в слотах получают доступ к SRAM и через нее взаимодействуют между собой. В SRAM выделены области для данных определенного назначения, в соответствии с заранее оговоренными правилами. Каждый Контроллер в системе мог бы обращаться к любой области по необходимости. Получается какая-то параллельная шина. Вопрос - какими средствами ее организовать?

Как пример можно посмотреть компьютерную шину ISA, сейчас она используется на MicroPC.

На STM32 есть интерфейс Flexible static memory controller (FSMC) через который можно её организовать.

Скорость будет ограничена количеством устройств - чем больше устройст, тем больше емкость на шине.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть МАС - к ним можно добавить свитч напрямую без PHY... И реализовать сеть. А можно свитч сделать на ПЛИС, у Ксайлинкса был выложен проект "меш-коммутатора"...

Чем PHY не угодил? Он почти ничего не стОит, и сигналы от него можно тянуть сколь угодно далеко. А вы попробуйте протянуть MII/RMII между платами - удовольствие будет сомнительное.

И вот этот свич на ПЛИС - это очередной велосипед. Мелкосхем свичей в продаже достаточно, зачем их изобретать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Свичи, ISA, параллельная шина.... но что-то подсказывает, что 40Мбит взяты ТС "с потолка" и в реале может оказаться, что нужно просто собирать данные с внешних относительно медленных датчиков.

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

Достаточно лишь зависнуть и сдохнуть одной из плат, как все устройство встанет колом!

При проектировании подобных "монстроподобных решений" нужно учитывать практически все возможные неприятности при эксплуатации изделия, в институтах этому не учат, но этому учит жисть ;)

 

з.ы. Глядя на все "это", тоже прихожу к самому первому прозвучавшему тут мнению - курсач :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага, изобретаем велосипед Ethernet switch.

Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать.

Для описанной ТС-ом задачи (расширяемый набор плат вставляемых в кросс-плату) реализация на базе Ethernet потребует как минимум пары линий от каждого разъёма кросс-платы и switch-а с кол-вом соединителей равным кол-ву разъёмов. Их может получиться достаточно много (не знаю сколько он там планирует максимально слэйвов).

А при реализации на базе какой-либо шины (I2C, SPI, CAN, etc) количество проводов не зависит (или почти не зависит) от числа слэйвов.

 

Я всегда стараюсь применять SPI для таких вещей. По схеме мастер-слэйв. Тактирует всегда мастер.

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

Существуют контроллеры имеющие аппаратное отображение областей памяти на SPI-шину.

Это интерфейс SPIFI в LPC-ках.

Программа просто читает данные по адресу в своём адресном пространстве, а это чтение преобразуется в транзакцию чтения по SPI.

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

Но для решения задачи ТС этого конечно маловато.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это интерфейс SPIFI в LPC-ках.

Эт старо, теперь в NXP переходят на HyperBus.

Такое есть даже в Kinetis K8X которые на Cortex-M4

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уточняю задачу.

Необходимо сделать устройство состоящее из объединяющей платы с набором слотов, в которые устанавливются платы различного назначения (связь, оцифровка аналоговых сигналов, математические вычисления и др.). Добавление плат хотелось бы выполнять без перенастроек других плат (ну или выполнение минимума настроек). Идеальный вариант - SRAM объемом 64 кБ на объединяющей плате. Микроконтроллеры на платах в слотах получают доступ к SRAM и через нее взаимодействуют между собой. В SRAM выделены области для данных определенного назначения, в соответствии с заранее оговоренными правилами. Каждый Контроллер в системе мог бы обращаться к любой области по необходимости. Получается какая-то параллельная шина. Вопрос - какими средствами ее организовать?

 

Есть документ armv7-m architecture reference manual, в котором предусмотрены средства синхронизации доступа к разделяемой памяти в многопроцессорной системе. Непонятно как и кем это реализовывалось физически (контроллеры с поддержкой разделяемой памяти).

 

А аналог дивайсес этот вопрос неплохо проработан на АДСП, но его не применяем, не устраивает переферия.

 

 

 

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

 

Вам память-то эта разделяемая , что даст в конечном результате, какое-то мифическое удобство программирования?? А так задача решается на стандартном модульном контроллере типа ИСА шины, или PCI в виде корзины с БП и платой процессора, все остальное периферийные модули. Все просто и прозрачно :laughing:

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага, изобретаем велосипед Ethernet switch.

Эзернет свич тут причем? Будь вместо SPI Ethernet, вопрос с протоколом не уйдет

Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...