MCP2515介绍
Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU 的连接是通过业界标准串行外设接口(Serial Peripheral Interface, SPI)来实现的。
SPI协议模块:
TXCAN:连接到CAN总线的发送输出引脚
RXCAN:连接到CAN总线的接收输入引脚
CLKOUT:带可编程预分频器的时钟输出引脚
mcp251x.c驱动分析
在驱动的probe函数中mcp251x_can_probe进行spi资源的获取,设备的注册
1035:从设备树中获取spi设备资源
1043~1051:获取设备树中设定的时钟
分配can/net设备
struct mcp251x_priv结构如下:
对上述结构体进行赋值,并写入到spi驱动中
1068 net->netdev_ops = &mcp251x_netdev_ops;对Can操作函数进行赋值
mcp251x_netdev_ops:
1071 priv = netdev_priv(net);访问net_device网络设备的私有数据
1072 priv->can.bittiming_const = &mcp251x_bittiming_const;设置can设备的时序参数
can_bittiming_const定义如下
CAN位时间
CAN 总线上的所有器件都必须使用相同的比特率。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。CAN 位时间由互不重叠的时间段组成。 每个时间段又由时间份额 (TQ)组成,在 CAN 规范中,标称比特率 (NominalBit Rate, NBR)定义为在不需要再同步的情况下,理想发送器每秒发送的位数,它可用下面的公式来表示:
标称位时间
标称位时间 (Nominal Bit Time, NBT)(tbit)由互不重叠的段时间段组成(图 5-1) 。因此 NBT 为下列时间段之和:
与 NBT 相关的参数是采样点、同步跳转宽度(Synchronization Jump Width, SJW)和信息处理时间(Information Processing Time, IPT)
同步段 同步段 (SyncSeg)为 NBT 中的首段,用于同步 CAN总线上的各个节点。输入信号的跳变沿就发生在同步段,该段持续时间为 1 TQ。
传播段(PropSeg)用于补偿各节点之间的物理传输延迟时间。传输延迟时
间为信号在总线上传播时间的两倍,包括总线驱动器延迟时间。传播段的长度可编程设定为 1 – 8 TQ。
相位缓冲段 1 (PS1)和相位缓冲段 2 (PS2)两个相位缓冲段 PS1 和 PS2 用于补偿总线上的边沿相位误差。通过再同步,可以延长 PS1 (或缩短 PS2) 。PS1 可编程设定为 1–8 TQ, 而 PS2 可编程设定为 2–8 TQ。
采样点 采样点是位时间内的一个时间点。在该时间点,读取总线电平并进行分析。采样点位于相位缓冲段 PS1 的终点。但当采样模式设置为每位采样 3 次时例外。这种情况下,在 PS1 的终点仍然对某一位进行采样时,前两次的采样时间间隔为TQ/2,而该位的值将根据三个采样值中至少两次采样的相同值决定。
信息处理时间 信息处理时间 (IPT)是确定采样点的位电平值所需要的时间。 IPT 从采样点开始,以 TQ 计量, MicrochipCAN 模块将该时间长度定义为 2 TQ。 PS2 同样开始于采样点,且为位时间的最后一个时间段,因此 PS2 的最小值不能小于 IPT
同步跳转宽度 同步跳转宽度(SJW)可通过编程设定为 1 – 4 TQ,它可对位时钟进行必要的调整来保持与发送报文同步。
时间份额 组成位时间的每个段都由时间份额 (TQ)组成。每个时间份额的长度取决于振荡器周期 (tOSC)。通常 TQ为两个振荡器周期。图 5-2 显示了如何从 TOSC 和 TQ推导出位周期。 TQ 的长度等于一个 TQ 时钟周期(tBRPCLK),利用称为波特率预分频器(BRP)的可编程预分频器对它进行编程设置。以下公式对此进行了阐述: