单片机学习小组
登录
直播中
听风说梦
9年用户
893经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信
关注
MCP2515协议控制器与MCU的连接是如何实现的
开启该帖子的消息推送
MCP2515
控制器
MCP2515是什么?
MCP2515协议控制器有何功能?
MCP2515协议控制器与MCU的连接是如何实现的?
回帖
(1)
张晶
2022-2-11 14:52:06
1 简介
:
MCP2515 是一款独立控制器局域网络(Controller Area Network,
CAN
)协议控制器,完全支持 CAN
V2.0B
技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以
过滤
掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU 的连接是通过业界标准串行外设接口(SearialPeripheral Interface,
SPI
)来实现的。
2 数据发送:
>>器件有三个引脚----TX0
RTS
/TX1RTS/TX2RTS用来启动将装载在三个发送缓冲器之一中的报文立即发送出去。是否使用这些引脚由用户决定;若不使用,也可利用
控制寄存器
(通过SPI接口访问)来启动报文发送---------三个
RTS引脚可以不用
。
>>报文
发送
时,首先将报文装载到正确的
报文缓冲器
和控制寄存器中。通过SPI接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作------常用
SPI启动发送
。
---正常情况下,如果 CAN 报文仲裁失败或被错误帧损坏,报文会尝试
再
次发送
。
3 数据接收:
>>器件上有一个
多用途中断
引脚及各
接收缓冲器
的
专用中断引脚
,用于指示有效报文是否被接收并载入接收缓冲器。可选择使用
专用
中断引脚。
通用
中断引脚和
状态
寄存器(通过SPI接口访问)也可用来确定何时接收了有效报文------为了减少引脚的使用,先使用通用中断引脚
检测中断的发生
,再通过读状态寄存器判断是
何种类型
的中断。
>>通过读取相应的寄存器可以检查通讯状态和错误。会对在CAN总线上
检测到
的任何报文进行错误检查,然后与用户定义的
滤波器进行匹配
,以确定是否将报文移到两个接收缓冲器中的一个。
4 CAN报文帧
:
(1)
标准数据帧
CAN标准数据帧与其他所有帧一样,帧以起始帧 (
SOF
)位开始,SOF 为显性状态,允许所有节点的硬同步。
SOF之后是
仲裁字段
, 由12个位组成, 分别为11个
标识位
和一个远程发送请求(Remote TransmissionRequest,
RTR
)位。RTR 位用于区分报文是数据帧
(RTR 位为
显性
状态)还是远程帧 (RTR 位为
隐性
状态)。
仲裁字段之后是
控制字段
,由6个位组成。控制字段的第一位为标识扩展(Identifier Extension,
IDE
)位,该位应是
显性
状态来指定
标准帧
。标识扩展位的下一位为零保留位(
RB0
) ,CAN 协议将其定义为
显性
位。控制字段的其余 4位为
数据
长度
码
(Data Length Code,DLC),用来指定报文中包含的数据字节数 (0 到 8 字节) 。
控制字段之后为
数据字段
,包含要发送的任何数据字节。数据字段长度由上述 DLC 定义 (0到 8 字节)。
数据字段之后为循环冗余校验(
CRC
)字段,用来检测报文传输错误。CRC字段包含一个15位的CRC序列,之后是隐性的 CRC定界位。
最后一个字段是确认字段(
ACK
),由2 个位组成。在确认时隙(ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
最后是
帧结尾
-------每一个数据帧和远程帧均由一标志序列界定。这个标志序列由
7 个“隐性”
位组成。
>>数据帧由
7 个
不同的位场组成。
(2)
扩展数据帧
在扩展 CAN数据帧中(如图 2-2 所示),紧随
SOF
位的是 32 位的仲裁字段。仲裁字段的前 11 位为 29 位标识符的最高有效位(Most Significant bit,
MSb
) (基本lD)。紧随这 11 位的是替代远程请求(SubstituteRemote Request,
SRR
)位,定义为隐性状态。SRR位之后是
IDE
位,该位为
隐性状态
时表示这是
扩展
的CAN帧。
应该注意的是, 如果发送完扩展帧标识符的前11位后,总线仲裁无果,而此时其中一个等待仲裁的节点发出标准CAN数据帧(11 位标识符),那么,由于节点发出了显性 lDE 位而使标准 CAN 帧赢得总线仲裁。另外,扩展 CAN 帧的SRR位应为
隐性
,以允许正在发送标准CAN 远程帧的节点发出
显性 RTR
位。
SRR和lDE位之后是标识符的其余18位(
扩展lD
) 及一个远程发送请求位。
为使标准帧和扩展帧都能在共享网络上发送,应将29位扩展报文标识符拆成高11 位和低 18 位两部分。拆分后可确保lDE位在标准数据帧和扩展数据帧中的位置保持一致。
仲裁字段之后是6位控制字段。控制字段前两位为
保留位
,必须定义为显性位---
与标准数据帧相同
。其余4 位为
DLC
,用来指定报文中包含的数据字节数。
扩展数据帧的
其他部分
(数据字段、CRC 字段、确认字段、帧结尾和间断)与标准数据帧的
结构相同
。
(3)
远程帧
----
请求数据
帧
通常,数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在
目标节点向源节点请求发送数据
的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。
远程帧与数据帧存在
两点不同
:
1)远程帧的
RTR
位为隐性状态;
2)远程帧没有
数据
字段。
当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。
>>远程帧由
6个不同的位场
组成---
没有数据帧
:
帧起始、仲裁场、控制场、CRC 场、应答场、帧末尾。
(4)
错误帧
>>由
两个位场
组成。第一个场用作为不同站提供的错误标志(ERROR FLAG)的
叠加
。第二个场是
错误界定符(含 8 个隐性位)
。
>>有
两种形式
的错误标志,
主动错误
标志(Active error flag)和
被动错误
标志(Passive error flag)。主动错误标志由 6个连续的“显性”位组成。被动错误标志由6个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。
(5)
过载帧:
过载帧包括
两个位场
:过载标志和过载界定符。
有两种过载条件都会导致过载标志的传送:
1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。
2. 间歇场期间检测到一“显性”位。
由过载条件 1 而引发的过载帧只允许起始于所期望的间歇场的第一个位时间开始。而由过载条件 2 引发的过载帧应起始于所检测到“显性”位之后的位。通常为了
延时
下一个数据帧或远程帧,两个过载帧都会产生。
>>过载标志由6个显性位组成--------------
所有形式和主动错误标志的一样
。
>>过载界定符包括8个隐性位----过载界定符的
形式和错误界定符的
形式一样
。
(6)
帧间间隔
:
帧间间隔将前一条帧(无论何种类型)与其后的数据帧或远程帧间隔开。帧间间隔
至少
由
3 个隐性位
构成,又称为间断。间断使节点在发送下一条报文之前有时间进行内部处理。在间断之后,CAN 总线将保持
隐性状态--总线空闲
,直至下一条报文开始发送。
5 位定时与波特率
:
CAN总线上的所有节点都必须具有相同的
标称比特率
。
CAN协议采用
不归零
(Non Return to Zero,NRZ)编码方式,在数据流中不对时钟信号进行编码。因此,接收时钟信号必须由接收节点恢复并与发送器的时钟
同步
。
由于不同节点的振荡器频率和传输时间不同,接收器应具有某种能与数据传输边沿同步的
锁相环
(Phase LockLoop,PLL)来同步时钟并保持这种同步。鉴于数据采用
NRZ
编码,有必要进行位填充以确保至少每 6 位时间发生一次边沿,使数字锁相环(Digital Phase LockLoop,DPLL)同步。
波特率
:
CAN 总线上的所有器件都
必须使用相同的比特率
。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波
特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。
求波特率过程
:配置
CNF1
得到
TQ
à配置
CNF2/3
得到
t
bit
à求倒数得到
波特率
。
位时间
:
CAN位时间由
互不重叠的
时间段
组成。 每个时间段又由时间份额(TQ)组成,在 CAN 规范中,标称
比特率
(NominalBit Rate,NBR)定义为在不需要再同步的情况下,理想发送器每秒发送的位数。
标称
比特率
:
NBR
----
标称
位时间
:
NBT
----
TQ
时间份额
:TQ = 2 x (BRP + 1)/FOSC
位时间各段如下:(与NBT四段对应)
其中同步段
固定
为1TQ,其他三段为
可编程
的。
------------------------
6 电气特性
:
显性电平对应逻辑 0,CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1,CAN_H 和 CAN_L 之差为 0V。在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN 总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
CAN技术标准
:
CAN协议经过ISO标准化后有两个标准: ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
7 工作模式
:
>>
利用CANCTRL. REQOP位可进行工作模式的
选择
。
>>
改变工作模式时,新的工作模式须等到所有当前报文发送完毕
之后
才生效
。
>>
必须通过读取CANSTAT.OPMODE位来
验证
新的工作模式。
(1)
配置模式:
MCP2515 在正常运行之前必须进行
初始化
。只有在配置模式下,才能对器件进行初始化。在上电或复位时,器件会
自动进入
配置模式, CANTRL.
REQOP
<2:0>
位设置成“100”也可使器件从任何模式进入配置模式。
(2)
休眠模式:
MCP2515 具有内部休眠模式,使器件功耗最少。即使MCP2515处于休眠模式,SPI接口仍然保持正常的读操作,以允许访问器件内的所有寄存器。
(3)
仅监听模式:
仅监听模式使MCP2515 可以接收包括错误报文在内的所有报文。这种模式可用于总线监视应用或热插拔状况下的波特率检测。
(4)
环回模式:
环回模式允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过 CAN 总线。此模式可用于系统开发和测试。
(5)
正常模式:
该模式为 MCP2515 的标准工作模式。器件处于此模式下,会主动监视总线上的所有报文,并产生确认位和错误帧等。只有在正常模式下,MCP2515才能在 CAN总线上进行报文的传输。
8 SPI指令集
:
---------通过SPI接口
直接写指令
即可,比如通过指令
复位
。
--------只有一种模式(即相当于STM32中的
屏蔽位模式
)。
--------过滤器与屏蔽器是
配合使用
的,不是单独使用的。
--------缓冲器+过滤器+屏蔽器à报文ID必须至少与一个过滤器
匹配
,即与过滤器中一些位(对应屏蔽器中为1的位)完全相同。
--------两个组合:
组合一:缓冲器1+屏蔽器1+过滤器1/2。
组合二:缓冲器2+屏蔽器2+过滤器3/4/5/6。
--------过滤器与缓冲器都是4Bytes,分别是
SIDH/SIDL/EID8/EID0
。
10 中断
:
MCP2515有
八个中断源
。
CANINTE
寄存器包含了使能各中断源的中断使能位。
CANINTF
寄存器包含了各中断源的中断标志位。当发生中断时, INT 引脚将被
MCP2515拉为低电平, 并保持低电平状态直至MCU清除中断。中断只有在引起相应中断的条件消失后,才会被清除。
建议在对 CANINTF 寄存器中的标志位进行复位操作时,采用
位修改命令
而不要使用一般的写操作。这是为了避免在写命令执行过程中无意间修改了标志位,进而导致中断丢失。应该注意的是,CANINTF中的中断标志位是
可读写位
,因此在相关 CANINTE 中断使能位置 1 的前提下,对上述任一位置 1均可使 MCU产生中断请求。
----
CANINTE
使能
与
CANINTF
标志
都是8位,并且各位是
一一对应
的。
11 寄存器简介
:
BFPCTRL---RXnBF
引脚
控制
寄存器和
状态
寄存器---对应
接收中断
引脚;
TXRTSCTRL---TXnRTS
引脚
控制
和
状态
寄存器---对应
发送请求
引脚。
(2)CANSTAT/CTRL----CAN
状态和控制
寄存器。
(3)CANINTF/INTE----CAN中断
标志和使能
寄存器。
(4)REC---
接收错误
计数器;TEC---
发送错误
计数器;EFLG---
错误标志
寄存器。
REC---receive error counter;EFLG---error flag。
(5)CNF1/2/3----配置寄存器----用于
位定时/波特率
配置。
(6)TXBnCTRL----发送缓冲器n控制寄存器。
(7)RXBnCTRL----接收缓冲器n控制寄存器。
12 MCP2515的SPI详解
:
模式
:MCP2515 设计可与许多单片机的串行外设接口(SPI)直接相连,支持 0,0 和 1,1 运行模式。外部数据和命令通过 SI引脚传送到器件中,且数据在 SCK时钟信号的上升沿传送进去。MCP2515 在SCK的下降沿通过 SO引脚传送出去。在进行任何操作时, CS 引脚都必须保持为低电平。
CS
:CS 引脚被设置为低电平后,MCP2515希望收到的第一个字节是指令/命令字节。这意味着CS引脚必须先拉升为高电平然后再降为低电平以调用另外一个命令----
有待验证
(时序图与此
不一致
)。
注意
:此处经过验证发现
时序图是正确的
,
文字描述不正确
(可能是翻译的缘故),
结论
:
一、看中文翻译的datasheet,以
时序图为准
,因为时序图是
复制而来
的。
二、查看P65的
时序图
可知---各个指令大多包含
多个
指令数据的读写,在整个读写过程中CS
一直
保持为低,直到完成
整个
指令CS才能变为1。
指令详解
:
>>
复位指令
:复位指令为单字节指令。应先将CS引脚
置
0选中
器件,随后发送命令字节,发送完毕之后再将CS引脚
置1
。强烈建议将发送复位指令(或将RESET 引脚置为低电平)作为器件上电
初始化
过程中的一部分。
>>
读指令
:
将
CS
引脚置为低电平来启动读指令。随后向MCP2515依次发送
读指令
和 8 位
地址码
(A7 至 A0)。在接收到读指令和地址码之后, MCP2515 会将指定地址寄存器中的数据通过 SO引脚移出。
每一数据字节移出后,器件内部的地址指针将
自动加一
以指向下一个地址。因此,通过持续提供时钟脉冲,可以对下一个连续地址寄存器进行读操作。通过该方法可以
顺序读取任意个连续地址寄存器
中的数据。通过拉高CS引脚电平可以结束读操作。
>>
读
RX
缓冲器指令
:
相比于读指令
----读 RX缓冲器指令可以快速寻址要读取的接收缓冲器。该指令使 SPI
开销减少
了一个字节(地址字节)。
---指令码为10010nm0ànm对应
两个
接收缓冲器---每个缓冲器对应
一帧
数据----
一帧数据
包含
标准ID/扩展ID/DLC/数据(1-8Bytes)
。
>>
写指令
:
将CS引脚置为低电平来启动写操作。随后向MCP2515依次发送写指令、地址码和至少一个字节的数据(如果是多个数据,其地址是
连续的
)。
>>
装载
TX
缓冲器指令
:
该指令取消了一般写命令所需要的8 位地址。该8位指令将地址指针设置为6个地址之一,以便快速地将数据写入发送缓冲器,该地址指向
3个
发送缓冲器之一的“ID”或 “数据”地址---
每个缓冲器对应
一帧
数据----
一帧数据
包含
标准ID/扩展ID/DLC/数据(1-8Bytes)
。。
>>
请求发送
(
RTS
)指令:
使用RTS命令可以启动
一个或多个
发送缓冲器的报文发送。将CS引脚置为低电平来选中MCP2515。 之后向其发送RTS命令字节。该命令的
后3位
显示了哪些发送缓冲器被使能发送。该命令将缓冲器对应的TxBnCTRL.TXREQ 位置1。用一条RTS命令即可对这三位中的
一位或全部三位
置1。如果发送的RTS命令中
nnn
=000,将忽略该命令----
三个
n
对应三个
发送发送缓冲器
。
>>
读状态指令
:
读状态指令允许单条指令访问常用的报文
接收和发送状态位
。
>>
RX状态指令
:
RX 状态指令用于快速确定与报文和报文类型(标准帧、扩展帧或远程帧)相匹配的
滤波器
。命令字节发送后,控制器会返回包含状态信息的 8 位数据。
>>
位修改
指令
:
位修改指令可对特定状态和控制寄存器中
单独的位
进行置1或清零。该命令
并非
对
所有
寄存器有效。向 MCP2515发送位修改命令字节。命令字节发送后,依次发送寄存器地址、屏蔽字节以及数据字节。屏蔽字节确定允许修改寄存器中的哪一位。屏蔽字节中的
“
1”
表示
允许
对寄存器中的相应位进行修改;而
“
0”
则
禁止
修改。
13 初始化详解
:
复位:
MCP2515 有
两种复位
方式
:
1)硬件复位——RESET引脚为低电平。
2)SPI复位——通过 SPI
命令复位
---毕业设计
采用指令复位
。
进入配置模式---
初始化配置
:
1)在上电或复位时,器件会
自动进入
配置模式, 或通过CANTRL.
REQOP
位
设置成“100”也可使器件从任何模式进入配置模式。
2) 改变工作模式时,新的工作模式须等到所有当前报文发送完毕之后才生效。
必须
通过读取CANSTAT.OPMODE位来
验证
新的工作模式。
3) 进入配置模式时,所有
错误
计数器都被
清零
。
只有在配置模式
下,才能对以下寄存器进行修改:
• CNF1、 CNF2 和CNF3
• TXRTSCTRL
• 验收过滤寄存器
• 验收屏蔽寄存器
配置波特率
:
---
具体看位定时和波特率的详解。
配置发送
:
TXnRTS引脚配置----配置用来
禁用
三个发送请求引脚。
其余的
配置不需要在初始化时配置---
发送时再配置
也行
。
2) TXBnCTRL---配置报文发送
请求
和
优先级
。
3)标准ID和扩展
ID
配置---4个寄存器。
4)TXBnDLC----报文
类型(数据帧或请求帧)
和数据
长度(DLC)
配置。
5)发送缓冲器数据字节----(
0
—
8
个字节)。
配置接收
:
---配置RXB0
CTRL
——接收缓冲器 0/1
控制
寄存器;
---配置BFPCTRL——RXnBF
引脚
控制寄存器和状态寄存器;
---配置报文验收滤波器(
RXFn
)及屏蔽寄存器(
RX
M
n
)---见上面详解。
配置中断
:
---CANINTF---中断标志位初始化时
清零
。
---CANINTE---使能位(最常用的为
使能
接收
中断
)。
配置模式
:
---
正常
模式-------收发用;
---
回环
模式-------测试用;
14 MCP2515
发送函数
详解
:
---
至少
须将 TXBnS
ID
H、TXBnSIDL和 TXBn
DLC
寄存器装载数据---包含
ID、数据长度(字节数)和帧类型
。
---如果报文包含
数据
字节,还需要对 TXBnDm寄存器进行装载。
---若报文采用
扩展
标识符,对TXB-nEIDm寄存器进行装载,并将TXBnSIDL.EXIDE 位置1。
---在报文发送之前,MCU应对 CANINTE.TXInE位进行初始化,以便在报文发送时使能或禁止
中断
的产生。
15 MCP2515
接收函数
详解
:
---RXBnDLC---判断接收到的数据的
字节数
和
帧类型
。
---
接收信息
包含ID/扩展ID、帧类型、长度DLC和数据。
---RXB0CTRL---在
初始化
时进行配置即可。
16 MCP2515
中断函数
详解
:
---使能
外中断
。
---使能
CAN中断
(MCP2515有八个中断源)。
---初始化时对中断标志位
清零
。
---
ISR
中读中断标志判断中断源,然后进行相应的操作。
1 简介
:
MCP2515 是一款独立控制器局域网络(Controller Area Network,
CAN
)协议控制器,完全支持 CAN
V2.0B
技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以
过滤
掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU 的连接是通过业界标准串行外设接口(SearialPeripheral Interface,
SPI
)来实现的。
2 数据发送:
>>器件有三个引脚----TX0
RTS
/TX1RTS/TX2RTS用来启动将装载在三个发送缓冲器之一中的报文立即发送出去。是否使用这些引脚由用户决定;若不使用,也可利用
控制寄存器
(通过SPI接口访问)来启动报文发送---------三个
RTS引脚可以不用
。
>>报文
发送
时,首先将报文装载到正确的
报文缓冲器
和控制寄存器中。通过SPI接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作------常用
SPI启动发送
。
---正常情况下,如果 CAN 报文仲裁失败或被错误帧损坏,报文会尝试
再
次发送
。
3 数据接收:
>>器件上有一个
多用途中断
引脚及各
接收缓冲器
的
专用中断引脚
,用于指示有效报文是否被接收并载入接收缓冲器。可选择使用
专用
中断引脚。
通用
中断引脚和
状态
寄存器(通过SPI接口访问)也可用来确定何时接收了有效报文------为了减少引脚的使用,先使用通用中断引脚
检测中断的发生
,再通过读状态寄存器判断是
何种类型
的中断。
>>通过读取相应的寄存器可以检查通讯状态和错误。会对在CAN总线上
检测到
的任何报文进行错误检查,然后与用户定义的
滤波器进行匹配
,以确定是否将报文移到两个接收缓冲器中的一个。
4 CAN报文帧
:
(1)
标准数据帧
CAN标准数据帧与其他所有帧一样,帧以起始帧 (
SOF
)位开始,SOF 为显性状态,允许所有节点的硬同步。
SOF之后是
仲裁字段
, 由12个位组成, 分别为11个
标识位
和一个远程发送请求(Remote TransmissionRequest,
RTR
)位。RTR 位用于区分报文是数据帧
(RTR 位为
显性
状态)还是远程帧 (RTR 位为
隐性
状态)。
仲裁字段之后是
控制字段
,由6个位组成。控制字段的第一位为标识扩展(Identifier Extension,
IDE
)位,该位应是
显性
状态来指定
标准帧
。标识扩展位的下一位为零保留位(
RB0
) ,CAN 协议将其定义为
显性
位。控制字段的其余 4位为
数据
长度
码
(Data Length Code,DLC),用来指定报文中包含的数据字节数 (0 到 8 字节) 。
控制字段之后为
数据字段
,包含要发送的任何数据字节。数据字段长度由上述 DLC 定义 (0到 8 字节)。
数据字段之后为循环冗余校验(
CRC
)字段,用来检测报文传输错误。CRC字段包含一个15位的CRC序列,之后是隐性的 CRC定界位。
最后一个字段是确认字段(
ACK
),由2 个位组成。在确认时隙(ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
最后是
帧结尾
-------每一个数据帧和远程帧均由一标志序列界定。这个标志序列由
7 个“隐性”
位组成。
>>数据帧由
7 个
不同的位场组成。
(2)
扩展数据帧
在扩展 CAN数据帧中(如图 2-2 所示),紧随
SOF
位的是 32 位的仲裁字段。仲裁字段的前 11 位为 29 位标识符的最高有效位(Most Significant bit,
MSb
) (基本lD)。紧随这 11 位的是替代远程请求(SubstituteRemote Request,
SRR
)位,定义为隐性状态。SRR位之后是
IDE
位,该位为
隐性状态
时表示这是
扩展
的CAN帧。
应该注意的是, 如果发送完扩展帧标识符的前11位后,总线仲裁无果,而此时其中一个等待仲裁的节点发出标准CAN数据帧(11 位标识符),那么,由于节点发出了显性 lDE 位而使标准 CAN 帧赢得总线仲裁。另外,扩展 CAN 帧的SRR位应为
隐性
,以允许正在发送标准CAN 远程帧的节点发出
显性 RTR
位。
SRR和lDE位之后是标识符的其余18位(
扩展lD
) 及一个远程发送请求位。
为使标准帧和扩展帧都能在共享网络上发送,应将29位扩展报文标识符拆成高11 位和低 18 位两部分。拆分后可确保lDE位在标准数据帧和扩展数据帧中的位置保持一致。
仲裁字段之后是6位控制字段。控制字段前两位为
保留位
,必须定义为显性位---
与标准数据帧相同
。其余4 位为
DLC
,用来指定报文中包含的数据字节数。
扩展数据帧的
其他部分
(数据字段、CRC 字段、确认字段、帧结尾和间断)与标准数据帧的
结构相同
。
(3)
远程帧
----
请求数据
帧
通常,数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在
目标节点向源节点请求发送数据
的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。
远程帧与数据帧存在
两点不同
:
1)远程帧的
RTR
位为隐性状态;
2)远程帧没有
数据
字段。
当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。
>>远程帧由
6个不同的位场
组成---
没有数据帧
:
帧起始、仲裁场、控制场、CRC 场、应答场、帧末尾。
(4)
错误帧
>>由
两个位场
组成。第一个场用作为不同站提供的错误标志(ERROR FLAG)的
叠加
。第二个场是
错误界定符(含 8 个隐性位)
。
>>有
两种形式
的错误标志,
主动错误
标志(Active error flag)和
被动错误
标志(Passive error flag)。主动错误标志由 6个连续的“显性”位组成。被动错误标志由6个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。
(5)
过载帧:
过载帧包括
两个位场
:过载标志和过载界定符。
有两种过载条件都会导致过载标志的传送:
1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。
2. 间歇场期间检测到一“显性”位。
由过载条件 1 而引发的过载帧只允许起始于所期望的间歇场的第一个位时间开始。而由过载条件 2 引发的过载帧应起始于所检测到“显性”位之后的位。通常为了
延时
下一个数据帧或远程帧,两个过载帧都会产生。
>>过载标志由6个显性位组成--------------
所有形式和主动错误标志的一样
。
>>过载界定符包括8个隐性位----过载界定符的
形式和错误界定符的
形式一样
。
(6)
帧间间隔
:
帧间间隔将前一条帧(无论何种类型)与其后的数据帧或远程帧间隔开。帧间间隔
至少
由
3 个隐性位
构成,又称为间断。间断使节点在发送下一条报文之前有时间进行内部处理。在间断之后,CAN 总线将保持
隐性状态--总线空闲
,直至下一条报文开始发送。
5 位定时与波特率
:
CAN总线上的所有节点都必须具有相同的
标称比特率
。
CAN协议采用
不归零
(Non Return to Zero,NRZ)编码方式,在数据流中不对时钟信号进行编码。因此,接收时钟信号必须由接收节点恢复并与发送器的时钟
同步
。
由于不同节点的振荡器频率和传输时间不同,接收器应具有某种能与数据传输边沿同步的
锁相环
(Phase LockLoop,PLL)来同步时钟并保持这种同步。鉴于数据采用
NRZ
编码,有必要进行位填充以确保至少每 6 位时间发生一次边沿,使数字锁相环(Digital Phase LockLoop,DPLL)同步。
波特率
:
CAN 总线上的所有器件都
必须使用相同的比特率
。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波
特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。
求波特率过程
:配置
CNF1
得到
TQ
à配置
CNF2/3
得到
t
bit
à求倒数得到
波特率
。
位时间
:
CAN位时间由
互不重叠的
时间段
组成。 每个时间段又由时间份额(TQ)组成,在 CAN 规范中,标称
比特率
(NominalBit Rate,NBR)定义为在不需要再同步的情况下,理想发送器每秒发送的位数。
标称
比特率
:
NBR
----
标称
位时间
:
NBT
----
TQ
时间份额
:TQ = 2 x (BRP + 1)/FOSC
位时间各段如下:(与NBT四段对应)
其中同步段
固定
为1TQ,其他三段为
可编程
的。
------------------------
6 电气特性
:
显性电平对应逻辑 0,CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1,CAN_H 和 CAN_L 之差为 0V。在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN 总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
CAN技术标准
:
CAN协议经过ISO标准化后有两个标准: ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
7 工作模式
:
>>
利用CANCTRL. REQOP位可进行工作模式的
选择
。
>>
改变工作模式时,新的工作模式须等到所有当前报文发送完毕
之后
才生效
。
>>
必须通过读取CANSTAT.OPMODE位来
验证
新的工作模式。
(1)
配置模式:
MCP2515 在正常运行之前必须进行
初始化
。只有在配置模式下,才能对器件进行初始化。在上电或复位时,器件会
自动进入
配置模式, CANTRL.
REQOP
<2:0>
位设置成“100”也可使器件从任何模式进入配置模式。
(2)
休眠模式:
MCP2515 具有内部休眠模式,使器件功耗最少。即使MCP2515处于休眠模式,SPI接口仍然保持正常的读操作,以允许访问器件内的所有寄存器。
(3)
仅监听模式:
仅监听模式使MCP2515 可以接收包括错误报文在内的所有报文。这种模式可用于总线监视应用或热插拔状况下的波特率检测。
(4)
环回模式:
环回模式允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过 CAN 总线。此模式可用于系统开发和测试。
(5)
正常模式:
该模式为 MCP2515 的标准工作模式。器件处于此模式下,会主动监视总线上的所有报文,并产生确认位和错误帧等。只有在正常模式下,MCP2515才能在 CAN总线上进行报文的传输。
8 SPI指令集
:
---------通过SPI接口
直接写指令
即可,比如通过指令
复位
。
--------只有一种模式(即相当于STM32中的
屏蔽位模式
)。
--------过滤器与屏蔽器是
配合使用
的,不是单独使用的。
--------缓冲器+过滤器+屏蔽器à报文ID必须至少与一个过滤器
匹配
,即与过滤器中一些位(对应屏蔽器中为1的位)完全相同。
--------两个组合:
组合一:缓冲器1+屏蔽器1+过滤器1/2。
组合二:缓冲器2+屏蔽器2+过滤器3/4/5/6。
--------过滤器与缓冲器都是4Bytes,分别是
SIDH/SIDL/EID8/EID0
。
10 中断
:
MCP2515有
八个中断源
。
CANINTE
寄存器包含了使能各中断源的中断使能位。
CANINTF
寄存器包含了各中断源的中断标志位。当发生中断时, INT 引脚将被
MCP2515拉为低电平, 并保持低电平状态直至MCU清除中断。中断只有在引起相应中断的条件消失后,才会被清除。
建议在对 CANINTF 寄存器中的标志位进行复位操作时,采用
位修改命令
而不要使用一般的写操作。这是为了避免在写命令执行过程中无意间修改了标志位,进而导致中断丢失。应该注意的是,CANINTF中的中断标志位是
可读写位
,因此在相关 CANINTE 中断使能位置 1 的前提下,对上述任一位置 1均可使 MCU产生中断请求。
----
CANINTE
使能
与
CANINTF
标志
都是8位,并且各位是
一一对应
的。
11 寄存器简介
:
BFPCTRL---RXnBF
引脚
控制
寄存器和
状态
寄存器---对应
接收中断
引脚;
TXRTSCTRL---TXnRTS
引脚
控制
和
状态
寄存器---对应
发送请求
引脚。
(2)CANSTAT/CTRL----CAN
状态和控制
寄存器。
(3)CANINTF/INTE----CAN中断
标志和使能
寄存器。
(4)REC---
接收错误
计数器;TEC---
发送错误
计数器;EFLG---
错误标志
寄存器。
REC---receive error counter;EFLG---error flag。
(5)CNF1/2/3----配置寄存器----用于
位定时/波特率
配置。
(6)TXBnCTRL----发送缓冲器n控制寄存器。
(7)RXBnCTRL----接收缓冲器n控制寄存器。
12 MCP2515的SPI详解
:
模式
:MCP2515 设计可与许多单片机的串行外设接口(SPI)直接相连,支持 0,0 和 1,1 运行模式。外部数据和命令通过 SI引脚传送到器件中,且数据在 SCK时钟信号的上升沿传送进去。MCP2515 在SCK的下降沿通过 SO引脚传送出去。在进行任何操作时, CS 引脚都必须保持为低电平。
CS
:CS 引脚被设置为低电平后,MCP2515希望收到的第一个字节是指令/命令字节。这意味着CS引脚必须先拉升为高电平然后再降为低电平以调用另外一个命令----
有待验证
(时序图与此
不一致
)。
注意
:此处经过验证发现
时序图是正确的
,
文字描述不正确
(可能是翻译的缘故),
结论
:
一、看中文翻译的datasheet,以
时序图为准
,因为时序图是
复制而来
的。
二、查看P65的
时序图
可知---各个指令大多包含
多个
指令数据的读写,在整个读写过程中CS
一直
保持为低,直到完成
整个
指令CS才能变为1。
指令详解
:
>>
复位指令
:复位指令为单字节指令。应先将CS引脚
置
0选中
器件,随后发送命令字节,发送完毕之后再将CS引脚
置1
。强烈建议将发送复位指令(或将RESET 引脚置为低电平)作为器件上电
初始化
过程中的一部分。
>>
读指令
:
将
CS
引脚置为低电平来启动读指令。随后向MCP2515依次发送
读指令
和 8 位
地址码
(A7 至 A0)。在接收到读指令和地址码之后, MCP2515 会将指定地址寄存器中的数据通过 SO引脚移出。
每一数据字节移出后,器件内部的地址指针将
自动加一
以指向下一个地址。因此,通过持续提供时钟脉冲,可以对下一个连续地址寄存器进行读操作。通过该方法可以
顺序读取任意个连续地址寄存器
中的数据。通过拉高CS引脚电平可以结束读操作。
>>
读
RX
缓冲器指令
:
相比于读指令
----读 RX缓冲器指令可以快速寻址要读取的接收缓冲器。该指令使 SPI
开销减少
了一个字节(地址字节)。
---指令码为10010nm0ànm对应
两个
接收缓冲器---每个缓冲器对应
一帧
数据----
一帧数据
包含
标准ID/扩展ID/DLC/数据(1-8Bytes)
。
>>
写指令
:
将CS引脚置为低电平来启动写操作。随后向MCP2515依次发送写指令、地址码和至少一个字节的数据(如果是多个数据,其地址是
连续的
)。
>>
装载
TX
缓冲器指令
:
该指令取消了一般写命令所需要的8 位地址。该8位指令将地址指针设置为6个地址之一,以便快速地将数据写入发送缓冲器,该地址指向
3个
发送缓冲器之一的“ID”或 “数据”地址---
每个缓冲器对应
一帧
数据----
一帧数据
包含
标准ID/扩展ID/DLC/数据(1-8Bytes)
。。
>>
请求发送
(
RTS
)指令:
使用RTS命令可以启动
一个或多个
发送缓冲器的报文发送。将CS引脚置为低电平来选中MCP2515。 之后向其发送RTS命令字节。该命令的
后3位
显示了哪些发送缓冲器被使能发送。该命令将缓冲器对应的TxBnCTRL.TXREQ 位置1。用一条RTS命令即可对这三位中的
一位或全部三位
置1。如果发送的RTS命令中
nnn
=000,将忽略该命令----
三个
n
对应三个
发送发送缓冲器
。
>>
读状态指令
:
读状态指令允许单条指令访问常用的报文
接收和发送状态位
。
>>
RX状态指令
:
RX 状态指令用于快速确定与报文和报文类型(标准帧、扩展帧或远程帧)相匹配的
滤波器
。命令字节发送后,控制器会返回包含状态信息的 8 位数据。
>>
位修改
指令
:
位修改指令可对特定状态和控制寄存器中
单独的位
进行置1或清零。该命令
并非
对
所有
寄存器有效。向 MCP2515发送位修改命令字节。命令字节发送后,依次发送寄存器地址、屏蔽字节以及数据字节。屏蔽字节确定允许修改寄存器中的哪一位。屏蔽字节中的
“
1”
表示
允许
对寄存器中的相应位进行修改;而
“
0”
则
禁止
修改。
13 初始化详解
:
复位:
MCP2515 有
两种复位
方式
:
1)硬件复位——RESET引脚为低电平。
2)SPI复位——通过 SPI
命令复位
---毕业设计
采用指令复位
。
进入配置模式---
初始化配置
:
1)在上电或复位时,器件会
自动进入
配置模式, 或通过CANTRL.
REQOP
位
设置成“100”也可使器件从任何模式进入配置模式。
2) 改变工作模式时,新的工作模式须等到所有当前报文发送完毕之后才生效。
必须
通过读取CANSTAT.OPMODE位来
验证
新的工作模式。
3) 进入配置模式时,所有
错误
计数器都被
清零
。
只有在配置模式
下,才能对以下寄存器进行修改:
• CNF1、 CNF2 和CNF3
• TXRTSCTRL
• 验收过滤寄存器
• 验收屏蔽寄存器
配置波特率
:
---
具体看位定时和波特率的详解。
配置发送
:
TXnRTS引脚配置----配置用来
禁用
三个发送请求引脚。
其余的
配置不需要在初始化时配置---
发送时再配置
也行
。
2) TXBnCTRL---配置报文发送
请求
和
优先级
。
3)标准ID和扩展
ID
配置---4个寄存器。
4)TXBnDLC----报文
类型(数据帧或请求帧)
和数据
长度(DLC)
配置。
5)发送缓冲器数据字节----(
0
—
8
个字节)。
配置接收
:
---配置RXB0
CTRL
——接收缓冲器 0/1
控制
寄存器;
---配置BFPCTRL——RXnBF
引脚
控制寄存器和状态寄存器;
---配置报文验收滤波器(
RXFn
)及屏蔽寄存器(
RX
M
n
)---见上面详解。
配置中断
:
---CANINTF---中断标志位初始化时
清零
。
---CANINTE---使能位(最常用的为
使能
接收
中断
)。
配置模式
:
---
正常
模式-------收发用;
---
回环
模式-------测试用;
14 MCP2515
发送函数
详解
:
---
至少
须将 TXBnS
ID
H、TXBnSIDL和 TXBn
DLC
寄存器装载数据---包含
ID、数据长度(字节数)和帧类型
。
---如果报文包含
数据
字节,还需要对 TXBnDm寄存器进行装载。
---若报文采用
扩展
标识符,对TXB-nEIDm寄存器进行装载,并将TXBnSIDL.EXIDE 位置1。
---在报文发送之前,MCU应对 CANINTE.TXInE位进行初始化,以便在报文发送时使能或禁止
中断
的产生。
15 MCP2515
接收函数
详解
:
---RXBnDLC---判断接收到的数据的
字节数
和
帧类型
。
---
接收信息
包含ID/扩展ID、帧类型、长度DLC和数据。
---RXB0CTRL---在
初始化
时进行配置即可。
16 MCP2515
中断函数
详解
:
---使能
外中断
。
---使能
CAN中断
(MCP2515有八个中断源)。
---初始化时对中断标志位
清零
。
---
ISR
中读中断标志判断中断源,然后进行相应的操作。
举报
更多回帖
rotate(-90deg);
回复
相关问答
MCP2515
控制器
MCP2515
是什么?
MCP2515
协议
控制器
有哪些功能呢
2022-03-07
2630
与PIC16F877A的CAN接口如何
连接
MCP2515
?
2019-10-28
1041
MCP2515
错误帧
2018-11-27
4087
MCP2515
资料表存疑
2019-09-30
3635
可以通过SPI向
MCP2515
CAN总线监控演示板添加额外的器件吗?
2019-04-01
1287
pic16的j1939/
mcp2515
库文件有吗?
2018-10-30
1504
MCP2515
通信问题
2019-05-17
4061
如何解决扩展CAN芯片
MCP2515
的驱动移植问题?
2022-01-04
1748
基于stm32f103c8t6的有
mcp2515
的can例程
2014-05-27
13436
MCP2515
收发数据过程中,不触发中断
2022-12-23
1457
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分