|
stm32 передать в ком поток 49мБит, в какую сторону думать? |
|
|
|
Nov 24 2017, 19:55
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Уважаемые,
до этого меня устраивала скорость около 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МБит получится?
Я проискал посмотрел, но кроме общих слов ничего внятного не нашел...
Заранее благодарю.
|
|
|
|
|
Nov 24 2017, 20:29
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(Студент заборстроительного @ Nov 24 2017, 23:02)  Обсуждалось уже много раз. Поиском что ли не умеете пользоваться? К примеру почитайте тему https://electronix.ru/forum/index.php?showtopic=144619благодарю за ссылку, но там не ответов на мои вопросы
|
|
|
|
|
Nov 24 2017, 21:23
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(diwil @ Nov 24 2017, 22:55)  За сим вопросы: 1. LwIP без оси работает? Надеюсь, что да. 2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать) 3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ? 4. И вообще, 50МБит получится? Каким образом будет реализован прием на компе, в смысле протокол поверх эзернета? Если есть возможность писать драйвер, можно вообще кидать чистыми эзернет кадрами, что заметно ускорит работу, если так не получается, придется пилить IP, затем, хотя бы UDP. Есть стеки более простые, чем lwip, и работают быстрее. lwip без оси работает, и без сокетов тоже, но в виду буферирования и динамической памяти может оказаться не слишком резв..
Сообщение отредактировал mantech - Nov 24 2017, 21:25
|
|
|
|
|
Nov 24 2017, 21:34
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(mantech @ Nov 25 2017, 00:23)  Каким образом будет реализован прием на компе, в смысле протокол поверх эзернета? Если есть возможность писать драйвер, можно вообще кидать чистыми эзернет кадрами, что заметно ускорит работу, если так не получается, придется пилить IP, затем, хотя бы UDP. Есть стеки более простые, чем lwip, и работают быстрее.
lwip без оси работает, и без сокетов тоже, но в виду буферирования и динамической памяти может оказаться не слишком резв.. на компе BSD сокеты. другие не хочу (в промискис режиме читать не хочу) у меня задача - отправить по UDP, абы не заморачиваться в подтверждениями rst/ack и т.д . Но отправить хочу сразу много. т.е. стэк должен уметь фрагментировать пакеты. И, желательно, чтобы он (стэк) это делал сам. Желательно, чтобы стэк это делал где-то в прерываниях и тихо, ибо процу тоже есть чем заняться, а ось накручивать на это не хочу. а какие стэки еще есть, которые разумно ложатся на stm32 линейки f/h7?
|
|
|
|
|
Nov 24 2017, 23:14
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(_pv @ Nov 25 2017, 01:09)  и вместо кипариса 68013 уж лучше FT232H, со стороны ПК хотя бы приключений не будет. А в чём приключения-то? Работает вроде стабильно. Хотя на такой скорости я его не пробовал. Цитата(_pv @ Nov 25 2017, 01:09)  как вариант ещё один МК (ну или сменить текущий) чтобы HS PHY на борту был. Это несомненно лучший вариант.
|
|
|
|
|
Nov 24 2017, 23:44
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(jcxz @ Nov 25 2017, 06:14)  А в чём приключения-то? Работает вроде стабильно. Хотя на такой скорости я его не пробовал. драйвера? я на каком-то одном ноутбуке загрузку по USB так и не одолел, хотя и не разбирался особо. но он даже голый МК (совсем без еепрома) вообще никак не видел. но может мне просто повезло тогда во времена миграции 32->64, xp->w7, а сейчас c унифицированным для всех CyUSB3 всё хорошо. как там с w10 и линуксами? и если хоть что-нибудь помимо GPIF (который тоже как минимум сконфигурировать надо), для встроенного 8051 только страшненький sdcc? ну а может просто руки из жопы
|
|
|
|
|
Nov 25 2017, 10:35
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(diwil @ Nov 24 2017, 22:55)  2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать) 3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ? 4. И вообще, 50МБит получится? Я, тогда, задам вопрос по-другому: На stm32 (хотя, должно быть, на всех процах одинаково), если я, работая в режиме без оси, хочу передать 100к с UDP, lwip, то * надо ли мне несколько раз вызывать sendto() или * lwip сам, в прерываниях, соберет пакеты и их отправит? или есть другой IP стэк, который это сделает хорошо и быстро?
|
|
|
|
|
Nov 25 2017, 12:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(_pv @ Nov 25 2017, 01:44)  драйвера? я на каком-то одном ноутбуке загрузку по USB так и не одолел, хотя и не разбирался особо. но он даже голый МК (совсем без еепрома) вообще никак не видел. Загрузкой по USB я пользовался только во время отладки. Штатно прошивка грузилась с I2C. Проблем не было замечено. Цитата(_pv @ Nov 25 2017, 01:44)  и если хоть что-нибудь помимо GPIF (который тоже как минимум сконфигурировать надо), для встроенного 8051 только страшненький sdcc? Не понял вопрос... Диаграммы работы GPIF рисовал в GPIF-редакторе, загружал конфигурацию GPIF - прошивкой. Прошивку компилил/отлаживал в Keil. Даже без эмулятора. Наверняка можно и IAR - чем удобно. Цитата(diwil @ Nov 25 2017, 12:35)  или есть другой IP стэк, который это сделает хорошо и быстро? Если Вам просто нужно до компа (который рядом находится), то оптимальнее будет вообще без TCP-стека - чисто Ethernet-уровень. Не знаю только как под виндой до этого уровня добраться, возможно нужен будет какой-то драйвер. Но, имхо, USB для вашей задачи - удобнее. Цитата(AVR @ Nov 25 2017, 13:12)  UDP протокол настолько фантастически примитивен, что я не понимаю почему для этой задачи нужен LwIP. Может для своей задачи удастся сделать всё максимально оптимально. Хотя DHCP (если нужен) и прочую настроечную дребедень я бы предоставил LwIP или другим. Обработку IP до уровня UDP можно и самому написать, без сторонних костылей. Без DHCP.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|