
Привет, я программист микроконтроллеров. Вы наверное думаете, что программисты микроконтроллеров на работе занимаются исключительно только программированием? Целыми днями пишут крутой код? Я тоже так думал, прежде чем прийти на работу. Позвольте рассказать вам про буквально один случайный день из жизни программиста МК.
С программированием МК зачастую приходится сталкиваться сейчас в автомобилестроении. А все автомобильные агрегаты обмениваются данными по шине CAN. Это электронная плата телематики, контроллер инжекторных форсунок, кузовная электроника, сигнализация, мультимедийная система и прочее. Вот и получается так, что каждый раз на каждом новом микроконтроллере первым делом приходится заниматься пусконаладкой CAN трансивера на очередном микроконтроллере.
Вот я получил плату, портировал драйвер CAN и решил проверить заработал ли код настройки CAN драйвера. Я соединил CAN1 и CAN9. Стал посылать пакеты и пакеты не принимаются.
И тут я задумался. Происходит одно из двух: либо передатчик не посылает либо приёмник не принимает. Другого не дано. Классическая дилемма. Вопрос разруливается при помощи независимого достоверно работающего CAN-устройства. Обычно это переходники с USB на CAN.
Еще в институте на 3м курсе я купил себе один китайский переходник с USB на CAN. Чувствовал, что пригодится. Вот и настал этот день. Принес я его, значит, на работу. Стал искать драйвера и с удивлением для себя обнаружил, что компания Google, внезапно, забанила диск компании производителя переходника. И теперь не скачать драйвера и софт для USB-CAN переходника. Я написал письмо в тех поддержку в КНР. Тишина... Это препона #1. Я еще тщетно полтора часа искал драйвер USB-CAN на сторонних сайтах, но их больше нигде нет. Очевидно, что нужен какой-то альтернативный переходник с USB на CAN. Это для тех, кто любит утверждать, что "все уже сделано до нас". Да сделано, но утрачено.
Я обратился к своему босу и сказал, что для работы, как ни крути, нужен какой-никакой переходник с USB на CAN. Тот час же я узнал, что много лет назад эта компания разработала свою версию переходника USB-CAN (custom work). И мне тут же вручили этот переходник. Хорошее начало дня. Жизнь налаживается...
Я повертел в руках это изделия и никак не мог понять с какой же стороны надо подходить к этому электронному прибору. Я написал босу, что нужна документация. Бос мне велел обратиться к коллеге по имени Тед. Я поворачиваюсь к столу, где работает Тед и вижу, что, внезапно, его нет на месте. Думаю, что он вышел покурить. Это второй барьер.
Тем временем я понял, что в любом случае надо соединить переходник и LapTop. Тут я понял, что у меня нет кабеля USB-A на USB-B. Вернее есть, но он уже занят для электропитания самой отладочной электронной платы. Много ли из вас заряжают мобильный телефон кабелем с разъемам USB-B? Вопрос риторический. Это препятствие #3. Я подошел к офисному принтеру и временно отключил его, чтобы забрать до завтрашнего дня кабель USB-B. Фуф, 3-я проблема решилась сама собой.

