了解SPI总线CAN控制器 MCP2515配置 一文即可

这篇具有很好参考价值的文章主要介绍了了解SPI总线CAN控制器 MCP2515配置 一文即可。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1.引言

最近工作中遇到需要6路CAN通信的情况,单片机自带的4路已不满足实际需求,故采用了SPI总线的CAN控制器芯片MCP2515,通过SPI通信的CAN扩展芯片最高可实现1Mbps的遵循CAN 2.0B的协议通信,配置起来也比较繁琐,故写诞生了这篇文章。本篇中仅对基础功能进行测试,如有疑问可留言交流或自行查看芯片手册。

了解SPI总线CAN控制器 MCP2515配置 一文即可

   2.硬件连接

由于该芯片主要起到SPI转CAN控制器的效果,还需搭配CAN收发器才能进行正常的CAN通信,这里采用的是一款国产芯片,川土微电子公司的IF1042VS,也可选用其他收发器,保证畅通即可。

了解SPI总线CAN控制器 MCP2515配置 一文即可

了解SPI总线CAN控制器 MCP2515配置 一文即可

 3.芯片详情

3.1 SPI接口

MCP2515支持最高10MHz的SPI通信,可直接与微控制器上的SPI外设连接,并支持模式0模式3,遵从SPI协议,可通过CS引脚片选的下拉开启通信;同时应注意,在传输另一个指令前应将片选置高后再拉低。

了解SPI总线CAN控制器 MCP2515配置 一文即可

3.2 工作模式

MCP2515有5种工作模式,可通过CANCTRL寄存器的REQOP设置所需模式,要注意直到所有挂起的消息传输完成后,模式才会实际更改。通过CANSTAT寄存器的OPMODE可读取当前模式,建议在模式更改后再读取一下CANSTAT寄存器,以保证写入成功并进入预定模式。

了解SPI总线CAN控制器 MCP2515配置 一文即可

了解SPI总线CAN控制器 MCP2515配置 一文即可

1)配置模式:芯片在激活前必须首先进行初始化。上电、使用RESET引脚,或更改CANCTRL寄存器的REQOP<2.0>等均可进入配置模式,以下寄存器只有在配置模式下才能被更改。

标号 名称 功能
1 CNF1, CNF2, CNF3 波特率配置
2 TXRTSCTRL 发送引脚配置
3 Filter registers 过滤器配置
4 Mask registers 掩码配置

2)睡眠模式:MCP2515具有内部睡眠模式,用于最大限度地减少设备的当前消耗。即使MCP2515处于睡眠模式,SPI接口也会保持活动状态以便读取。更改CANCTRL寄存器可进入睡眠模式,在写入寄存器后应进行读取,以确保芯片进入睡眠模式。

>>睡眠唤醒:睡眠模式下,可通过CAN总线唤醒或通过SPI切换模式。通常情况下,CAN总线唤醒为常见用法,需要配置CANINTE寄存器开启唤醒中断,当接收到RXCAN引脚上的电平变化,导致从睡眠模式唤醒的报文及在唤醒中接收到的报文将被忽略,同时芯片被唤醒,INT引脚能捕捉到下降沿跳变,MCP2515会自动进入仅监听模式,此时应手动设置芯片为正常模式。

3)仅监听模式:仅监听模式使MCP2515 可以接收包括错误报文在内的所有报文。这种模式可用于总线监视应用或热插拔状况下的波特率检测。

4)环回模式:环回模式允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过 CAN 总线。此模式可用于系统开发和测试。

5)正常模式:该模式为 MCP2515 的标准工作模式。器件处于此模式下,会主动监视总线上的所有报文,并产生确认位和错误帧等。只有在正常模式下,MCP2515才能在 CAN总线上进行报文的传输。

3.3 操作指令

在MCP2515中,SPI发送的首个字节即为操作指令,下图为操作指令集。

了解SPI总线CAN控制器 MCP2515配置 一文即可

