Saya ingin membuat sniffer bus CAN untuk 250 kbit / s menggunakan komputer saya. Setelah beberapa penelitian saya menemukan bahwa MCP2551 adalah semacam regulator level tegangan untuk lapisan fisik CAN. Dengan mengingat hal itu, saya ingin tahu apakah pengaturan ini dapat berfungsi. Saya hanya ingin merekam pesan yang dipertukarkan untuk tujuan pengujian otomatis, bukan menjadi bagian dari komunikasi:
PC <-> USB-UART (mungkin CP2102, bacause saya sudah memilikinya) <-> MCP2551 <-> BISA bus
Jika tidak, sinyal apa yang harus masuk MCP2551 untuk membuat saya menjadi bagian dari bus?
Saya telah membuat antarmuka USB / CAN menggunakan FT2232H dalam mode MPSSE (lupa UART), MCP2515 dan MCP2551. MCP2515 adalah bagian kunci yang Anda lewatkan di sini. Pelajarilah dengan baik apa yang dilakukannya. Ini adalah pengontrol CAN yang sebenarnya yang melakukan pembingkaian, ACK, pembuatan checksum dan verifikasi, pemfilteran pesan dan hal-hal lain yang kurang jelas yang harus dilakukan oleh node CAN oleh standar. Jika Anda menginginkan sniffer, MCP2515 memiliki mode hanya mendengarkan yang tidak menjamin transmisi di bus. MCP2551 hanyalah sebuah adaptor lapisan fisik yang bodoh, mirip dengan MAX232 untuk RS-232 atau ADM485 untuk RS-485.
Sekarang arsitektur ini jauh dari sempurna karena teknologi FTDI MPSSE pada dasarnya tidak memiliki dukungan untuk interupsi (saya percaya ini hanya menggunakan transfer USB massal di belakang layar), jadi saya harus sering polling controller untuk pesan baru. Ini menempatkan banyak beban pada pengontrol host USB tetapi masih tidak menjamin bahwa tidak ada pesan yang hilang (MCP2515 dapat menyimpan hingga 2 pesan yang diterima secara internal jika Anda mengaktifkan "mode overflow", hanya satu jika Anda tidak). Solusi yang jauh lebih baik adalah mikrokontroler yang tepat dengan builtin CAN dan periferal USB seperti STM32F105 (103 tidak dapat menggunakan USB dan CAN pada saat yang sama). Lihat proyek ini untuk implementasi yang tepat dari ide ini. LPC18xx seperti yang disarankan oleh stevenh akan bekerja juga, tetapi LPC17xx mungkin lebih murah dan lebih mudah ditemukan.
sumber
Karena Anda ingin mendengarkan bus CAN yang ada saat saya memahami pertanyaannya, Anda benar-benar tidak dapat menggunakan UART sama sekali. Siganlling CAN dan UART benar-benar berbeda.
Secara teori Anda bisa melihat garis CAN CAN yang keluar dari MCP2551 dan mendekode lalu lintas CAN. Itu tidak akan mudah, tetapi secara teori dimungkinkan. Tanpa perangkat keras CAN khusus, Anda harus mengambil sampel beberapa kali lebih cepat daripada bit rate CAN dan mendekode bit stream tersebut dalam perangkat lunak nanti. Anda mungkin perlu merekam sekitar 1 Mbit / s untuk memecahkan kode 250 kbit / s CAN.
Menggunakan mikrokontroler akan jauh lebih mudah. PIC 18F2580 dan prosesor serupa lainnya memiliki perangkat CAN bawaan. Perangkat keras melakukan semua decoding level bit dan menerima seluruh frame CAN. Prosesor kemudian dapat mengirimkan frame CAN yang diterima melalui UART-nya ke PC Anda.
sumber