目前主流的 CAN 协议控制器一般采用 I/O 总线(SJA1000 等)或 SPI 接口(MCP2515 等)与 MCU 进行通信。由于本设计采用 PC/104 总线扩展卡的方式来扩展多个 RS232 和 RS485 接口,没有多余的 I/O 片选线可用,因此最终选用 9200 的 SPI 接口与 MCP2515 进行多路 CAN 总线接口的扩展。
MCP2515 是 Microchip 公司推出的具有 SPI 接口的独立 CAN 控制器:它完全支持 CAN V2.0B 技术规范,通信速率最高可达 1Mbps,内含 3 个发送缓冲器、2 个接收缓冲器、6 个 29 位验收滤波寄存器和 2 个 29 位验收屏蔽寄存器;它的 SPI 接口时钟频率最高可达 10MHz,可满足一个 SPI 主机接口扩展多路 CAN 总线接口的需要。

图 1 MCP2515 的外围 CAN 总线接口框图(省略了 MCP2515 与 9200 的接口部分)
由于设备需要安装在铁路沿线,必须具有防雷击的能力,因此 MCP2515 与 CAN 总线收发器之间采用高速光耦进行完全的电气隔离,并且光耦两端电路的电源也必须用电源隔离模块隔离开,这样才能真正起到隔离的作用。在 TJA1050 的 CANH 和 CANL 引脚与地之间连接 2 个 30pF 的电容,可以过滤 CAN 总线上的高频干扰;2 个二极管可以在总线电压发生瞬变干扰时起保护作用。光耦正常工作时输入电流为 10mA 左右,内部发光二极管的正向电压降为 1.7V 左右,因此要特别注意输入端串联电阻的阻值选择。