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

stm32 передать в ком поток 49мБит

Уважаемые,

 

до этого меня устраивала скорость около 4 мбит на f405 через usb fs.

сейчас возникла необходимость передавать в комп примерно 50-60 мбит.

 

Я накапливаю эти данные в проц через 2 SPI и система работает следующим образом:

* ОСи нет.

* каждые 16мс по одному SPI накапливается 8*8*16*2 = 4кБайт

* по второму 3*2*960*16 = 92160 байт.

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

И вот по этому событию (прерыванию от дма) я хочу передавать данные в комп.

 

Принимать от компа данные... ну может байт 60 раз в секунду.

 

Поток, который надо (92160 + 4096)*8*62.5 = 48.128 мегабит (теоретически) + еще чуть-чуть.

 

Необходимо выбрать транспорт.

* USB FS отпадает. Хотя и хорошо работает вплоть (я пробовал) до 4мБит.

* Поскольку мне необходимо использовать двойной буфер + буфер для отправки данных, то мне нужно минимум 300к памяти.

* А это только Н7.

* поскольку у меня места мало, то могу использовать только 100 или (хуже) 144 -х ногие корпуса. А в них нет USB HS.

* Внешний PHY для USB HS у меня плохо влезает, конфликтует с другими девайсами и сильно по корпусу раскидан. За сим:

* Я думаю в сторону изернета.

* из доступных примеров я нашел только реализацию на LAN1820/1842. Там тоже все ноги по корпусу раскиданы, но его я смог его развести.

* но я не нашел внятных примеров как оно работает.

 

Поскольку у Н7 косяк - нет физики HS, то, похоже, хоть и с внешним MII, ETH выигрывает.

 

За сим вопросы:

1. LwIP без оси работает? Надеюсь, что да.

2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать)

3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ?

4. И вообще, 50МБит получится?

 

Я проискал посмотрел, но кроме общих слов ничего внятного не нашел...

 

Заранее благодарю.

 

 

 

 

 

 

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


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

Обсуждалось уже много раз. Поиском что ли не умеете пользоваться?

К примеру почитайте тему https://electronix.ru/forum/index.php?showtopic=144619

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


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

У меня в закладках есть вот эта тема: https://electronix.ru/forum/index.php?showt...=92903&st=0

 

Но я просто мимо проходил - эзернет в "боевом" режиме я так и не использовал, подсказать ничего не смогу..

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


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

Обсуждалось уже много раз. Поиском что ли не умеете пользоваться?

К примеру почитайте тему https://electronix.ru/forum/index.php?showtopic=144619

 

благодарю за ссылку, но там не ответов на мои вопросы

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


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

За сим вопросы:

1. LwIP без оси работает? Надеюсь, что да.

2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать)

3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ?

4. И вообще, 50МБит получится?

 

Каким образом будет реализован прием на компе, в смысле протокол поверх эзернета? Если есть возможность писать драйвер, можно вообще кидать чистыми эзернет кадрами, что заметно ускорит работу, если так не получается, придется пилить IP, затем, хотя бы UDP. Есть стеки более простые, чем lwip, и работают быстрее.

 

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

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

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


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

Каким образом будет реализован прием на компе, в смысле протокол поверх эзернета? Если есть возможность писать драйвер, можно вообще кидать чистыми эзернет кадрами, что заметно ускорит работу, если так не получается, придется пилить IP, затем, хотя бы UDP. Есть стеки более простые, чем lwip, и работают быстрее.

 

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

 

на компе BSD сокеты. другие не хочу (в промискис режиме читать не хочу)

 

у меня задача - отправить по UDP, абы не заморачиваться в подтверждениями rst/ack и т.д . Но отправить хочу сразу много. т.е. стэк должен уметь фрагментировать пакеты. И, желательно, чтобы он (стэк) это делал сам. Желательно, чтобы стэк это делал где-то в прерываниях и тихо, ибо процу тоже есть чем заняться, а ось накручивать на это не хочу.

 

а какие стэки еще есть, которые разумно ложатся на stm32 линейки f/h7?

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


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

через spi пролезет, через ethernet и lwip - вряд ли

 

Изменено пользователем Огурцов

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


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

а какие стэки еще есть, которые разумно ложатся на stm32 линейки f/h7?

CY7C68013A. И он есть в QFN и BGA.

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


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

