Фон
Я разрабатываю проект, который потребует скромных спецификаций микроконтроллера:
- 8 12-битных, 10 кГц АЦП
- 1 КБ ОЗУ
- 48-QFN или меньше
- Устойчивый к помехам и защищающий от ошибок протокол связи со скоростью 20 кбит / с
Требования к обработке сигналов довольно низкие, и большинство из них можно экспортировать в главный процессор в системе. Первые три спецификации легко встретить, и их можно сделать менее чем за 2 доллара. Тем не менее, связь будет происходить в очень электрически шумной среде, поэтому уязвимые к шуму сети, такие как LIN и I2C, отсутствуют. Дополнительным аргументом против LIN является то, что я хотел бы использовать все это при 5 В или 3,3 В, а для приемопередатчиков LIN требуется 12 В, и поэтому потребовался бы дополнительный регулятор или провод на плату датчика. Я изначально выбрал CAN для этой задачи. Тем не менее, CAN-контроллеры требуют значительных затрат, и мне любопытно, можно ли это сделать программно.
CAN физический уровень
Спецификация CAN определяет Канальный и Физический уровни эталонной модели сети OSI. Существует множество недорогих 8-контактных ИС, таких как NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 и TI SN65HVD1050, для реализации физического уровня. Реализация физического уровня с помощью цифро-аналоговых преобразователей или операционных усилителей была бы сложной, если не невозможной, поэтому эти микросхемы вполне стоят $ 1 или около того, что они стоят.
Канал передачи данных / уровень протокола
Для уровня Data Link некоторые микроконтроллеры добавляют модули протокола CAN на базовые уровни связи UART, I2C и SPI. Однако они значительно дороже, чем базовые чипы.
Исследование стоимости модулей протокола CAN
Чтобы подтвердить это утверждение, вот несколько популярных микросхем в версиях CAN и не-CAN, из:
- ATmega16 - ATMEGA16M1 (с CAN): 3,87 долл. США, ATMEGA168A (без CAN): 3,23 долл. США
- dsPIC - DSPIC33FJ64MC802 (с CAN): 6,14 $, DSPIC33FJ64GP202 (без CAN): 5,48 $
- PIC18 - PIC18F2480 (с CAN): $ 6,80, PIC18F24J10 (без CAN): 2,10 $
- Cortex-M3 - STM32F103C4T6A (с CAN): $ 6,50, STM32F100C4T6B (без CAN): $ 2,73
Честно говоря, я сравнивал только микроконтроллеры с эквивалентными объемами памяти, однако многие версии, отличные от CAN, доступны с меньшим объемом памяти за меньшие деньги. Внешние CAN-контроллеры, такие как Microchip MCP2515 , стоят почти 2 доллара, поэтому, если у вас есть такая возможность, очевидно, что экономически выгоднее интегрировать CAN в микроконтроллер.
Интересно, что часть ATmega на сегодняшний день является самой дешевой, оснащенной CAN частью в инвентаре Digikey.
Функция уровня протокола CAN
Модуль CAN, обнаруженный в микроконтроллерах dsPIC, выполняет следующие действия:
Модуль шины CAN состоит из механизма протоколов и буферизации / управления сообщениями. Механизм протокола CAN обрабатывает все функции для приема и передачи сообщений по шине CAN. Сообщения передаются при первой загрузке соответствующих регистров данных. Состояние и ошибки можно проверить, прочитав соответствующие регистры. Любое сообщение, обнаруженное на шине CAN, проверяется на наличие ошибок, а затем сопоставляется с фильтрами, чтобы определить, должно ли оно быть получено и сохранено в одном из регистров приема.
Это кажется вполне выполнимым в программном обеспечении.
Вопрос
Можно ли использовать уровень программного протокола для реализации спецификации CAN только с недорогим микроконтроллером, оборудованным UART, и с трансивером CAN? Если да, существуют ли какие-либо реализации с открытым исходным кодом?
В качестве альтернативы, могут ли трансиверы CAN использоваться с UART для реализации собственного протокола? Я в порядке с топологией с одним мастером; Я понимаю, что арбитраж может быть трудно получить право в пользовательском протоколе.