Я зробив інтерфейс USB / CAN, використовуючи FT2232H в режимі MPSSE (забудьте UART), MCP2515 та MCP2551. MCP2515 - це ключовий твір, якого вам тут не вистачає. Навчіться добре, що це робить. Це власне контролер CAN, який робить обрамлення, ACK, генерацію і перевірку контрольної суми, фільтрацію повідомлень та інші менш очевидні речі, які потрібно зробити вузлом CAN стандартом. Якщо ви хочете sniffer, MCP2515 має режим лише прослуховування, який гарантує відсутність передач по шині. MCP2551 - це просто тупий адаптер фізичного рівня, подібний до MAX232 для RS-232 або ADM485 для RS-485.
Тепер ця архітектура далеко не досконала, оскільки технологія FTDI MPSSE по суті не підтримує перебоїв (я вважаю, що вона використовує лише масові USB-передачі за кадром), тому мені доводиться часто опитувати контролер на нові повідомлення. Це спричиняє велике навантаження на хост-контролер USB, але все ще не гарантує, що жодне повідомлення не буде втрачено (MCP2515 може зберігати до 2 отриманих повідомлень внутрішньо, якщо ввімкнути "режим переповнення", лише одне, якщо ви цього не зробите). Набагато кращим рішенням буде правильний мікроконтролер із вбудованою CAN та USB периферійними пристроями, такими як STM32F105 (103 не можуть одночасно використовувати USB та CAN). Дивіться у цьому проекті для робочої реалізації саме цієї ідеї. LPC18xx, як пропонує Stevenh, також буде працювати, але LPC17xx, ймовірно, дешевше і простіше знайти.