_lexa_ 0 17 января, 2018 Опубликовано 17 января, 2018 · Жалоба Требования по скорости не озвучены. скорость порядка 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. Честно говоря никогда с ними не работал, возможно в силу предвзятого отношения. Иногда буквально приходится считать такты процессора Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 17 января, 2018 Опубликовано 17 января, 2018 · Жалоба скорость порядка 40 Мбит/с STM32F4: "Up to 4 SPIs (45 Mbits/s)" STM32F7: "Up to 6 SPIs (up to 54 Mbit/s)" Есть еще QuadSPI - там еще больше получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Мне нравится идея, что контроллеры могут работать с разделяемой областью памяти. Считаю, что такие системы обладают максимальной гибкостью. Здесь уже упоминались шарки. Чем плоха их идея построения кластеров? А не путаетесь ли вы в предмете обсуждения? У SHARC-ов есть специальный Link Port для взаимодействия между чипами. Разделяемую память они нигде не предлагают для таких целей. Коммуникации внутри самих SHARC - совсем другая тема. Но SHARC-и то всего до 500 МГц работают. Слабовато, однако, по современным меркам. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_lexa_ 0 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба 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 ног подходили больше. И эзернета не было. Но столько воды с тех пор утекло. Может сейчас конечно все поменялось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Однако здесь не обойтись без какого-то протокола, кадры которого будут иметь служебные данные. Может случится, что при передаче небольшого куска информации, накладные расходы сожрут всю скорость. Все эти гадания и предположения лишь указывают на очень слабые знания предмета разработки. Подумайте хорошенько: по плечам ли вам такая задача? Упросите задачу до минимума или откажитесь от нее, пока еще не поздно ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Идея была в разделяемой памяти. Плохая идея. Можно написать что-то на подобии шлюза, который с внешними устройствами будет работать по SPI Ага, изобретаем велосипед Ethernet switch. \Однако здесь не обойтись без какого-то протокола, кадры которого будут иметь служебные данные. Может случится, что при передаче небольшого куска информации, накладные расходы сожрут всю скорость. Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать. Я всегда стараюсь применять SPI для таких вещей. По схеме мастер-слэйв. Тактирует всегда мастер. Его можно приспособить и для прямого отображения в память данных из одного контроллера в другой используя DMA. Но возникает проблема со скоростью передачи быстрых сообщений от слэйвов и быстрых команд от мастера. Если отображаемая память большого размера, скажем больше килобайта, то передача события затягивается на время передачи этого килобайта. Т.е. уже нельзя сделать общение с контроллерами посылающими короткие и быстрые данные, типа выносных сенсоров пространственной ориентации в роботах или с сервами. Вот один из вариантов физического интерфйса на SPI: Подсмотрено во фреймворке SimpleLink от TI Фишка в том, что хотя архитектура Master-Slave, но обмен идет Peer-to-Peer. А эт важно например для TCP протокола и всяких IoT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Есть МАС - к ним можно добавить свитч напрямую без PHY... И реализовать сеть А реально ли без свитча? RMII<->RMII напрямую? Или такое недопустимо и требуется некоторая логика, буферная память? Возникла необходимость сделать многопроцессорную систему, причем расширяемую. Также для всех процессоров в системе необходима разделяемая память. Есть запасы STM32f4 STM32f7, поэтому хотелось бы задействовать их. Каково же число этих самых процессоров в пределе? Максимум каков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 68 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Идеальный вариант - SRAM объемом 64 кБ на объединяющей плате. Микроконтроллеры на платах в слотах получают доступ к SRAM и через нее взаимодействуют между собой. В SRAM выделены области для данных определенного назначения, в соответствии с заранее оговоренными правилами. Каждый Контроллер в системе мог бы обращаться к любой области по необходимости. Получается какая-то параллельная шина. Вопрос - какими средствами ее организовать? Как пример можно посмотреть компьютерную шину ISA, сейчас она используется на MicroPC. На STM32 есть интерфейс Flexible static memory controller (FSMC) через который можно её организовать. Скорость будет ограничена количеством устройств - чем больше устройст, тем больше емкость на шине. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Есть МАС - к ним можно добавить свитч напрямую без PHY... И реализовать сеть. А можно свитч сделать на ПЛИС, у Ксайлинкса был выложен проект "меш-коммутатора"... Чем PHY не угодил? Он почти ничего не стОит, и сигналы от него можно тянуть сколь угодно далеко. А вы попробуйте протянуть MII/RMII между платами - удовольствие будет сомнительное. И вот этот свич на ПЛИС - это очередной велосипед. Мелкосхем свичей в продаже достаточно, зачем их изобретать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Свичи, ISA, параллельная шина.... но что-то подсказывает, что 40Мбит взяты ТС "с потолка" и в реале может оказаться, что нужно просто собирать данные с внешних относительно медленных датчиков. А вот общая память для совершенно разношерстных устройств и возмножно разных производителей - вот что может оказаться серьезной проблемой для всего устройства. Достаточно лишь зависнуть и сдохнуть одной из плат, как все устройство встанет колом! При проектировании подобных "монстроподобных решений" нужно учитывать практически все возможные неприятности при эксплуатации изделия, в институтах этому не учат, но этому учит жисть ;) з.ы. Глядя на все "это", тоже прихожу к самому первому прозвучавшему тут мнению - курсач Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Ага, изобретаем велосипед Ethernet switch. Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать. Для описанной ТС-ом задачи (расширяемый набор плат вставляемых в кросс-плату) реализация на базе Ethernet потребует как минимум пары линий от каждого разъёма кросс-платы и switch-а с кол-вом соединителей равным кол-ву разъёмов. Их может получиться достаточно много (не знаю сколько он там планирует максимально слэйвов). А при реализации на базе какой-либо шины (I2C, SPI, CAN, etc) количество проводов не зависит (или почти не зависит) от числа слэйвов. Я всегда стараюсь применять SPI для таких вещей. По схеме мастер-слэйв. Тактирует всегда мастер. Его можно приспособить и для прямого отображения в память данных из одного контроллера в другой используя DMA. Существуют контроллеры имеющие аппаратное отображение областей памяти на SPI-шину. Это интерфейс SPIFI в LPC-ках. Программа просто читает данные по адресу в своём адресном пространстве, а это чтение преобразуется в транзакцию чтения по SPI. Там конечно работа этого механизма заточена в основном на работу с SPI-флешками (при инициализации насколько помню в регистры конфигурации нужно записать формат команды чтения посылаемой микросхеме SPI-флешь), но если вместо такой SPI-флешки в качестве мастера подключить другой МК, который разберёт такую команду и выполнить её, то так - обращаясь к адресу в своём адресном пространстве, можно читать память другого МК. Но для решения задачи ТС этого конечно маловато. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Это интерфейс SPIFI в LPC-ках. Эт старо, теперь в NXP переходят на HyperBus. Такое есть даже в Kinetis K8X которые на Cortex-M4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 37 18 января, 2018 Опубликовано 18 января, 2018 (изменено) · Жалоба Уточняю задачу. Необходимо сделать устройство состоящее из объединяющей платы с набором слотов, в которые устанавливются платы различного назначения (связь, оцифровка аналоговых сигналов, математические вычисления и др.). Добавление плат хотелось бы выполнять без перенастроек других плат (ну или выполнение минимума настроек). Идеальный вариант - SRAM объемом 64 кБ на объединяющей плате. Микроконтроллеры на платах в слотах получают доступ к SRAM и через нее взаимодействуют между собой. В SRAM выделены области для данных определенного назначения, в соответствии с заранее оговоренными правилами. Каждый Контроллер в системе мог бы обращаться к любой области по необходимости. Получается какая-то параллельная шина. Вопрос - какими средствами ее организовать? Есть документ armv7-m architecture reference manual, в котором предусмотрены средства синхронизации доступа к разделяемой памяти в многопроцессорной системе. Непонятно как и кем это реализовывалось физически (контроллеры с поддержкой разделяемой памяти). А аналог дивайсес этот вопрос неплохо проработан на АДСП, но его не применяем, не устраивает переферия. Можно конечно сделать сеть на базе свича эзернет, можно даже на USART или по CAN шине. Придется использовать какой-то протокол передачи данных. Все это снижает скорость обмена информацией и усложняет алгоритм взаимодействия. Не хотелось бы Вам память-то эта разделяемая , что даст в конечном результате, какое-то мифическое удобство программирования?? А так задача решается на стандартном модульном контроллере типа ИСА шины, или PCI в виде корзины с БП и платой процессора, все остальное периферийные модули. Все просто и прозрачно :laughing: Изменено 18 января, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_lexa_ 0 18 января, 2018 Опубликовано 18 января, 2018 · Жалоба Ага, изобретаем велосипед Ethernet switch. Эзернет свич тут причем? Будь вместо SPI Ethernet, вопрос с протоколом не уйдет Как будто разделяемая память не требует протокола. Вы просто не понимаете, о чём говорите. Ethernet, проще него трудно что-либо придумать. О каком протоколе речь - синхронизация доступа, арбитраж шины? Синхронизация доступа к памяти часто нужна и в одноядерном процессоре при работе с внутренней памятью. Про арбитраж шины был приведен пример АДСП-шарк, там он выполнен аппаратно, программно городить ничего не надо. Вы что-то из этого называете протоколом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться