Скачать свои дрова и дизасемблернуть, не?newold86 wrote:Драйверы сетевых адаптеров

Moderator: Shaos
Скачать свои дрова и дизасемблернуть, не?newold86 wrote:Драйверы сетевых адаптеров
В смысле? Память пишет по заднему фронту (подъему) /WR, он же /MWR, не?newold86 wrote:но вот память не ждет, и спокойно записывает в себя то, что находится на шине данных в этот момент
Вот я тоже так думал - насчет заднего фронта. Мало того - сначала я даже думал, что слишком быстро отпускаю iordy после появления правильных данных на шине, поэтому искусственно его продлял, но это не помогло. Начал смотреть схемы и datasheet на память ~ такое впечатление, что запись идет по заднему фронту CAS, который вроде не продляется...Vic3Dexe wrote:В смысле? Память пишет по заднему фронту (подъему) /WR, он же /MWR, не?newold86 wrote:но вот память не ждет, и спокойно записывает в себя то, что находится на шине данных в этот момент
Если вы тормозите DMA по IORDY, то он затягивает длительность /MWR, и отпускает его только когда ваше уст-во "готово", т.е. на шине корректные данные.
Две совершенно разные вещи. При чтении из порта процессором сам процессор приостанавливается и ждет готовности байта из SPI. Затем процессор глотает этот байт и потом уже сам пишет его в память, при этом цикл запись в память идет без ожидания (ну, или там память сама может снять iordy на нужное для нее время, если сразу не готова)Vic3Dexe wrote:Если затягивание цикла работает при CPU-обмене, то должно работать и при DMA-обмене.
Это времянки самого 8237, меня же интересуют требования памяти. Например, через сколько времени после выставления контроллером DMA сигнала MEMWn необходимо выставить данные на шину данных для записи, и сколько их там нужно держать. В конце-концов, хотя бы однозначный ответ, в какой момент происходит запись в память ???Vic3Dexe wrote:Описание времянок в даташите на 8237 должно быть (навскидку).
Точно. Спал на ходу ужеnewold86 wrote:Две совершенно разные вещи
Даташит на память?newold86 wrote:требования памяти
Такое впечатление, что памяти глубоко наплевать на READY (если под этим подразумевается CHRDY) - как я уже писал, у меня не получается придержать момент записи в память байта с шины данных...Mixa64 wrote:WE придерживаем до момента как появится READY. Подразумевается, что к появлению READY данные для записи уже есть. (название WRMEM - условное, единый строб для памяти, формируемый из требования процессора или DMA, смотря кто из них активен.)
Это все хорошо, но тут готовая мать, на которой DMA, который не может тормозить память...Mixa64 wrote:но самое простое (имхо) - WE на память формировать из WRMEM
Да, проблема именно в этом. Причем получается, что это еще и зависит от типа памяти в каждой конкретной материнке. Честно говоря, я в это долго не мог поверить, поэтому упорно пытался найти хоть какой-то контроллер памяти...Vic3Dexe wrote:Это все хорошо, но тут готовая мать, на которой DMA, который не может тормозить память...
Вообще смысл есть, особенно для медленных компьютеров. Тупое чтение из порта и выгрузка в память через in - stosb на стандартной XT дает около 180К/с при отсутствии дополнительного ожидания на прием байта из SD карты. С DMA, по результатам моих экспериментов, получилось бы более 300К/с уже с чтением из карты. Однако для 286 с более высокой тактовой частотой и дополнительными командами, интерес был бы только академический.Vic3Dexe wrote:А сколько времени занимает чтение по SPI? Если очень много, то, может нет смысла вообще городить DMA?
Насколько знаю, там чтение из гибкого диска вообще идет побайтно - контроллер приготовил байт, потом выдает запрос на DMAVic3Dexe wrote:По крайней мере, в ХТ это же как-то работало?
Да есть у меня куча вариантов, как можно обойти проблему. Только сейчас все выглядит красиво и просто, а так придется городить сложную конструкцию. Самое главное - понадобится буфер под FIFO, и сразу же станет вопрос о возможности реализации данного устройства на простом CPLD...Vic3Dexe wrote:Так вот, обучите платку...
Я про то, что если скорости SPI не хватает для обмена с RAM на ее скорости, то накладные расходы на DMA только замедлят обмен по сравнению с CPU, даже на 8088@4.77newold86 wrote:Вообще смысл есть, особенно для медленных компьютеров.
Может быть, сам уже не помню точно чего там и как.newold86 wrote:там чтение из гибкого диска вообще идет побайтно - контроллер приготовил байт, потом выдает запрос на DMA
Ой... как все просто выглядело у меня в голове, когда я свое городить начиналnewold86 wrote:так придется городить сложную конструкцию
Долго объяснять сейчас не могу, поэтому поверьте на слово - при выбранном мною подходе DMA помогает (цифры приводил чуть выше). Если кратко, то поток от SPI медленнее памяти, но намного быстрее цепочки - SPI - CPU - память. И даже с памятью проблема не столько в медленном потоке, а в его сдвинутости по фазе относительно времянок памятиVic3Dexe wrote:Я про то, что если скорости SPI не хватает для обмена с RAM на ее скорости, то накладные расходы на DMA только замедлят обмен по сравнению с CPU, даже на 8088@4.77
Побайтно - нет проблем, но тогда расходы на DMA как раз на корню всю идею перечеркнут. Через FIFO - уже раньше объяснял.Vic3Dexe wrote:Кто мешает этот самый on-demand в вашем случае?
Да без проблем, мне-то чтоnewold86 wrote:поэтому поверьте на слово