1)复位指令:重置寄存器初始化,使得芯片进入配置模式;建议在初始化的第一步执行本指令

2)读指令:将CS引脚拉低后,向MCP2515依次发送读指令和 8 位地址码, MCP2515 会将指定地址寄存器中的数据通过 SO引脚移出。每一数据字节移出后,器件内部的地址指针将自动加一以指向下一个地址。因此,通过持续提供时钟脉冲,可以对下一个连续地址寄存器进行读操作。通过该方法可以顺序读取任意个连续地址寄存器中的数据。通过拉高CS引脚电平可以结束读操作。

了解SPI总线CAN控制器 MCP2515配置 一文即可

 3)读接收缓冲区指令:读取接收信息的常用指令,与读指令相比,省略了一个字节的地址位,同时会在CS引脚拉高后自动清零接收标志位(CANINTF.RXnIF),不用手动执行清零指令,强烈建议在读取接收缓冲区数据时使用本指令

了解SPI总线CAN控制器 MCP2515配置 一文即可

 4)写指令:将CS引脚拉低后,向MCP2515依次发送写指令、地址码和至少一个字节的数据(如果是多个数据,其地址是连续的)。

了解SPI总线CAN控制器 MCP2515配置 一文即可

 5)装载发送缓冲区指令:和读取接收缓冲区类似,该指令也省略了一个字节的地址位,可以更快速的写入发送帧的标志ID、拓展ID、DLC和数据帧,同样强烈建议使用该指令装载发送帧

了解SPI总线CAN控制器 MCP2515配置 一文即可

 6)请求发送指令:使用RTS命令可以启动一个或多个发送缓冲器的报文发送,该命令的bit3-bit0显示了哪些发送缓冲器被使能发送,该命令会将缓冲器对应的TxBnCTRL.TXREQ 位置1;如果发送的RTS命令中nnn =000,将忽略该命令。

了解SPI总线CAN控制器 MCP2515配置 一文即可

7)位操作指令:该指令允许对寄存器的指定位进行置“1”或清零操作,在片选拉低后,以此发送位操作指令、寄存器地址、掩码和数据码,其中掩码位为“1”的允许进行更改,“0”则不允许更改;对于允许更改的位,数据码即为寄存器将被修改的目标码。举例如下:

了解SPI总线CAN控制器 MCP2515配置 一文即可

 >>注意:并非所有寄存器均支持位操作指令,只有标灰色的寄存器可进行位操作。

了解SPI总线CAN控制器 MCP2515配置 一文即可

 8)读状态指令:读状态指令允许单条指令访问常用的报文接收和发送状态位

了解SPI总线CAN控制器 MCP2515配置 一文即可

9)RX状态指令:RX 状态指令用于快速确定与报文和报文类型(标准帧、扩展帧或远程帧)相匹配的过滤器。命令字节发送后,控制器会返回包含状态信息的 8 位数据。

了解SPI总线CAN控制器 MCP2515配置 一文即可

3.4 错误检测

 MCP2515遵循了了CAN协议的错误检测机制,以下将分别展开:

1)CRC校验错误:使用循环冗余校验(CRC),发送器为从帧开始到数据字段结束的位序列计算特殊校验位。这个CRC序列在CRC字段中传输,接收节点也使用相同的公式计算CRC序列,并与接收到的序列进行比较。如果检测到不匹配,则发生CRC错误并生成错误帧,并重复发送。

2)ACK应答错误:在消息的ACK字段中,发送器检查其中是否包含显性位。如果没有,则认为没有其他节点正确接收到该帧。已发生确认错误,将生成错误帧,并重复发送。

3)格式错误:如果节点在四个段,包括帧结束、帧间空间、确认分隔符或CRC分隔符中的一个段检测到主导位,则发生格式错误并生成错误帧,并重复发送。

4)位错误:如果发送器检测到与其发送的相反的位电平(即,发送显性并检测到隐性,或发送隐性并检测到显性),则发生位错误。

