我想用我的电脑制作一个 250 kbit/s 的 CAN 总线嗅探器。经过一番研究,我发现MCP2551是 CAN 物理层的某种电压电平调节器。记住这一点,我想知道这个设置是否可行。我只想记录交换的消息以用于自动化测试,而不是通信的一部分:
PC <-> USB-UART(也许是 CP2102,因为我已经有一个)<-> MCP2551 <-> CAN 总线
如果不是,需要什么样的信号进入 MCP2551 才能让我成为总线的一部分?
我想用我的电脑制作一个 250 kbit/s 的 CAN 总线嗅探器。经过一番研究,我发现MCP2551是 CAN 物理层的某种电压电平调节器。记住这一点,我想知道这个设置是否可行。我只想记录交换的消息以用于自动化测试,而不是通信的一部分:
PC <-> USB-UART(也许是 CP2102,因为我已经有一个)<-> MCP2551 <-> CAN 总线
如果不是,需要什么样的信号进入 MCP2551 才能让我成为总线的一部分?
你可以这样做,但你会在你的 CAN 总线上得到使用 CAN 电压电平的 UART。如果您想与总线上的 CAN 设备通信,您必须向 MCP2551 提供 CAN 协议消息。收听也一样:CAN 消息与 UART 格式如此不同,以至于 UART 不知道如何处理它们。您至少会一直遇到帧错误,并且您不会了解消息的内容。
此图显示了 CAN 消息的结构:
周围有很多具有 CAN 接口的微控制器,没有收发器。MCP2551 就是为这些而设计的。过去我们使用 NXP LPC2294,它有 4 个 CAN 接口。他们每个人都需要一个 MCP2551 来连接到 CAN 总线。恩智浦最新的控制器包括LPC1800系列,其中所有成员都支持 CAN。
我在 MPSSE 模式(忘记 UART)、MCP2515和 MCP2551 下使用 FT2232H 制作了 USB/CAN 接口。MCP2515 是您在这里缺少的关键部件。好好研究它的作用。它是真正的 CAN 控制器,它执行帧、ACK、校验和生成和验证、消息过滤以及标准要求 CAN 节点执行的其他不太明显的事情。如果你想要一个嗅探器,MCP2515 有一个只听模式,它保证总线上没有传输。MCP2551 只是一个哑物理层适配器,类似于用于 RS-232 的 MAX232 或用于 RS-485 的 ADM485。
现在这种架构远非完美,因为 FTDI MPSSE 技术基本上不支持中断(我相信它只在幕后使用批量 USB 传输),所以我必须经常轮询控制器以获取新消息。这会给 USB 主机控制器带来大量负载,但仍不能保证不会丢失任何消息(如果启用“溢出模式”,MCP2515 最多可以在内部存储 2 条接收到的消息,如果不启用,则只能存储一条)。更好的解决方案是具有内置 CAN 和 USB 外设(例如 STM32F105)的适当微控制器(103 不能同时使用 USB 和 CAN)。请参阅此项目以了解此想法的工作实施。stevenh 建议的 LPC18xx 也可以,但 LPC17xx 可能更便宜且更容易找到。
因为我理解这个问题,你想在现有的 CAN 总线上监听,所以你根本不能使用 UART。CAN和UART信号完全不同。
理论上,您可以查看从 MCP2551 出来的 CAN 接收线并解码 CAN 流量。这并不容易,但理论上是可能的。如果没有专门的 CAN 硬件,您必须以比 CAN 比特率快几倍的速度进行采样,然后在软件中解码该比特流。您可能需要以大约 1 Mbit/s 的速度记录才能解码 250 kbit/s CAN。
使用微控制器会容易得多。PIC 18F2580 和其他类似处理器具有内置的 CAN 外设。硬件完成所有位级解码并接收整个 CAN 帧。然后,处理器可以通过其 UART 将接收到的 CAN 帧发送到您的 PC。