Я хочу сделать анализатор шины CAN для 250 кбит / с, используя мой компьютер. После некоторых исследований я обнаружил, что MCP2551 - это своего рода регулятор уровня напряжения для физического уровня CAN. Имея это в виду, мне интересно, может ли эта установка работать. Я просто хочу записать обмен сообщениями для целей автоматического тестирования, а не быть частью общения:
ПК <-> USB-UART (возможно, CP2102, потому что у меня уже есть) <-> MCP2551 <-> шина CAN
Если нет, то какие сигналы должны поступить в MCP2551, чтобы я стал частью шины?
Я сделал интерфейс USB / CAN, используя FT2232H в режиме MPSSE (забудьте UART), MCP2515 и MCP2551. MCP2515 - это ключевой элемент, который вам здесь не хватает. Изучите хорошо, что это делает. Это фактический контроллер CAN, который выполняет кадрирование, ACK, генерацию и проверку контрольной суммы, фильтрацию сообщений и другие менее очевидные вещи, которые узел CAN должен делать по стандарту. Если вам нужен анализатор, MCP2515 имеет режим прослушивания, который гарантирует отсутствие передачи по шине. MCP2551 - это просто тупой адаптер физического уровня, похожий на MAX232 для RS-232 или ADM485 для RS-485.
Сейчас эта архитектура далека от совершенства, поскольку технология FTDI MPSSE практически не поддерживает прерывания (я полагаю, что она использует только массовые передачи USB за кулисами), поэтому мне приходится часто опрашивать контроллер на наличие новых сообщений. Это создает большую нагрузку на хост-контроллер USB, но, тем не менее, не гарантирует, что никакие сообщения не будут потеряны (MCP2515 может хранить до 2 полученных сообщений внутри, если вы включите «режим переполнения», только одно, если вы этого не сделаете). Гораздо лучшим решением был бы надлежащий микроконтроллер со встроенными периферийными устройствами CAN и USB, такими как STM32F105 (103 не может использовать USB и CAN одновременно). Посмотрите этот проект для рабочей реализации именно этой идеи. LPC18xx, предложенный Стивеном, тоже будет работать, но LPC17xx, вероятно, дешевле и его легче найти.
источник
Поскольку вы хотите прослушивать существующую шину CAN, как я понимаю вопрос, вы действительно не можете использовать UART вообще. CAN и UART siganlling совершенно разные.
Теоретически можно посмотреть на линию приема CAN, выходящую из MCP2551, и декодировать трафик CAN. Это будет нелегко, но теоретически возможно. Без специализированного аппаратного обеспечения CAN вам придется производить выборку в несколько раз быстрее, чем скорость передачи битов CAN, и затем декодировать этот поток битов программным способом. Вам, вероятно, потребуется запись со скоростью около 1 Мбит / с для декодирования 250 кбит / с CAN.
Использование микроконтроллера будет намного проще. PIC 18F2580 и другие подобные процессоры имеют встроенную периферию CAN. Аппаратное обеспечение выполняет декодирование всех битовых уровней и принимает целые кадры CAN. Затем процессор может отправлять полученные кадры CAN через UART на ваш ПК.
источник