Jump to content

    
Sign in to follow this  
iiv

Что вместо атмеги, но быстрее, но с командной строки взять?

Recommended Posts

1 час назад, iiv сказал:

Хочу embedded linux с быстрым SPI, чтоб по нему обмениваться с микроконтроллером, или сраду микроконтроллер внутри на борту.

Так если МК - внутри (т.е. - в том же чипе), то зачем для обмены с ним SPI? Для обмена - использовать средства межъядерной коммуникации.

Или я не понял вопроса....

1 час назад, iiv сказал:

Скажите, пожалуйста, есть ли какие-то другие embedded linux решения с надежным SPI, который гарантированно бы работал бы без танцев с бубном и перекомпилляцией ядра?

Когда-то давно я использовал OMAP-L137. Там было одно ядро на которое можно было поставить линух. И было другое ядро, которое можно было использовать stand alone. SPI там был вполне себе нормальным. Правда он не нужен для межъядерного обмена.

А сейчас вроде как у STM появились подобные чипы: STM32MP1 (Cortex-A + Cortex-M). И не думаю что SPI там плох. Хотя опять-же - для межъядерного обмена он не нужен.

Share this post


Link to post
Share on other sites
6 hours ago, jcxz said:

А сейчас вроде как у STM появились подобные чипы: STM32MP1 (Cortex-A + Cortex-M). И не думаю что SPI там плох. Хотя опять-же - для межъядерного обмена он не нужен.

ага, спасибо!!! Присматриваюсь на этот камень, тут действительно SPI не нужен, хотя, чтоб попробовать, там опять с памятью возиться и разводить надо...

 

Я правда имел ввиду, какую не глючную и не дорогую борду купить, в которой бы можно было бы просто организовать обмен с каким-то распространенным МК, и чтоб от этого линукс не вис во время обмена.

 

 

Share this post


Link to post
Share on other sites
6 hours ago, arhiv6 said:

А Вы пробовали использовать DMA для передачи данных? 

вдруг Вам было бы не сложно, посоветуйте, пожалуйста, где это сделано просто, чтоб взял системную функцию, вызвал и она заработала, и без бубнов. Я не знаю, честно, и просто спрашиваю без капли иронии.

Share this post


Link to post
Share on other sites
1 час назад, iiv сказал:

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

Зачем? Есть же отладки на нём.

1 час назад, iiv сказал:

Я правда имел ввиду, какую не глючную и не дорогую борду купить, в которой бы можно было бы просто организовать обмен с каким-то распространенным МК, и чтоб от этого линукс не вис во время обмена.

Насчёт линуха не подскажу.

Share this post


Link to post
Share on other sites
33 minutes ago, iiv said:

вдруг Вам было бы не сложно, посоветуйте, пожалуйста, где это сделано просто, чтоб взял системную функцию, вызвал и она заработала, и без бубнов. Я не знаю, честно, и просто спрашиваю без капли иронии.

Увы, в случае SPI остается только выяснять "способности" в каждом конкретном случае. То есть даже наличие поддержки DMA в драйвере ничего не гарантирует,

т.к. основные сценарии использования SPI в SoC - "загрузиться с флешки и забыть до следующего включения" или "раз в секунду протащить два байта с датчика",

причем последний встречается значительно реже.

Share this post


Link to post
Share on other sites
16 hours ago, aaarrr said:

Увы, в случае SPI остается только выяснять "способности" в каждом конкретном случае.

спасибо! Ага, я тоже примерно также предполагал исходя из своего опыта. А вот интересно, а как тогда люди поступают, если им надо много (мегабайты в секунду) получать-принимать на embedded linux, причем просто МК не тянет сами вычисления, например, из-за того, что памяти мало... У меня постоянно такие задачи встречаются, пока пользую Cyclone 5 SoC, но удобных готовых плат нет, а разводка DDR2 не есть очень простое занятие...

Share this post


Link to post
Share on other sites
11 минут назад, iiv сказал:

А вот интересно, а как тогда люди поступают, если им надо много (мегабайты в секунду) получать-принимать на embedded linux, причем просто МК не тянет сами вычисления, например, из-за того, что памяти мало... У меня постоянно такие задачи встречаются, пока пользую Cyclone 5 SoC, но удобных готовых плат нет, а разводка DDR2 не есть очень простое занятие...