поскольку у меня места мало, то могу использовать только 100 или (хуже) 144 -х ногие корпуса. А в них нет USB HS.

если места мало - без вариантов ставьте bga

 

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


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

а FT2232H не справится ли с задачей забирания данных с двух SPI в комп вообще без наличия МК?

хотя с 48МГц может и не успеть. ну тогда не MPSSE, а FIFO режим + мелкая CPLD. зачем там буфер на 300кБ и соответственно H7 не очень понятно.

а если у МК есть ещё пара SPI, можно поделить поровну на два по 30. и пропихнуть через MPSSE.

 

и вместо кипариса 68013 уж лучше FT232H, со стороны ПК хотя бы приключений не будет.

как вариант ещё один МК (ну или сменить текущий) чтобы HS PHY на борту был.

кортексы от nxp/atmelmicrochip, PIC32, ADSP-BF70x хоть с мегабайтом памяти.

 

ну и если MII как и внешний HS PHY раскидан по корпусу, c другой периферией конфликтует и с трудом разводится, есть LAN9250.

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


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

и вместо кипариса 68013 уж лучше FT232H, со стороны ПК хотя бы приключений не будет.

А в чём приключения-то? Работает вроде стабильно. Хотя на такой скорости я его не пробовал.

 

как вариант ещё один МК (ну или сменить текущий) чтобы HS PHY на борту был.

Это несомненно лучший вариант.

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


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

А в чём приключения-то? Работает вроде стабильно. Хотя на такой скорости я его не пробовал.

драйвера? я на каком-то одном ноутбуке загрузку по USB так и не одолел, хотя и не разбирался особо. но он даже голый МК (совсем без еепрома) вообще никак не видел.

но может мне просто повезло тогда во времена миграции 32->64, xp->w7, а сейчас c унифицированным для всех CyUSB3 всё хорошо. как там с w10 и линуксами?

и если хоть что-нибудь помимо GPIF (который тоже как минимум сконфигурировать надо), для встроенного 8051 только страшненький sdcc?

 

ну а может просто руки из жопы :laughing:

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


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

2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать)

3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ?

4. И вообще, 50МБит получится?

 

 

Я, тогда, задам вопрос по-другому:

 

На stm32 (хотя, должно быть, на всех процах одинаково), если я, работая в режиме без оси,

хочу передать 100к с UDP, lwip, то

* надо ли мне несколько раз вызывать sendto() или

* lwip сам, в прерываниях, соберет пакеты и их отправит?

 

или есть другой IP стэк, который это сделает хорошо и быстро?

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


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

или есть другой IP стэк, который это сделает хорошо и быстро?

UDP протокол настолько фантастически примитивен, что я не понимаю почему для этой задачи нужен LwIP. Может для своей задачи удастся сделать всё максимально оптимально.

Хотя DHCP (если нужен) и прочую настроечную дребедень я бы предоставил LwIP или другим.

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


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

драйвера? я на каком-то одном ноутбуке загрузку по USB так и не одолел, хотя и не разбирался особо. но он даже голый МК (совсем без еепрома) вообще никак не видел.

Загрузкой по USB я пользовался только во время отладки. Штатно прошивка грузилась с I2C. Проблем не было замечено.

 

и если хоть что-нибудь помимо GPIF (который тоже как минимум сконфигурировать надо), для встроенного 8051 только страшненький sdcc?

Не понял вопрос... :wacko:

Диаграммы работы GPIF рисовал в GPIF-редакторе, загружал конфигурацию GPIF - прошивкой. Прошивку компилил/отлаживал в Keil. Даже без эмулятора. Наверняка можно и IAR - чем удобно.

 

или есть другой IP стэк, который это сделает хорошо и быстро?

Если Вам просто нужно до компа (который рядом находится), то оптимальнее будет вообще без TCP-стека - чисто Ethernet-уровень.

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

Но, имхо, USB для вашей задачи - удобнее.

 

UDP протокол настолько фантастически примитивен, что я не понимаю почему для этой задачи нужен LwIP. Может для своей задачи удастся сделать всё максимально оптимально.

Хотя DHCP (если нужен) и прочую настроечную дребедень я бы предоставил LwIP или другим.

Обработку IP до уровня UDP можно и самому написать, без сторонних костылей. Без DHCP.

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


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

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

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

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

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

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

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

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

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

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