В прошлый раз я остановил рассказ на том, что мы рискнули сделать собственный модульный прибор, чтобы не привязывать разработки к сторонним решениям, таким, как наладонники 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 и CPLD для разруливания SPI-потоков, для работы с наплатным ethernet-контроллером, для обмена со сменными модулями по параллельной шине, для передачи аудио-информации от модулей в аудио-кодек,
- драйверы (модули ядра linux) для обновления прошивок и работы со всем изобретённым зоопарком,
- прошивку под чип управления зарядом и питанием…
Зато универсально и застраховано почти от любых ошибок в разводке. Люди, никогда так не делайте!
Эх, насколько проще был наш мир до того, как пришлось броситься в разработку сложных систем.
Помимо FPGA, установленной на борту (на материнской плате), в каждом сменном модуле тоже есть своя FPGA, в которой реализована real-time измерительная логика и без которой в нашем деле не обойтись, в отличие от материнской платы. Последняя, кстати, с тех пор претерпела несколько реинкарнаций и стала на порядок проще и надёжнее.
И в новых версиях мы уже так не извращались и не изобретали велосипед: Для обмена со сменными модулями использовали USB, процессорную плату взяли готовую, формате SO-DIMM, волевым решением отказались от спец-процессоров контроля и заряда аккумуляторов и перешли на типовые микросхемы серии BQ от Texas Instruments и наступило счастье.
Как говорил М. Жванецкий в одной из своих миниатюр: "но опыт есть!", и мы на такие грабли стараемся не наступать.
А если система получилась настолько сложной, как в нашем примере, то, вероятнее всего, она спроектирована неправильно.
Продолжение следует.
Автор: crazybrake