>>例外情况:在仲裁字段和确认槽中,如果发送方发送隐性位,检测到显性位,则不会产生误码,因为正在进行正常仲裁。

5)填充错误:如果在帧开始和CRC分隔符之间检测到6个具有相同极性的连续位,则违反了位填充规则。发生一个填充错误并生成一个错误帧,并重复发送。

3.4.1 错误状态:

检测到的错误通过错误帧通知给所有其他节点,错误消息的传输被终止,报文帧被尽快重复。根据内部错误计数器的值,MCP2515包含两个错误计数器:接收错误计数器(REC)和发送错误计数器(TEC),这些计数器根据CAN总线规范递增/递减。每个CAN节点处于三种错误状态中的一种:

1. Error-active:节点可以不受任何限制地传输消息和活动错误帧(由主导位组成)的通常状态

    如果两个错误计数器都低于128,则MCP2515为Error-active

2. Error-passive:可以传输消息和被动错误帧(由隐性位组成)

    如果至少有一个错误计数器等于或超过128,则为Error-passive

3. Bus-off(发送方):消息既不能接收也不能发送

    如果TEC超过255的总线关闭限制,它将进入总线关闭。设备保持这种状态,直到接收到        总线断开恢复序列。总线断开恢复序列由128个连续的11位隐性位组成

MCP2515的当前错误模式可以由MCU通过EFLG寄存器读取,此外,如果至少有一个错误计数器等于或超过错误警告限制96,则设置错误状态警告标志位(EFLG:EWARN)。如果两个错误计数器都小于错误警告限制,则复位EWARN。

了解SPI总线CAN控制器 MCP2515配置 一文即可

4.初始化配置

4.1 复位

MCP2515上电时自动复位,但手册中建议在初始化之前进行复位操作,可通过两种方法进行复位:1)硬件复位拉低RESET引脚;2)软件复位:执行SPI复位指令

博主这里复位后分别读取了CANCTRL和 CANSTAT寄存器,在复位并进入配置模式时,CANCTRL为0x87,CANSTAT为0x80。两个寄存器的位定义如下:

了解SPI总线CAN控制器 MCP2515配置 一文即可

了解SPI总线CAN控制器 MCP2515配置 一文即可

 4.2 波特率设置

 CAN在通信时,总线上的波特率必须保持一致,MCP2515使用数字锁相环DPLL,将每个位时间分解成由最小时间周期组成的多个段,这个最小时间周期称为时间量(TQ),改变CNF1、CNF2、CNF3寄存器,可以达到设定波特率的目的,其中Normal Bit Rate为通用比特率,以下简称NBR。


了解SPI总线CAN控制器 MCP2515配置 一文即可

,,,

了解SPI总线CAN控制器 MCP2515配置 一文即可

且需要满足以下条件:

了解SPI总线CAN控制器 MCP2515配置 一文即可, 了解SPI总线CAN控制器 MCP2515配置 一文即可

通过以上参数可知,结合电路中的晶振频率为8MHz,且位时间大于等于5个TQ,因此这里给出在500kbps下的波特率配置参数:SyncSeg = 1TQ,PropSeg = 2TQ,PS1 = 3TQ,PS2 = 2TQ,BPR = 0,SJW = 0。相关配置寄存器如下:

了解SPI总线CAN控制器 MCP2515配置 一文即可

了解SPI总线CAN控制器 MCP2515配置 一文即可

了解SPI总线CAN控制器 MCP2515配置 一文即可

4.3 发送配置

 在MCP2515中,共有3个可配置优先级的发送缓冲区(注意次优先级是芯片内部发送的优先顺序,与CAN总线仲裁优先级应进行区分),在初始化时应至少配置所需缓冲区的发送优先级、CAN-ID和数据帧长度DLC,这里给出一种配置方式。

>>TXRTSCTRL :使能/失能TXnRTS引脚的下降沿发送请求

>>TXBnCTRL :配置发送缓冲区发送优先级

