MCP2502X/5X:CAN I/O 扩展器的详细解析
在嵌入式系统的设计中,CAN(Controller Area Network)总线因其高可靠性、实时性和广泛的应用场景,成为了众多工程师的首选通信协议。而 Microchip 推出的 MCP2502X/5X 系列 CAN I/O 扩展器,为构建简单且高效的 CAN 节点提供了强大的支持。不过需要注意的是,该产品目前已不推荐用于新设计,可考虑使用 MCP2515 或 MCP25625 替代。下面,我将结合自身经验,对这款扩展器进行详细剖析。
文件下载:MCP25025T-I SL.pdf
产品概述
MCP2502X/5X 系列产品主要包括 MCP25020、MCP25025、MCP25050 和 MCP25055 等型号。这些器件能够作为控制器局域网(CAN)系统的 I/O 扩展器,支持 CAN v2.0B 协议,其总线速率最高可达 1 Mb/s。它的一大亮点在于,无需微控制器即可实现简单的 CAN 节点,这大大简化了系统设计。不同型号间仅有一处差异,即 MCP25025 和 MCP25055 支持一线数字 CAN 总线,而 MCP25020 和 MCP25050 则不支持。
产品特性与优势
功能特性
- CAN 协议实现:全面实现 CAN V2.0B 协议,可编程比特率高达 1 Mb/s。具备一个可编程掩码、两个可编程过滤器和三个自动传输缓冲区,能够有效过滤和处理 CAN 消息。同时,两个消息接收缓冲区可确保消息的稳定接收,且无需同步或配置消息,提升了系统的易用性。
- 硬件特性:采用非易失性存储器进行用户配置,上电时可自动加载,方便快捷。拥有八个通用 I/O 线,可单独选择作为输入或输出,还能针对每个输入单独选择引脚变化时的自动传输功能。此外,MCP2505X 器件还具备四个 10 位模拟输入通道,可通过可编程转换时钟和 VREF 源进行灵活配置。该系列产品还支持消息调度功能和两个 10 位 PWM 输出,其频率可独立编程。通过 CAN 总线消息即可修改设备配置,并且支持在线串行编程(ICSP™)默认配置存储器,还可选择一线 CAN 总线操作。
- 低功耗特性:基于低功耗 CMOS 技术,工作电压范围为 2.7V 至 5.5V,典型工作电流仅为 10 mA,在 CAN 睡眠模式下待机电流仅 30 µA,能有效降低系统功耗。
- 封装与温度范围:提供 14 引脚 PDIP(300 mil)和 SOIC(150 mil)封装,可满足不同的应用需求。温度范围支持工业级(-40°C 至 +85°C)和扩展级(-40°C 至 +125°C),具备良好的环境适应性。
实际应用优势
在实际应用中,MCP2502X/5X 的这些特性带来了诸多优势。例如,在汽车电子系统中,其低功耗特性有助于降低整体能耗,延长电池使用寿命;丰富的 I/O 接口和模拟输入通道可方便地连接各种传感器和执行器,实现对车辆状态的实时监测和精确控制。而在工业自动化领域,消息调度功能和自动传输功能能够确保数据的及时准确传输,提高系统的响应速度和可靠性。
CAN 模块详解
核心组成与功能
CAN 模块作为协议控制器,负责在原始数字数据和 CAN 消息包之间进行转换。其主要功能模块包括 CAN 协议引擎、缓冲区、掩码和过滤器。
- 协议引擎:核心为有限状态机(FSM),它按位处理消息,根据不同帧类型的字段进行状态切换,控制 TX/RX 移位寄存器、CRC 寄存器与总线之间的数据传输,同时管理错误处理逻辑,确保消息的接收、仲裁、传输和错误信号处理都严格遵循 CAN 协议,并能自动处理总线消息的重传。
- CRC 校验:CRC 寄存器用于生成 CRC 码,在控制字段或数据字段之后传输,用于对接收消息的 CRC 字段进行校验,保证数据传输的准确性。
- 错误管理逻辑:通过接收错误计数器(REC)和传输错误计数器(TEC)对 CAN 设备的故障进行监控和处理。根据计数器的值,设备可进入错误激活、错误被动或总线关闭状态。当设备进入总线关闭状态后,需接收到包含 128 个连续隐性位的总线关闭恢复序列才能恢复正常,恢复后若总线空闲 128 x 11 位,设备将自动从错误激活状态恢复。通过读取 EFLG 寄存器,可确定设备当前的错误模式(除总线关闭外)。
- 位定时逻辑:通过编程 TQ 长度和各时间段内的 TQ 数量来计算标称位时间。该逻辑监测总线输入,根据 CAN 协议处理总线相关的位定时。在帧起始时进行硬同步,后续在隐性到显性的总线转换时进行重新同步,并提供可编程的时间段以补偿传播延迟和相位偏移,同时确定采样点的位置。
位定时逻辑关键参数
- 时间量子(TQ):TQ 是基于振荡器周期的固定时间单位,通过可编程波特率预分频器(BRP)和固定的二分频生成。其计算公式为 (T{Q}=2 * T{OSC} * (BRP + 1)),标称位时间可在 8 TQ 至 25 TQ 之间可编程,最小标称位时间为 1 µs,对应 1 Mbps 的速率。
- 时间段:标称位时间由同步段(SyncSeg)、传播段(PropSeg)、相位缓冲段 1(PS1)和相位缓冲段 2(PS2)组成。编程时需遵循一定规则,如 (PropSeg + PS1 ≥ PS2)、(PS2 > 同步跳转宽度(SJW))、(PS2 ≥ 信息处理时间(IPT))。同步段用于同步总线上的 CAN 节点,固定为 1 TQ;传播段用于补偿网络中的物理延迟,可在 1 TQ 至 8 TQ 之间编程;相位缓冲段用于优化接收位的采样点位置,PS1 和 PS2 可在 1 TQ 至 8 TQ 之间编程,但 PS2 实际最小长度为 2 TQ。
- 采样点:采样点位于 PS1 结束处,用于读取总线电平并确定接收位的值。可选择在采样点对总线进行多次采样,通过多数表决确定接收位的值。
- 信息处理时间(IPT):IPT 从采样点开始,用于计算后续位电平,CAN 规范规定其小于等于 2 TQ,MCP2502X/5X 中定义为 2 TQ,因此 PS2 长度至少为 2 TQ。
- 同步跳转宽度(SJW):用于补偿系统中节点之间的相位偏移和振荡器公差。当检测到传输数据中的隐性到显性边缘时,根据边缘位置与预期时间的比较,利用可编程的 SJW 调整 PS1 和 PS2 的值,以实现重新同步。SJW 可编程范围为 1 TQ 至 4 TQ。
缓冲区、掩码和过滤器
- 缓冲区:三个传输缓冲区分别用于处理不同的传输消息 ID,两个接收缓冲区用于存储 CAN 消息的仲裁字段、控制字段和数据字段,还有一个消息组装缓冲区(MAB)辅助处理消息,确保在高负载情况下也能有效处理接收消息,减少接收缓冲区溢出的风险。
- 掩码:用于定义 CAN ID 中哪些位需要与可编程过滤器进行比较,掩码中的“1”位表示对应 CAN ID 位需与过滤器位匹配,“0”位则表示该位不参与比较,可视为“无关位”。对于标准 ID 和扩展 ID 的消息,部分掩码位有特殊配置规则。
- 过滤器:包含两个独立的接受过滤器(RXF0 和 RXF1),分别用于信息请求消息和输入消息。每个过滤器的位与 CAN ID 对应,只有当 CAN ID 中与掩码设置位对应的位与过滤器位匹配时,消息才会被接受,否则将被忽略。
设备操作流程
上电序列
MCP2502X/5X 在上电复位(POR)时会经历一系列操作,以确保正确加载配置并避免在总线上引入错误。上电后,设备首先进入配置模式,在此模式下禁止通过 CAN 接口发送或接收消息,ADC 和 PWM 外设也处于禁用状态。随后进行自我配置,将 EPROM 阵列的内容传输到 SRAM 阵列,并比较数据的校验和以验证数据的有效性。自我配置完成后,设备进入监听模式,等待检测到无错误的 CAN 消息,以确保设备与系统的总线速率一致。检测到无错误消息后,设备等待总线空闲,然后切换到正常模式,此时若 ADC 和 PWM 外设已启用,则可正常工作。此外,MCP2505X 可通过用户配置的控制位(OPTREG2.PUNRM)直接进入正常模式,而无需先进入监听模式。设备进入正常模式后,会发送一次“On Bus”消息,通知网络其存在,后续若启用了定时传输功能,该消息将按 STCON 寄存器设定的频率重复发送。
消息处理
- 消息类型:主要包括信息请求消息(IRMs)、输出消息和输入消息。IRMs 由 MCP2502X/5X 接收,可配置为远程传输请求(RTR)或数据帧消息;输出消息是 MCP2502X/5X 对 IRMs 的响应;输入消息用于修改设备寄存器。IRMs 被接收至接收缓冲区 0,输入消息则被接收至接收缓冲区 1。
- 信息请求消息处理:根据 OPTREG2 寄存器中的 MTYPE 位,IRMs 可选择 RTR 或数据帧消息类型。当选择 RTR 消息类型时,系统中的节点需发送符合 MCP2502X/5X 掩码/过滤器规则且 RTR 位设置为“1”的远程帧;当选择数据帧消息类型时,节点发送的信息请求必须满足掩码/过滤器规则且 RTR 位清零,同时消息 ID 的第 3 位需设置为“1”。MCP2502X/5X 接收到请求后,根据消息的最低三位确定要执行的功能,并根据预定义的数据长度代码(DLC)返回相应的数据。
- 输出消息处理:输出消息是对信息请求消息的响应。对于 RTR 消息的响应,输出消息具有相同的标识符和数据字节数;对于数据帧消息的响应,输出消息的标识符的低三位与接收消息相同,标准标识符的高七位或扩展标识符的高 25 位也相同,但第 3 位的值与信息请求消息相反。输出消息的具体数据内容根据不同的消息类型而定。
- 输入消息处理:输入消息用于修改预定义的寄存器组。消息需通过 MCP2502X/5X 的掩码/过滤器处理,标准标识符的低三位指示要写入的寄存器,具体的寄存器值包含在数据字节中。若使用多个控制节点,需对设备进行相应配置,以避免消息冲突。
- 动态消息处理:该设备能够有效处理不同总线负载条件下的收发消息。在消息接受/拒绝方面,符合掩码/过滤器规则的消息将根据其类型进行相应处理;在接收多个消息时,设备一次只能处理一条消息,若第二条消息在第一条消息处理完成前到达,将可能导致消息丢失,但设备可通过配置 TXID1 发送接收溢出消息来通知网络;在发送消息优先级方面,输出消息优先级最高,其次是 TXID2、TXID1 和 TXID0,当多个消息等待发送时,将按照优先级顺序发送。
其他模块功能
GPIO 模块
MCP2502X/5X 拥有八个通用 I/O 引脚(GP0 至 GP7),除 GP7 为输入引脚外,其余引脚均可通过 GPDDR 寄存器单独配置为输入或输出。所有引脚均具有 TTL 输入电平和全 CMOS 输出驱动器,每个引脚还带有一个弱上拉电阻,可通过 OPTREG.GPPU 位进行统一控制。引脚具备多种复用功能,包括模拟输入、模拟 VREF 输入、PWM 输出、时钟输出和外部复位等。此外,该模块还支持数字输入边缘检测功能,通过 IOINTEN 和 IOINTPO 寄存器可对每个引脚进行单独配置,当检测到指定极性的边缘时,将自动发送消息(TXID2)。若在睡眠模式下对应的中断使能位已设置,该功能还可唤醒设备。
PWM 模块
该模块包含两个脉冲宽度调制(PWM)模块(PWM1 和 PWM2),分别在 GP2 和 GP3 引脚产生高达 10 位分辨率的输出信号。每个模块都有独立的使能控制、定时器、占空比和周期寄存器。PWM 输出的频率和占空比可通过编程进行灵活调整,计算公式为 (PWM 周期 = [(PR{n}) + 1] * 4T{OSC} (TMRn 预分频值)) 和 (PWM 占空比 = (PWMnTDC) T_{OSC} * TMRn(预分频))。在设备上电时,PWM 输出默认禁用,直到自我配置完成。若 CAN 总线通信中断且 OPTREG2.PDEFEN 位启用,PWM 输出将恢复到默认状态。
模数转换器(A/D)模块
A/D 模块为四通道、10 位逐次逼近型转换器,可将模拟输入信号转换为 10 位数字值。四个通道通过 GP[3:0] 引脚复用,可通过 ADCON0 寄存器开启或关闭转换器,通过 ADCON1 寄存器单独启用每个通道,并可选择内部或外部的 VREF+ 和 VREF- 源。每个通道可选择自动转换或按需转换模式。在自动转换模式下,转换速率由定时器和预分频器决定;在按需转换模式下,设备仅在接收到“Read A/D Registers”或“Read Register Receive”消息时进行转换。此外,该模块还支持 A/D 阈值检测功能,当转换结果超过或低于预设阈值时,将自动发送消息(TXID2)。
特殊功能与特性
振荡器选择
MCP2502X/5X 提供四种振荡器模式供用户选择,通过编程 CONFIG 寄存器中的 (F{OSC}1: F{OSC}0) 位,可选择低功耗晶体(LP)、晶体/谐振器(XT)、高速晶体谐振器(HS)或外部时钟源模式。在未对 CONFIG 寄存器进行编程时,设备默认采用 HS 模式。
复位功能
设备具备上电复位(POR)和外部 RST 复位两种复位方式。上电复位时,当检测到 VDD 在 1.5V 至 2.1V 范围内上升,会在芯片内生成复位脉冲。外部 RST 输入可通过 GP7 引脚实现,通过串联电阻连接到 VDD 可省去外部 RC 组件。设备内部还设有上电定时器(PWRT)和振荡器启动定时器(OST),PWRT 提供约 72 ms 的固定延迟,确保 VDD 上升到可接受水平;OST 在 PWRT 延迟结束后提供 512 个振荡器周期的延迟,保证晶体振荡器稳定启动。
睡眠模式
睡眠模式可通过 OPTREG2 寄存器中的 SLPEN 位启用。当设备在正常模式下检测到 CAN 总线空闲时间达到至少 1408 位时,将进入睡眠模式。此外,若 PUSLP 位启用,设备在加电后处于监听模式且 CAN 总线无活动时也可进入睡眠模式。在睡眠模式下,I/O 端口保持进入睡眠前的状态,但 A/D 模块数据转换、自动转换模式、自动消息发送、PWM 模块和输出以及时钟输出等功能将暂停。设备可通过外部复位输入、GPIO 引脚的边缘检测或 CAN 总线活动唤醒。
在线串行编程
MCP2502X/5X 支持在线串行编程,通过时钟、数据、电源、地和编程电压这五条线即可实现。在应用电路中,可通过将 GP4 和 GP5 引脚拉低,同时将 GP7(VPP)引脚从 VIL 升高到 VIH,将设备置于编程/验证模式。在此模式下,GP4 作为编程数据输入,GP5 作为编程时钟输入,二者均为施密特触发输入。
电气特性与封装信息
电气特性
- 绝对最大额定值:该设备的工作环境温度范围为 -55°C 至 +125°C,存储温度范围为 -65°C 至 +150°C。各引脚的电压范围、电源电压、功耗、电流等参数均有明确的最大额定值,使用时需严格遵守,以避免对设备造成永久性损坏。
- DC 特性:包括电源电压、电压上升速率、输入/输出电压、电流、电容等参数,不同的振荡器配置和工作模式下,这些参数会有所不同。例如,XT 和 LP 振荡器配置下的电源电压范围为 2.7V 至 5.5V,而 HS 振荡器配置下的电源电压为 4.5V 至 5.5V。
- AC 特性:涉及时钟输入频率、振荡器频率、周期、高/低时间、上升/下降时间、传播延迟等参数,不同的振荡器模式(XT、