> DMA в основном большой кус без проца пульнуть интересно. IRQ = сохранение
> + восстанов + флаги снять + транзакцию перезарядить, время всеж. Толкнуть
> так 64 байта? Сравнимо по действиям с упомянутым, нет?Ну тут накладывается такой момент, что по USB нельзя просто так взять и передавать в любой момент, а только когда хост спрашивает (причём, конкретный endpoint). Поэтому очень удобно заранее положить данные в буфер, настроить DMA для соответствующего EP (указатель + количество) и пусть себе хост когда хочет, тогда и забирает этот буфер, не прерывая работу ядра вообще. Аналогично с записью с хоста, заранее настроил буфер для обмена и дальше только ловить прерывание, что он заполнен и можно другой буфер подставлять. Правда, у меня с USB знакомство больше с колокольни всяких 8051, поэтому довольно специфичный взгляд. На STM32 так получилось, что с Ethernet я разобрался раньше USB (задача была, в которой именно Ethernet нужен), так что до его USB так толком и не добрался.
>> Дык, не перебор же. Вот банально у F1: 2 АЦП по 12 бит, 1Msps. Это уже 24 Мбит/с,
>> не считая накладных расходов
> 1) 2 АЦП не у всех F1. Скажем в F100 1. Правда там и usb нет.
F100 — маркетологический огрызок, физически в F100~F103 один и тот же кристалл и всё там есть, разве что на заводе не тестировалось или не прошло тесты (по словам ST). В общем-то, так все делают, но большинство жадных контор ещё и fuse'ами блокируют или доступными только из системного режима регистрами (см. PSoC4), а ST позволяет на свой страх и риск пользоваться. Причём, брать F100 (как и 101 или 102) уже давно нет никакого смысла: если поначалу он и был дешевле F103, потом за счёт непопулярности он оказался уже даже дороже (цена при штучных поставках сильно выше, чем при больших партиях, в итоге получаются вот такие перекосы). Так что не аргумент.
> 2) Постоянный поток, на комп нужен далеко не всем. И для такого
> наверное лучше камень покруче, а там и HS как раз.
Ну, он на самом-то деле не совсем постоянный, но набегами и их нужно быстро разгребать, т.е. растягивать передачу и обработку до начала следующего набега — не вариант.
> А вы даташит читали? Чтобы именно столько, потребуется весь аналог специально под
> ЭТО затачивать. Либо получите дикое вранье в отсчетах и половину LSB как раз можно выкинуть.
> Хинт: перезаряд ADC S&H cap @ 1MHz канал просаживает если поляну не готовили (повторитель на БЫСТРОМ опампе?). Хрень померять можно.
Я, конечно, тот ещё самоучка с не очень прямыми лапками, но и фильтры, и повторители конечно же есть. Олсо, 1 Msps — это же всего лишь сигналы до 100-200 кГц, очень скромно с т.з. аналоговых цепей. Шум на пару LSB присутствует, конечно, но как-то в моём манямирке получается лучше передать вместе с этими битами и потом эту информацию в обработке учесть (накопление, осреднение, программная фильтрация, вот это вот всё), чем отрезáть заранее.
> DMA - bus master, шину делит на двоих с процом. Разве что команды не гоняет. На cortex >=M3 I и D шины раздельные, I может с флеша читать пока D в оперативу лезет, так профита поменьше. А вот M0 с одной шиной, там интереснее.
В каком смысле «интереснее»? В смысле, что сложнее из-за того что DMA и ядро мешают друг другу ещё сильнее, чем на M3? Ну есть такое, но это опять не в пользу выбора M0.
>> Отож, просто их необходимость быстрее обнаруживается.
> Ошибки CRC там не отменяли.
Это да, но задержка при обнаружении такой ошибки (и последующей перепосылке) куда меньше, чем время реакции TCP/IP на потерянный/битый пакет. Понятно, что так-то можно и не по TCP передавать, и таймауты крутить, но как-то всё-таки USB выглядит удобнее. Ну да ладно, это всё частные случаи.
>> В том-то и претензия, что не такой он и большой.
> 480 мбитов - приличный уже.
Ну вот опять про максимальный, да что ж такое. Я уже говорил, что между 12 и 480 Мбит/с есть ещё много интересных значений и этот провал не особо есть чем заполнить.
> И еще требует 480МГц (!!!) PLL. В разы превосходит остальные частоты в чипе. Возможно требования к техпроцессу повышало? F1 дизайнили ~10 лет назад все же.
Это да, это существенная проблема. Даже глянул по даташиту: только до 148 МГц разрешено выжимать из PLL3 на F1xx.
>> Помнится мне, даже прямо в даташите подобные примеры рассматриваются (типовая конфигурация для даталогера/плеера с флешкой).
> Это в каком шите? Из F1xx плеер - "не очень". Там M4F какой-нибудь уместнее, для жирных котов^W аудиокодеков. Или чего им плеить? ADPCM? :)
Воу-воу, не надо грязи, целочисленных реализаций кодеков (особенно MP3) более чем достаточно в природе. Конечно, на какой-нибудь эквалайзер или эффекты может и не хватить мощности (но это не точно, помню один проект…), но уж просто декодирование там с большим запасом помещается. А уж если заморочиться с фиксированной точкой, вообще ух! И да, как тут не процитировать reference manual на F1xx:
> A single 25 MHz crystal can clock the entire system and all peripherals including the
Ethernet and USB OTG FS peripherals. In order to achieve high-quality audio performance,
an audio crystal can be used. In this case, the I2S master clock can generate all standard
sampling frequencies from 8 kHz to 96 kHz with less than 0.5% accuracy.
For more details about clock configuration for applications requiring Ethernet, USB OTG FS
and/or I²S (audio), please refer to "Appendix A Applicative block diagrams" in your
connectivity line device datasheet.
Но, да, комментарий «но производителю главное продать :) а потом не его проблемы» тут очень уместен.
> А, про формальное обозначение. Так вроде и на 1.х надо же сертифицироваться чтобы usb logo юзать? Это никак не фича usb 2.0, оно и до этого было IIRC.
Да, оно и раньше было. Просто у меня такое ощущение, что для CM0 и USB 1.1 у конторы RPi уже все бумаги были и они очень не хотели тратиться на что-либо новое ради этого проекта.