独立CAN总线控制器SJA1000

项目场景:Inter模式下实现can标准帧/扩展帧(数据帧)回环

一.说明

1.开发环境:Vivado;CAN计算机/CAN盒

2.标准和规范:本项目使用500kbps速率,使用 ISO11898 标准。《CAN Specification V2.0B》,标准号:ISO11898(125kbps-1Mbps 的高速场合)/ISO11519(125kbps 以下的低速场合)。

3.约定:默认采用高字节在前、低字节在后的大端数据传输方式

二.实战

总流程分为三步骤:初始化配置寄存器、中断触发读取缓存数据、写指令发送缓存数据

1.初始化(配置方法、顺序不唯一)

标准帧 SFF
需要初始化9个寄存器:
(1)控制寄存器 CR:写入0x01,进入复位模式
在这里插入图片描述
(2)时钟分频寄存器 CDR:写入0x40,BasicCan模式
在这里插入图片描述
(3)总线定时寄存器0 BTR0:写入0x00,设置波特率
在这里插入图片描述

(4)总线定时寄存器1 BTR1:写入0x1C,设置波特率
在这里插入图片描述

(5)控制寄存器 CR:写入0x03,开启中断使能等
在这里插入图片描述

(6)输出控制寄存器 OCR:写入0x1A,配置输入/输出控制逻辑
在这里插入图片描述

扩展帧 EFF
需要初始化15个寄存器:
(1)模式寄存器MOD

2.发送部分

3.接收部分

三.经验

仅描述作者的个人理解,专业知识可查阅官方资料

  1. 标准帧和扩展帧区别
    识别码(ID)长短区别,标准帧2个字节,高11位有效,扩展帧4个字节,高29位有效;
    寄存器区别,如标准帧的控制(CR)寄存器相当于扩展帧的模式(MOD)寄存器+中断使能(IER)寄存器

  2. BasicCan模式和PeliCan模式区别
    BasicCan模式只适用于标准帧,PeliCan模式都适用,所以如果使用扩展帧格式传输,则必须用PeliCan模式

  3. 总线仲裁
    看两字节的识别码(ID)越小优先级越高

  4. 设置滤波器
    滤波器就是不接收指定的识别码(ID),通过ACR寄存器是需要滤除的ID对应位,而AMR寄存器值可以屏蔽滤波器对应位,否定之否定

  5. 配置can总线波特率
    16M晶振下:
    BTR0_INI_VAL=b1100_0000,BTR1_INI_VAL=b0101_1000
    其中,
    tSCL = 2 * (BTR0_INI_VAL[5:0]+1) / 16M = 2/16M
    tSYNC = tSCL = 2/16M
    tTSEG1 = tSCL * (BTR1_INI_VAL[3:0]+1) = 18/16M
    tTSEG2 = tSCL * (BTR1_INI_VAL[6:4]+1) = 12/16M
    所以,波特率 = 1 / (tSYNC+tTSEG1+tTSEG2) = 16M/32 = 500kbps
    但是,配置不唯一,例如BTR1_INI_VAL=0x1C,
    tTSEG1=26/16M,tTSEG2=4/16M,同样是500kbps
    最后,若要求SJW设置为最大容许值,则 BTR0_INI_VAL[7:6] = b11

  6. 控制sja1000读写的时钟是否也要匹配晶振的16M?
    实测不需要,但还是有一点疑问。猜测sja1000的接收、发送缓冲区是异步读写的,异步fifo有两个时钟,但是sja1000只知道它自己的工作时钟,另一个是如何知道的
    sja1000的时钟频率最大是24MHz

  7. 中断标志位持续时间
    微控制器的任何读访问将清除中断位,否则一直中断,兼容低时钟域的情况

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值