Люди в таких случаях используют USB. Можно его сколько угодно ругать (и по делу!) но USB единственный интерфейс который точно будет иметь минимум "нюансов" на любом SOC. Драйвера I2C, SPI как правило с "сюрпризами" а то и вовсе нерабочие.

Share this post


Link to post
Share on other sites
2 minutes ago, _3m said:

Люди в таких случаях используют USB.

Таки да. При всей дикости, есть неоспоримые плюсы:

- он стандартный

- достаточно скоростной

- есть в каждом утюге

- можно с удобством отлаживать железку на хосте

 

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

Share this post


Link to post
Share on other sites

ну ещё ethernet есть, куда более стандартный чем usb :), но по скорости малость проигрывает usb, и есть хоть и не в каждом утюге, но вполне встречается, и [R]MII можно напрямую друг в дружку воткнуть без физики если речь про соединение на одной плате.

А регистры dma и spi нельзя через /dev/mem и mmap напрямую сконфигурировать на пересылку определённого куска, чтобы без кривых драйверов? но от изучения возможностей в каждом конкретном случае это конечно никак не избавит.

47 minutes ago, aaarrr said:

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

на вывод параллельные же lcd тоже вымерли не везде.

Share this post


Link to post
Share on other sites
13 minutes ago, _pv said:

А регистры dma и spi нельзя через /dev/mem и mmap напрямую сконфигурировать на пересылку определённого куска, чтобы без кривых драйверов?

DMA обычно разделяемый ресурс, у остальных его отнимать грешно. И это вполне может быть что-нибудь типа PL330,

осваивать который только ради SPI очень накладно.

Share this post


Link to post
Share on other sites

Спасибо большое всем за интересную информацию!!!

 

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

Share this post


Link to post
Share on other sites
2 часа назад, iiv сказал:

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

Самый быстрый и наименее латентный способ пересылки в другой процессор: пересылка в соседнее ядро через общую память. Никакой из обсуждавшийся интерфейсов даже близко не лежал по скорости с этим методом. Не знаю как под линуксом, но если stand alone, то и написать драйвер для такого обмена проще чем возиться с USB/Ethernet/SPI.

Так что если есть возможность - я бы предпочёл многоядерный МК.

Уж не говоря о том что и отладка упростится. Ибо отладка двух одновременно работающих в реальном времени независимых МК - то ещё удовольствие.

Share this post


Link to post
Share on other sites
2 hours ago, jcxz said:

Самый быстрый и наименее латентный способ пересылки в другой процессор: пересылка в соседнее ядро через общую память. ... Ибо отладка двух одновременно работающих в реальном времени независимых МК - то ещё удовольствие. 

полностью подпишусь под каждым вашим словом. Мой скромный опыт примерно о том же говорит, единственно, я вместо второго ядра таскал с SoC плиски.

 

3 hours ago, jcxz said:

Так что если есть возможность - я бы предпочёл многоядерный МК.

да, верно, но тут-то вся собака-то и порылась.

 

Нормальные не тормозные ядра с гигафлопсом и более на плавающей точке с малыми кортексами, которые умеют дрыгать ногами в реальном времени как-то без NDA сложно найти, а если что и находится, то прелесть разводки такого монстра и запуск на нем линукса - ужасно муторное дело. А покупные готовые борды (кто, кстати, кроме hardkernel.com) в силу кривой разводки реал-таймовой части зачастую не позволяют общаться с внешней периферией достаточно быстро.

 

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

Share this post


Link to post
Share on other sites
3 hours ago, jcxz said:

Самый быстрый и наименее латентный способ пересылки в другой процессор: пересылка в соседнее ядро через общую память.

+1, тем более всё это поддерживается производителем.

 

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

Share this post


Link to post
Share on other sites
15 hours ago, iiv said:

А вот интересно, а как тогда люди поступают, если им надо много (мегабайты в секунду) получать-принимать на embedded linux, причем просто МК не тянет сами вычисления, например, из-за того, что памяти мало...

Zynq/ZynqMP или аналоги от Intel/Altera, вопрос религиозный. Данные затягиваем в PL часть, там обрабатываем и выдаем по DMA в PS часть, где живет Linux или bare-metal app.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this