Подключив изделие к NetTop PC, открыв диспетчер задач я увидел, что Windows 10 ожидаемо видит прибор, как неизвестное устройство. К этому моменту из курилки возвращается Тед. Он увидел мое сообщение и прибыл сразу ко мне. Он любезно принес мне harness, скинул ссылку на дистрибутив с USB драйвером. Я поставил драйвер. Windows стала видеть, что появилось устройство. Я тут же накатил клиентскую утилиту для управления этим прибором. Затем я посмотрел на harness. Это был клубок проводов. Гордиев узел. 12 метров дерево образного кабеля в ведре. Распутать harness оказалось 4-е испытание. Я стал его распутывать. Это заняло примерно 15-25 минут. Я соединил два порта этого переходника в режиме LoopBack, чтобы проверить, проходят ли пакеты.
В этот момент я обнаруживаю, что беспроводная мышка внезапно полностью разрядилась. Это препона №5. Курсор примерз к монитору. Дело в том, что клиентская утилита для управления CAN, внезапно, включается и настраивается именно курсором мышки. Я начинаю ходить по рядам между офисных кьюбиклов и спрашивать у кого в тумбочке есть запасная мышка. Мне вручают очередную беспроводную мышку. У меня в тумбе валяется уже три разряженные мышки. У всех разный тип батареек и разъем для зарядки. Можно работать дальше.
Возвращаюсь к CAN loop back. Cигнал не проходит. Я зову Теда. Он говорит, что вот у него на столе всё работает. Он сгонял и принес свой экземпляр переходника USB-CAN. Мы положили их рядом и стали искать 10 отличий. Через 10-15 минут увидели только одно отличие. На его переходнике были какие-т�� черные квадратики (джамперы). Они как раз подключали терминирующие резисторы 120 ом. На моем переходнике не было этих джамперов. Теперь всё понятно. Джамперы - причина проблемы.
При этом, чтобы примонтировать джамперы надо было демонтировать прозрачную крышку саркофага от гермокорпуса этой электронной платы. Крышка крепилась на 4х утопленных винтах по периметру с плюсовым шлицем (+). Запомните, если вы хороший программист микроконтроллеров, то вы должны, помимо аптечки, каждый день носить с тобой еще и набор длинных отвёрток с разнообразными шлицами. Я их именно в этот день и забыл с собой взять. Поэтому я переключился в режим поиска отвертки. Искал как акула. Зашел в паялку и чудом обнаружил на столе в россыпи того, что у нас называется словом miscellaneous (misc) плюсовую отвёртку. Не зря же мне на день рождения всегда желали удачи. Вот она удача возвращается сторицей. Нашлась отвертка с нужным шлицем (+).
Откручивая ручной отвёрткой винты крышки саркофага я повернул голову влево и спросил Теда дать мне пару джамперов и тут он внезапно говорит, что у него, внимание, нет ни одного джампера. Я онемел от услышанного. Как нет? И Тед спрашивает: "Часто ли ты сам, например, носишь с собой в кармане или кошельке джамперы?" Вопрос риторический. Настало 5-ое испытание. Добыть джамперы. Я перерыл паялку. Подмел там пол. Не нашел. Мне пришлось написать в общий компанейский чат, чтобы попросить предоставить мне всего пару джамперов. Своим вопросом я прервал всеобщее обсуждение планирования похода в боулинг, что вскоре вышло мне укором. К счастью, мир не без добрых людей и вскоре джамперы волшебным образом лежали у меня на столе. Даже не заметил кто их принес. К слову, один хороший коллега еще вчера предлагал мне эти джамперы, а я тогда отказался. Кто бы мог подумать , что джамперы вот сегодня мне окажутся нужны как воздух, как хлеб. Вот и в правду в народе говорят: "Дают - бери, бьют - беги"
Настало время соединить, собственно, отладочную плату и переходник USB-CAN. И снова облом... Оказывается, что мне совершенно не известна распиновка многопинового разъёма на переходнике. Университетская комбинаторика подсказывает, что можно подключить два провода к 9 пинам 72мя способами и только один способ окажется правильным. Вероятность ошибиться - 98%. Я снова иду к Теду и прошу распиновку. Тед говорит, что ему, внезапно, это тоже не известно. Он всегда привинчивал металлический разъем harness-a и, как инженер, даже не задумывался никогда про распиновку основного разъема. Даже мысль такая не возникала, никогда! Сказал, что я задаю глупые вопросы. Я ему пояснил, что у меня на столе лежит отладочная электронная плата. Это другое. И на ней нет никакого стандартного разъёма. Там просто под CAN торчат вилочные штыри PLD. Тут Тэд только рекомендовал обратится к схемотехнику этого переходника - Говарду. Мы подходим к столу Говарда и он, внезапно, тоже отсутствует. Пишу Говарду сообщение и уже вечером он присылает мне скриншот кусочка схемотехники основного разъёма. Цепь замкнулась. Ура! Это победа!
Итак, сводка за день. Что пошло не по плану:
№ | вызов |
1 | Не скачать официальный драйвер на прибор USB-CAN |
2 | нехватка USB портов на USB-Hub-e |
3 | нет кабеля USB-B |
4 | тотально запутанный жгут |
5 | разрядилась беспроводная мышка |
6 | в окрестностях не оказалось православной отвертки (+) |
7 | нет джамперов |
8 | загадочная распиновка основного разъёма, которую знает только 1 человек во всей организации |
9 | поиск нужных коллег |
10 | поиск осциллографа |
11 | поиск электродов для осциллографа |
12 | поиск крючков для электродов осциллографа |
13 | поиск свободной розетки для подключения осциллографа |
и т. д. |
Это не шутки, сэры. Это реальный шквал препятствий и препонов при решении самых заурядных задач в программировании микроконтроллеров.
Итоги
При программировании микроконтроллеров так всегда и во всём. В электронике ничего не происходит само собой. Нужен огромный калейдоскоп всяческих примочек, чтобы просто начать хоть что-то делать. Каждый раз предстоит пройти целый квест.
При этом Вы должны быть ещё и детективом. Да... Документация, знания и экспертиза на продукт порой размазаны по всей организации и надо с блокнотом опросить 2-3 свидетеля, чтобы выполнять самые тривиальные действия. Занимаясь вот такой второстепенной работой можно за весь день не написать ни одной строчки исходного кода, и в разработке на МК это - более чем нормальное явление.
Мораль. Не здорово пренебрегать документацией и инструкциями. Будь инструкция всё можно было бы сделать полностью автономно и быстро.
Что может пойти не так? Да всё, что угодно может пойти не так.
Приходите программировать микроконтроллеры!