>>TXBnDLC:配置远程帧或数据帧及帧长度

>>使用装载缓冲区指令或通过TXBnSIDH、TXBnSIDL、TXBnEID8、TXBnEID0、                    TXBnDm寄存器写入写入CAN-ID、数据帧

>>翻转TXnRTS引脚或使用RTS请求发送指令

其中,n为0-2分别对应3个发送缓冲区,m为0-7分别对应8个字节的数据帧

 4.4 接收配置

在MCP2515中,有两个完整的接收缓冲区RXB0和RXB1,和一个独立的消息装载缓冲区MAB,在收到报文后首先会进入MAB,在满足过滤器条件后才允许进入RXB0或RXB1。

1)优先级及过滤器

RXB0是拥有更高优先级的接收缓冲区,具有一个掩码和两个过滤器;RXB1为较低优先级接收,具有一个掩码和四个过滤器。要启用RXB0的滤波器必须将RXB0CTRL.BUKT位置“1”,此时滤波器0-1对于RXB0是可用的;在RXB0CTRL.BUKT位置“1”的状态下,滤波器0-5对于RXB1是可用的,在RXB0CTRL.BUKT位置“0”的状态下,滤波器2-5对于RXB1是可用的,而RXB0无对应滤波器可供使用。

对于RXBnCTRL寄存器,还可设置RXM <1:0>位选择缓冲区接收的CAN-ID是否允许标准id和扩展id的通过,配合掩码和过滤器可进行更加详细的筛选。掩码和过滤器的真值表如下:

掩码位 过滤器位 报文ID位 接收或拒绝该位
0 X X 接收
1 0 0 接收
1 0 1 拒绝
1 1 0 拒绝
1 1 1 接收

2 )接收标志

当消息被移动到任何一个接收缓冲区时,相应的CANINTF.RXnIF位被置“1”。为了允许新的消息被接收到缓冲区,这个位必须被程序手动清除。这个位提供了一个正向的锁定,以确保在MCP2515尝试将一个新消息加载到接收缓冲区之前,咱们的微控制器已经完成了消息处理。

如果CANINTE.RXnIE位置“1”后,将在INT引脚上产生一个中断,以指示已接收到有效消息。此外,如果配置为接收缓冲区满引脚,相关的RXnBF引脚产生低电平,可以在单片机把连接RXnBF引脚的GPIO设置为下降沿触发的外部中断,在收到报文后,将数据帧转移到fifo中,再将标志位CANINTF.RXnIF位清零。

3)配置样例

综上所述,在实际工程中,接收缓冲区RXB0应具有过滤器功能,这里给出配置方式:

>>BFPCTRL:RXBn接收信息可通过 RXnBF 引脚的下降沿获取

>>RXBnCTRL:可接受满足过滤器的标准id和拓展id,BUKT置“1”允许RXB0使用过滤器0-1

>>配置掩码相关寄存器RXMnSIDH、RXMnSIDL、RXMnEID8、RXMnEID0

其中,n为0-1分别对应2个接收缓冲区的掩码,一一对应

>>配置过滤器相关寄存器RXFnSIDH、RXFnSIDL、RXFnEID8、RXFnEID0

其中,n为0-5分别对应6个过滤器

 4.5 中断配置

MCP2515有八个中断源,八个中断源分别为3个发送中断,2个接收中断,1个消息错误中断,1个总线活动中断,一个错误中断。CANINTE寄存器包含了使能各中断源的中断使能位。CANINTF寄存器包含了各中断源的中断标志位。当发生中断时, INT 引脚将被MCP2515拉为低电平, 并保持低电平状态直至MCU清除中断。注意:中断只有在引起相应中断的条件消失后,才会被清除。

在3.2工作模式内提到过睡眠模式和总线唤醒,需要将CANINTE.WAKIE初始化为1;接收中断开启后,可以代替RX0BF和RX1BF引脚,节省两个I/O资源;同时,为实时反馈CAN总线上的错误情况,需要将错误中断使能;实际使用中,可以配置INT引脚为外部中断,在触发后读取CANINTF寄存器查询当前中断源,再进行进一步处理。配置如下:

