Как я уже писал в первой части, для управления системой BSW необходим был дополнительный контроллер. Подобное устройство у меня уже было собрано и использовалось для работы блока управления круговым обзором от Делики. Но так как блок управления BSW работает на 500 кбит, объединить их на готовом железе было невозможно. Устанавливать еще один было неразумно, поэтому я решил спроектировать новый контроллер, объединяющий в себе 4 кан-шины: высокоскоростную шину Лансера на 500 кбит, низкоскоростную на 83.3, также на 83.3 для блока кругового обзора и еще одну на 500 для BSW и других устройств.
Получилось что-то вроде второго етакса и кан-сеть Лансера теперь выглядит так:
Управляющим микропроцессором был выбран чип ST — stm32f105, точнее два, так как один может обеспечить работу только двух кан-сетей. А обмен между этими процессорами я планировал сделать по двум интерфейсам spi, чего оказалось достаточно.
Нарисовал схему и развел плату. Легко уложился в четыре слоя. Свободных пинов оставалось довольно много, поэтому для контроля и управления добавил несколько светодиодов, предусмотрел установку кнопок и энкодера на плате и внешние каналы с защитой, а также возможность подключения дисплея по i2c и usb-порт. Форм-фактор использовал тот же — под корпус блока парктроника.
Вот так выглядит новый двухпроцессорный контроллер:
Так как процессоры одинаковые, была идея написать универсальную прошивку с автоматическим определением алгоритма работы, но это бы усложнило дальнейшую отладку и поддержку. Поэтому от этой идеи я отказался. Один из чипов можно назвать основным — к нему подключены две кан-шины по 500 кбит, все управляющие аналоговые сигналы, энкодер, дисплей, а также он обеспечивает работу юсб-порта. На втором все остальное — две кан-шины 83.3. Обмен между чипами, как я уже сказал, осуществляется по spi. Для этого я разработал свой простенький протокол с адресацией. Также для работы через юсб добавил поддержку протокола Lawicel, немного его модифицировав: Так как скорость кан-шин у меня неизменна, запросы подключения на разных скоростях я преобразовал в запросы на подключение к разным сегментам сети. Таким образом, подключившись к контроллеру по usb, я могу читать и писать в любую из доступных сетей. В планах, используя 29-битные идентификаторы, добавить поддержку одновременной работы с несколькими сетями.
Для полноценной работы системы необходимо было сделать индикацию не только в зеркалах, но и на экране приборной панели. Контроллер приборной панели переделывать не хотелось и надо было придумать, как реализовать отрисовку новой информации. Внешняя оперативная память для видеобуфера не была предусмотрена, а внутренней памяти плис не хватало даже на четверть картинки. Поэтому я решил перенести отрисовку новой информации из плис в stm32f4. Общий алгоритм работы стал выглядеть так: когда выбран экран с остатком хода, плис пропускает прорисовку средней части дисплея и использует несколько тактовых импульсов для установки курсора на нижнюю часть экрана. Дорисовывает низ, после чего переключается на тактирование от микропрцессора на контроллере и производит отрисовку центральной части, выводя данные от stm. Но так как предупреждение «Rear cross traffic» должно отображаться вне зависимости от текущей информации на экране, я предусмотрел систему команд с выбором приоритета. Это пригодится, если я захочу добавить отображение еще какой-нибудь информации на приборной панели. Во всех остальных случаях приборная панель работает в обычном режиме.
На сегодня все. В следующей части расскажу про реализацию индикации в зеркалах.