ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
95000
Evgeny_CD (24.07.2007 03:14, просмотров: 25074)
PCI форЁва, или небольшое прозрение :) Для меня PCI всегда был чем-то страшным и ужастным :) Т.е. я старательно коллекционировал книги и спецификации, какие-то куски информации, что-то почитывал, но у меня всегда в голове стоял флаг - это страшно! Руками не трогать! Разбираясь с MCF548x, я решил все таки посмотреть, а как оно там, с PCI в линухе? Натолкнули меня на такие мысли следующие факты: * достаточно безглючная реализация PCI MCF548x. Ерата есть, но ничего смертельного * готовая схема с PCI девайсами - схема от евал борды MCF548x на сайте производителя * вторая версия Linux BSP для MCF548x. Вышла она в этом году (прошлая была 2005 года). Linux проапгрейдили до 2.6, много чего улучшили. Решил я поднять все свои старые знания на тему, и с удивлением обнаружил - а чего там бояться? Кайф в PCI (для этого он так долго и мучительно создавался) состоит в том, что там тандартизованы две самые геморойные операции: * отлов прерывания и сопоставление прерывания конкретному драйверу девайса * DMA обмен между процессором и периферией. В терминологии PCI это называется bus master. Поскольку каждая из этих операций происходит несколько десятков тысяч раз в секунду на каждом из многих миллионов пЫсюков под Linux (и аналоги этих операций на !86 архитектурах, в маршрутизаторах, например - они сплошь на PCI /miniPCI построены), то, вероятно, так или иначе, их обезбажили :) Т.е. для всех этих типовых операций есть готовые функции в ядре линуха http://lwn.net/Kernel/LDD3/ Chapter 12: PCI Drivers http://www.charmed.com/txt/pci.txt И, понятное дело, куча готовых примеров. Т.е. если взять заведомо рабочий хост с заведомо рабочим драйвером PCI для линуха, и заведомо рабочий периферийный чип, например * http://www.plxtech.com/products/io/ - знаменитые PCI мостики * Altera, Xilinx готовую сертифицированную и верифицированную корку для FPGA то, на первый взгляд, ничего страшного там быть не должно. Еще хороши PLX DOS тулзы http://www.plxtech.com/products/sdk/ поставил старенькую машинку на 440bx, из FLASH модуля (сейчас это не стоит ничего) за пару секунд в DOS забутил, подебажил камень, чуть что не так - reset. Приятной особенностью !86 архитектру явяется отсутствие дурацких 64к барьеров при DMA. Т.е. burst'ить большими кусками там можно без проблем. Я, конечно, же далек от мысли, что сейчас, вооружившись плисиной, C1-94, и букой по PCI, я быро прикручу PCI к LPC2148. Я почеркиваю, что речь идет о готовых и провереных девайсах. К чему это я? К тому, что это может стать решением проблемы дров для линуха. Т.е. берем готовый хост с PCI, ставим PLX, нашу периферию, и быро пишем драйвер для нашего устройства. Насколько я понимаю, у PLX есть дрова в исходниках при покупке полного RDK за 500$. Оно, коненчо, не дешево, PLX'ины эти самые баксов по 25 только достать можно, но вполне возможно, того стоит. Всех проблем Linux это не решит (в частности, принциапильной асинхронности линуха), но уже продвижение. Как я уже писал, http://caxapa.ru/94813.html в случае использования гибридных систем лично для моих задач девиация "реального времени" до 10мс допустима, а такую "реальность", скорее всегоЮ удастся получить без особого шаманства на штатном линухе. Т.е. все просто - за PLX ставим служебный процессор, с которым общаемся ителлектуальными командами, чтобы он не дергал главный процессор по пустякам, обмен с linux большими кусками по DMA, ну и все прелести линуха к нашим услугам. Собственно, как и всегда, ничего нового я тут не придумал - для решения таких задач PCI и сделали :), просто новое - это ценовой диапазон. Самый дешевый контроллер с PCI с "человеческим" BGA 1.0 mm 4 ряда http://caxapa.ru/94706.html MCF5484CVR200 digikey.com партия 25 штук 31.62$ С учетом того, что Альтера обещает всех порвать с Cyclone-III (Xil, вероятно, едва ли захочет быть порванным, и чем-то ответит), то, вероятно, совсем скоро простенький PCI периферийный контроллер влезет в $10-15. Итого, как не крути, получается, что навороченный Linux контроллер (см таблицу к статье http://caxapa.ru/94813.html) с двумя LAN, 300 DMIPS процессором, плавучкой (ничего так себе контроллер, заметим) будет иметь компонентную себестомость баксов 70-100 (если не ставить 3D видео, 1Г памяти и прочие извращения). Оно, конечно, подороже, чем STR912, но зато возможности просто несопоставимые... Причем тут CF? А при том, что он все эти фантазии сделал реальностью. До него были: * Au1000 - BGA 1.0 4 ряда, тоже хорошая штучка, но Auxxx дешевле $30 не бывает - не сделаешь дешевую платформу в рамках одной архитектуры * ADM5120 - гениальный чип, в маршрутизаторах его любят ставить, но его не бывает -40 * MPC5200 - опять же, нет low cost варианта (старые дремучие варианты PowerPC недороги, но от них такой древностью веет...) * MIPS от IDT - очень даже хороший вариант, баксов от 20 начинается, но с поставками еще хуже, чем с CF. * SH от Renesas - но эти только на картинках и бывают. Еще в качестве приятной новости - обновился Linux BSP на MCF54xx. http://www.freesca …02VS0l320822D0033202A9 Драйвер PCI там есть (сдается мне, поскольку это вторая версия BSP, в нее в том числе PCI USB Host контроллер входит - вероятно, его таки отдебажили). Откровенно говоря, мне такой прогресс нравится. Все, что было сделано для PCI, было отлажено на пЫсюке, в сверхдорогих решениях CompactPCI (хотите охренеть по взрослому - поинтересуйтесь, сколько стоят платы и "корзины" для CompactPCI; понятно, что там можно было вылизать все, написать шикарную доку, и никуда не торопиться при такой норме прибыли...), и теперь становится доступным в среднем ценовом диапазоне. Все равно что ВАЗ вместо своих ведер с гайками начал выпускать за те же деньги Шевроле Корвет 50-х годов - я бы не отказался от такой "обновки"!!! Вместо выпуска "быстрого и дешевого" велосипеда (качество известно заранее :), чем все заняты в ARM'о строении, берем проверенное решение, и просто используем его в другой ценовой категории :)) Более того, экстраполирия все мои размышлизмы про гибридные системы, идеальным перифериынйм чипом является FPGA: * PCI target * сот профессор с небольшой памятью * SDRAM для буферизации данных * всякие sustom блоки Смотрим на описания коррок от Altera и видим, что 32 бита PCI контроллер при разных опциях требует 500...850 LE Cyclone II. EP2C5 имеет 4.608 LE и стоит он 13$. PCI Express все хуже - x1 контроллер (х.з. с какими опциями) требует 8600 LE Cyclone II, что почти 100% EP2C8, а это девайс ценового диапазона $20. Да еще и внешний PHY надо. Зато с NIOS-II все очень даже хорошо! Дохленький 22 DMIPS (а куда нам спешить???) Nios II /e в Cyclone II занимает 542 LE, SDRAM Controller 752, Timer 150, JTAG UART 165, итого =1609 LE на проц + 1000LE PCI = мы использовали только 50% от EP2C5 за 13$. Охренеть! Если мы поставим Nios II /f, 105DMIPS, он сожрет у нас 1,595 LE, мы забьем только 2/3 EP2C5 за 13$!!! Ну еще потери на не 100% разводку... Жалко, памяти в этом EP2C5 26 блоков по 512 байт, в 13 кбайт не особо разгуляешься - ну ничего, на асме, под кооперативной ОСькой (eCos портирован на NIOS-II, uCOS тоже - хотя они и тяжеловаты для такого случая :) ) Блин, у меня просо крышу сносит! Получается, что за 13$ я могу сделать вполне интеллектуальный PCI сопроцессор, для которого не сильно сложно сделать Linux драйвер. MCF54xx поддерживает до 5 bus master устройств. PCI-PCI bridge простой стоит баксов 13, на него можно штук 7 bus master посадить - мы столько задач не найдем для такой оравы периферии не найдем :))) ОДна засада - Cyclone-II не умеют бутиться из простых SPI флешей, им внешний тактовый генератор подавай. Ну ладно, нашаманим на рассыпуе, или ATtiny какой поставим. Xilinx, кстати, в кардинальном пролете. Достаточно неожиданно для меня http://www.xilinx. …oblaze/performance.htm MicroBlaze is configured with a hard multiplier, barrel shifter and one FSL port. MicroBlaze also includes pattern compare instructions. Program execution is done from on-chip memory. Spartan-3 (Size Optimized) 1,350 LUTs 92 DMIPS. For applications with area concerns, many MicroBlaze features can be turned off to reduce the area to about 900 LUTs. XC3S100E - 1,920 LUTs 4 блока памяти по 2 КБайта <10$ XC3S250E - 4,896 LUTs 12 блоков памяти по 2 КБайт баксов 15. Так что Altera выгоднее адназначна. Нетривиальный получается вывод. Я в шоке. Получается, что в реальных задачах у меня всегда хватит UART, например - понятно, EP2C5 штуки 4 UART поддержит без вопросов, с буферизацией и даже пакетной обработкой - чтобы в проц гнать уже готовые данные. И это все за 13$. Сколько-сколько там 16C554 стоит? А фтопку его? Да, а идейка то куда более зажигательная, чем мне самому казалось вначале. Где, где там все мои учебники по Verilog, VHDL? :)) Заодно, набив руку в писании стандартных Linux PCI дров, можно будет писать дрова и под вообще нестандартную периферию... И пойдут RTEMS с eCos лесом...