>>CANINTE:使能中断

>>CANINTF:清零中断标志文章来源地址https://www.toymoban.com/news/detail-461008.html

到了这里,关于了解SPI总线CAN控制器 MCP2515配置 一文即可的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

    随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口(SPI)是一种常见且重要的通信协议。为了更便捷地配置和使用SPI,STMicroelectronics提供了一款强大的工具——STM32 CubeMX。本文将着重介绍STM32 CubeMX中SPI的层次结构

    2024年02月20日
    浏览(27)
  • CAN学习笔记3:STM32 CAN控制器介绍

    STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 波特率最高可达1M bps 支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时

    2024年02月15日
    浏览(37)
  • 基于 RK3399+fpga 的 VME 总线控制器设计(一)总体设计

    2.1 需求分析及技术指标 2.1.1 需求分析 VME 总线控制器需要实现数据传输、中断处理、测量显示等功能。同时还需 要具有操作系统、底层驱动程序以及功能接口等,以方便用户进行上层应用软件开 发及使用。 本课题需要实现 VME 控制器的国产化开发,因此需要选择一款国产处

    2024年02月14日
    浏览(34)
  • 12.5在Linux中编写队列模式的SPI控制器驱动

    在Linux内核中更加推荐使用队列模式的SPI控制器驱动,而且队列模式的SPI控制器驱动也更加简单,只需要在驱动中实现单个spi_transfer的传输即可,将spi_message拆解为spi_transfer、片选GPIO控制、统计信息更新等均由SPI核心去完成。 实现设置SPI总线的函数setup,用于设置SPI总线,若

    2024年01月20日
    浏览(36)
  • Autosar CAN开发11-1(CAN控制器相关参数,位时间、Tq、采样点等)

            生活不易,猫咪叹气。好久没更新,距离上次更新已经是快半年前了。毕业到现在,已经在这家公司呆了快2年了。快的话一个月,慢的话两个月,马上就是提桶的日子了。                            说回我们的正题。                 平时在工作上,对于通

    2024年02月03日
    浏览(28)
  • 基于 RK3399+fpga 的 VME 总线控制器设计(二)硬件和FPGA逻辑设计

    3.2 FPGA 最小系统设计 FPGA 最小系统是指可以使 FPGA 正常工作的最基本的系统,主要包括电源电 路、配置电路、时钟和复位电路。本次设计使用的 FPGA 为紫光同创的 PG2L100H, 接下来具体介绍 FPGA 最小系统各个部分的电路设计。 ( 1 )电源电路设计 FPGA 所需要的电源电压有 3.3V

    2024年02月12日
    浏览(38)
  • 控制器局域网(CAN)物理层调试的基础知识和实例分析

    控制器局域网的概念 控制器局域网是国际上应用最广泛的现场总线之一。CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。

    2024年02月07日
    浏览(34)
  • Autosar BSW层CAN控制器相关参数------11(物理层。位时间、Tq、采样点等)

            生活不易,猫咪叹气。好久没更新,距离上次更新已经是快半年前了。毕业到现在,已经在这家公司呆了快2年了。快的话一个月,慢的话两个月,马上就是提桶的日子了。                            说回我们的正题。                 平时在工作上,对于通

    2024年02月10日
    浏览(32)
  • 探索计算机的I/O控制方式:了解DMA控制器的作用与优势

    在前面我们已经了解到,每个设备都配备了一个设备控制器。当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作。然而,尽管设备控制器会更新状态寄存器的状态,但是如何将这些信息传达给CPU呢? 在设备控制器的寄存器中,通常会有一个状

    2024年02月09日
    浏览(33)
  • [足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator

    本文仅供学习使用 本文参考: B站:DR_CAN 线性控制器设计- 轨迹跟踪(Fellow a Desired Path)

    2024年02月02日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包