В прошлый раз я остановил рассказ на том, что мы рискнули сделать собственный модульный прибор, чтобы не привязывать разработки к сторонним решениям, таким, как наладонники iPAQ, давно ушедшим с рынка и вытесненным в конце концов смартфонами.  Итак, 2005-2006 годы.  Обычно цикл создания новой железки в компании занимал шесть месяцев — от идеи до первого серийного выпуска aka mass production. К слову сказать, нас совершенно не пугала сложность предстоящей разработки. Недаром мы выбрали лозунг "Сложные задачи — простые решения!". Тем более, что, как считал главный разработчик железа, если в системе есть FPGA, то любые аппаратные проблемы можно решить "программным" способом (например, если при проектировании платы ошиблись с назначением ножек).  Окей, решение принято — и понеслось! Согласовали ТЗ: общие требования, форм-фактор, приблизительный конструктив, структурную схему. У зарубежных конкурентов (Sunrise Telecom, Anritsu etc.) преобладала фиксированная конфигурация или, максимум, конфигурация с одним сменным модулем. Мы решили, что в нашем приборе будет два сменных измерительных модуля и предположили, что для начала выпустим три типа плат: E1/ИКМ, Datacom, Gigabit Ethernet. Так как опыт разработки под ARM-процессор семейства Intel PXA250 имелся в полном объёме --ведь именно такой процессор устанавливался в наладонниках iPAQ'и, — то в качестве ядра управляющей платформы выбрали новый на тот момент Intel PXA270 (потом эти процессоры Intel отдал в компанию Marvell), тем более, что пилотная плата заработала практически сразу и без особых проблем. Вот так выглядел пилот, на котором за пару дней при помощи верёвочной петли и палки jtag'а и openocd удалось запустить bootloader и linux, параллельно указав компании Intel на недочёты в документации. Вид со стороны процессора: 
Вид со стороны гребёнок для подключения периферии: Но выбор и подъём центрального процессора — это даже не полдела, а, максимум, одна десятая. Потому что есть периферийные устройства, такие, как контроллер управления питанием и зарядом аккумулятора, audio-codec, ethernet, usb и т.д., встроенные в процессор или автономные.  Чтобы избежать ошибок на уровне разводки платы, мы приняли "эпохальное" решение делать разводку цифровых сигналов через микросхемы FPGA и CPLD и вот что получилось, если смотреть на первую версию прибора с точки зрения программиста: 
Как можно не без труда разобраться, почти все периферийные компоненты подключены к центральному процессору через ПЛИС (FPGA и CPLD): дисплей, touch-панель, аудио, клавиатура, LAN-порты, сменные измерительные модули, и даже compact flash. А для управления питанием и зарядом NiMh аккумулятора подключили отдельный контроллер на базе ATMega, в котором реализовали функции smart battery. (Напомню, что это было десять лет назад и про специализированные микросхемы для заряда и контроля питания мы знали, но почему-то не особенно им доверяли. Сейчас можно смело признаться, что да, ошибались. Не зря ведь компании, выпускающие такие чипы, тратят на разработку несколько лет. Сейчас-то мы поумнели и не занимаемся изобретением велосипеда.) А вот и получившийся монстр — основная плата прибора: Для подключения сменных модулей был изобретён свой протокол обмена данными и управления, а физический интерфейс выполнили в форм-факторе урезанного PCI-разъёма: Сверху и снизу — защитные панели, чтобы любопытные юзеры не сковыривали с платы лишние, как им казалось, детальки. Надо ли говорить, что прибор получился мега-сложный как в разработке, так и в сопровождении? Помимо прикладных программ для измерений пришлось разработать множество костылей и верёвочек подсистем:  Зато универсально и застраховано почти от любых ошибок в разводке. Люди, никогда так не делайте! Эх, насколько проще был наш мир до того, как пришлось броситься в разработку сложных систем. Помимо FPGA, установленной на борту (на материнской плате), в каждом сменном модуле тоже есть своя FPGA, в которой реализована real-time измерительная логика и без которой в нашем деле не обойтись, в отличие от материнской платы. Последняя, кстати, с тех пор претерпела несколько реинкарнаций и стала на порядок проще и надёжнее. И в новых версиях мы уже так не извращались и не изобретали велосипед: Для обмена со сменными модулями использовали USB, процессорную плату взяли готовую, формате SO-DIMM, волевым решением отказались от спец-процессоров контроля и заряда аккумуляторов и перешли на типовые микросхемы серии BQ от Texas Instruments и наступило счастье.  Как говорил М. Жванецкий в одной из своих миниатюр: "но опыт есть!", и мы на такие грабли стараемся не наступать.  А если система получилась настолько сложной, как в нашем примере, то, вероятнее всего, она спроектирована неправильно.  Продолжение следует. разработчик